/* ============================================================
   HABIB EDUCATION — shared site components
   Header · footer · sections · cards · modal · tabs · forms
============================================================ */

/* ---------------- Base reset ----------------
   Browsers apply a default margin (usually 8px) to <body> out of the box.
   Without resetting it, every full-bleed section (like the homepage hero)
   ends up inset from the edges of the screen instead of touching them —
   invisible on white/matching-background sections, but visible as a gap
   on colored sections. Fixed-position elements (WA button, quiz icon) are
   NOT affected by this margin since they're positioned relative to the
   viewport, not to body — which is why only the hero/stats bar showed it. */
html,body{margin:0; padding:0;}

/* ---------------- Layout shell ---------------- */
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 28px;}
.section{padding:96px 0;}
section[id]{scroll-margin-top:84px;}
.section.tight{padding:64px 0;}
.section-soft{background:var(--bg-soft);}
.section-tint{background:var(--bg-tint);}
.section-head{max-width:660px; margin:0 auto 52px; text-align:center;}
.section-head.left{margin-left:0; text-align:left;}
.section-head h2{font-size:42px; margin-top:12px;}
.section-head p{color:var(--slate); font-size:19px; margin-top:14px;}
.eyebrow.center{display:block;}

/* ---------------- Header ---------------- */
.site-header{
  position:sticky;
  top:0;
  z-index:200;
  background:rgba(255,255,255,.86);
  backdrop-filter:saturate(150%) blur(12px);
  border-bottom:1px solid var(--line);
  transition:box-shadow .25s;
}
.site-header.scrolled{box-shadow:var(--sh-sm);}
.nav{display:flex; align-items:center; justify-content:space-between; height:74px;}
.brand{display:flex; align-items:center; gap:11px; font-family:var(--font-head); font-weight:800; font-size:21px; letter-spacing:-.01em; color:var(--ink);}
.brand .mark{width:38px;height:38px;border-radius:11px;background:var(--gradient-teal); display:grid;place-items:center;color:#fff; box-shadow:var(--sh-teal);}
.brand .mark svg{width:21px;height:21px;}
.brand .sub{font-weight:500;color:var(--slate);}
/* Prevent the header logo <img> from being squeezed narrower than its natural
   width by the flexbox layout on narrow (mobile) screens — without this, the
   image's fixed height stays the same while flexbox shrinks its width, which
   distorts/flattens the logo. flex-shrink:0 keeps it at its intrinsic ratio. */
.brand img{flex-shrink:0; max-width:none;}
.nav-menu{display:flex; align-items:center; gap:4px; list-style:none; margin:0; padding:0;}
.nav-menu a{
  font-family:var(--font-head);
  font-weight:100;
  font-size:15px;
  color:var(--ink-2);
  padding:9px 14px;
  border-radius:var(--r-pill);
  transition:.18s;
  display:block;
}
.nav-menu a:hover{color:var(--brand); background:var(--teal-50);}
.nav-menu a.active{color:var(--brand); font-weight:600;}
/* min-width:0 is the actual fix for the mobile overflow bug: a flex item
   (.nav-actions is a flex item of .nav) defaults to a hidden "minimum
   width" equal to the natural size of its content, which blocks it from
   ever shrinking smaller than that — even when a child further inside
   (.nav-utility) is explicitly set up to shrink/scroll. Without this line,
   that inner shrink-and-scroll behaviour never had a chance to kick in,
   because the outer box refused to get smaller in the first place, and
   that's what was forcing the whole page wider than the phone screen. */
.nav-actions{display:flex; align-items:center; gap:14px; min-width:0;}
/* .nav-utility groups the lower-priority header controls (search, language
   toggle, currency toggle) together so they can be tightened/scrolled as one
   unit on narrow screens without ever pushing the Apply button or hamburger
   (the two controls that must always stay reachable) out of the row. See the
   max-width:480px rule further down for the overflow-safety behaviour. */
.nav-utility{display:flex; align-items:center; gap:14px;}
.langtog{display:flex; border:1.5px solid var(--line); border-radius:var(--r-pill); overflow:hidden; font-family:var(--font-head); font-weight:600; font-size:13px; background:#fff; flex-shrink:0;}
.langtog button{padding:5px 11px; color:var(--slate); transition:.15s; font-size:17px; line-height:1;}
.langtog button.on{background:var(--brand); color:#fff;}
.hamburger{display:none; width:44px;height:44px; border-radius:11px; border:1.5px solid var(--line); background:#fff; align-items:center; justify-content:center; flex-direction:column; gap:4px; flex-shrink:0;}
.hamburger span{width:20px;height:2px;background:var(--ink); border-radius:2px; transition:.25s;}
.hamburger.open span:nth-child(1){transform:translateY(6px) rotate(45deg);}
.hamburger.open span:nth-child(2){opacity:0;}
.hamburger.open span:nth-child(3){transform:translateY(-6px) rotate(-45deg);}
/* mobile drawer */
.mobile-nav{
  position:fixed;
  inset:74px 0 auto 0;
  background:#fff;
  border-bottom:1px solid var(--line);
  box-shadow:var(--sh-lg);
  padding:14px 28px 26px;
  z-index:199;
  transform:translateY(-12px);
  opacity:0;
  pointer-events:none;
  transition:.25s;
  display:none;
}
.mobile-nav.open{transform:none; opacity:1; pointer-events:auto;}
.mobile-nav a{display:block; padding:14px 6px; font-family:var(--font-head); font-weight:500; font-size:17px; border-bottom:1px solid var(--line-2); color:var(--ink-2);}
.mobile-nav .btn{margin-top:18px; width:100%;}
.mobile-nav a.btn{color:#fff; border-bottom:0; text-align:center;}

/* ---------------- Cards ---------------- */
.card{background:#fff; border:1px solid var(--line); border-radius:var(--r-lg); overflow:hidden; transition:.25s; box-shadow:var(--sh-sm);}
.card:hover{box-shadow:var(--sh-lg); transform:translateY(-4px); border-color:var(--teal-100);}
/* Reset native <button> chrome for card buttons — home page's university/language-center
   grids render cards as <button> (for click-to-open-modal), and browsers add default
   padding/appearance to buttons that <div>-based cards don't have. Without this reset,
   images sit inset from the rounded corners instead of filling flush to them. */
button.card{padding:0; margin:0; border:1px solid var(--line); background:#fff; -webkit-appearance:none; appearance:none; width:100%; display:block; font:inherit; text-align:inherit; cursor:pointer;}
.grid{display:grid; gap:24px;}
.grid-3{grid-template-columns:repeat(3,1fr);}
.grid-2{grid-template-columns:repeat(2,1fr);}
.grid-4{grid-template-columns:repeat(4,1fr);}
/* photo placeholder */
.photo{position:relative; overflow:hidden; background:linear-gradient(150deg,#0E6E80,#1FA39A 65%,#1A66C9);}
.photo.alt{background:linear-gradient(150deg,#15506b,#2a7d8a 70%,#3a93a0);}
.photo .photo-lbl{position:absolute; bottom:10px; left:10px; background:rgba(255,255,255,.85); color:var(--brand); font-family:var(--font-head); font-weight:600; font-size:10.5px; letter-spacing:.03em; padding:3px 9px; border-radius:var(--r-pill); z-index:3;}
.photo svg.sky{position:absolute; bottom:0; left:0; width:100%; opacity:.5; z-index:1;}
.photo .glow{position:absolute; width:200px;height:200px; border-radius:50%; background:rgba(255,255,255,.16); filter:blur(30px); top:-40px; right:-40px;}
/* university card */
.uni-card .uni-img{height:190px;}
.uni-card .uni-body{padding:18px 20px; display:flex; align-items:center; gap:14px;}
.uni-logo{width:48px;height:48px;border-radius:11px; background:#fff; border:1px solid var(--line); display:grid; place-items:center; font-family:var(--font-head); font-weight:800; font-size:15px; color:var(--brand); flex:none; box-shadow:var(--sh-sm); overflow:hidden;}
.uni-card h3{font-size:17px; line-height:1.25;}
.uni-card .loc{color:var(--slate); font-size:13.5px; display:flex; align-items:center; gap:5px; margin-top:3px;}
/* badges */
.badge{display:inline-flex; align-items:center; gap:5px; font-family:var(--font-head); font-weight:600; font-size:12px; padding:5px 11px; border-radius:var(--r-pill); white-space:nowrap;}
.badge-amber{background:var(--amber-soft); color:#9a6b16;}
.badge-teal{background:var(--teal-50); color:var(--brand);}
.badge-blue{background:var(--blue-soft); color:var(--blue);}
.badge-green{background:var(--green-soft); color:#0f7a4f;}
.badge-coral{background:var(--coral-soft); color:var(--coral-dark);}
.badge-line{background:#fff; border:1px solid var(--line); color:var(--ink-2);}

/* ---------------- Floating WhatsApp button + consultant menu ---------------- */
.wa-float-wrap{
  position:fixed;
  right:20px;
  bottom:20px;
  z-index:400;
}
.wa-float{
  width:56px;
  height:56px;
  border-radius:50%;
  background:#25D366;
  color:#fff;
  display:grid;
  place-items:center;
  box-shadow:var(--sh-lg);
  transition:.18s;
  border:none;
  cursor:pointer;
  padding:0;
}
.wa-float svg{width:29px; height:29px;}
.wa-float:hover{transform:translateY(-3px) scale(1.05); box-shadow:var(--sh-xl,var(--sh-lg));}
/* popup menu with the 3 consultant options */
.wa-menu{
  position:absolute;
  right:0;
  bottom:68px;
  background:#fff;
  border-radius:var(--r-md);
  box-shadow:var(--sh-lg);
  border:1px solid var(--line);
  padding:10px;
  min-width:210px;
  opacity:0;
  transform:translateY(8px) scale(.96);
  pointer-events:none;
  transition:.18s;
  display:flex;
  flex-direction:column;
  gap:2px;
}
.wa-menu.open{opacity:1; transform:none; pointer-events:auto;}
.wa-menu-title{
  font-family:var(--font-head);
  font-weight:600;
  font-size:12px;
  color:var(--slate);
  padding:6px 10px 8px;
  white-space:nowrap;
}
.wa-menu a{
  display:flex;
  align-items:center;
  gap:10px;
  padding:10px;
  border-radius:10px;
  font-family:var(--font-head);
  font-weight:600;
  font-size:15px;
  color:var(--ink);
  transition:.15s;
}
.wa-menu a:hover{background:var(--bg-soft);}
.wa-flag{font-size:20px; line-height:1;}
@media(max-width:640px){
  .wa-float-wrap{right:14px; bottom:14px;}
  .wa-float{width:50px; height:50px;}
  .wa-float svg{width:26px; height:26px;}
  .wa-menu{right:0; bottom:62px; min-width:190px;}
}

/* ---------------- Modal ---------------- */
.modal-overlay{position:fixed; inset:0; background:rgba(9,40,46,.55); backdrop-filter:blur(4px); z-index:500; display:none; align-items:center; justify-content:center; padding:24px; opacity:0; transition:opacity .22s;}
.modal-overlay.open{display:flex; opacity:1;}
.modal{background:#fff; border-radius:var(--r-xl); max-width:540px; width:100%; max-height:90vh; overflow:auto; box-shadow:var(--sh-lg); transform:translateY(16px) scale(.98); transition:.28s; position:relative;}
.modal-overlay.open .modal{transform:none;}
.modal-close{position:absolute; top:16px; right:16px; width:38px;height:38px; border-radius:50%; background:rgba(255,255,255,.9); display:grid; place-items:center; box-shadow:var(--sh-sm); z-index:5; font-size:18px; color:var(--ink); transition:.15s;}
.modal-close:hover{background:#fff; transform:rotate(90deg);}
.modal-banner{height:auto; min-height:160px; background:var(--gradient-teal); position:relative; overflow:hidden;}
.modal-banner img.banner-img{width:100%;display:block;}
.modal-body{padding:0 30px 30px;}
.modal-logo{width:78px;height:78px;border-radius:18px; background:#fff; box-shadow:var(--sh-md); display:grid;place-items:center; font-family:var(--font-head); font-weight:800; font-size:24px; color:var(--brand); margin:-44px 0 14px; border:1px solid var(--line); position:relative; z-index:3;}
.modal h3{font-size:25px;}
.modal .loc{color:var(--slate); margin-top:4px; display:flex; gap:6px; align-items:center; font-size:15px;}
.modal-desc{color:var(--ink-2); margin-top:16px; font-size:16px;}
.modal-stats{display:flex; gap:12px; margin-top:20px;}
.modal-stat{flex:1; background:var(--bg-soft); border-radius:var(--r-md); padding:14px; text-align:center;}
.modal-stat b{display:block; font-family:var(--font-head); font-size:22px; color:var(--ink);}
.modal-stat small{color:var(--slate); font-size:12.5px; font-family:var(--font-head); font-weight:500;}

/* ---------------- Tabs ---------------- */
.tabs{display:flex; gap:6px; border-bottom:1px solid var(--line); margin-bottom:34px; overflow-x:auto;}
.tab{font-family:var(--font-head); font-weight:600; font-size:16px; color:var(--slate); padding:14px 22px; border-bottom:3px solid transparent; transition:.18s; white-space:nowrap;}
.tab:hover{color:var(--brand);}
.tab.active{color:var(--brand); border-color:var(--brand);}
.tab-panel{display:none; animation:fadeUp .4s ease;}
.tab-panel.active{display:block;}
@keyframes fadeUp{from{opacity:0; transform:translateY(10px);}to{opacity:1; transform:none;}}

/* ---------------- Table ---------------- */
.table{width:100%; border-collapse:collapse; font-size:16px; overflow:hidden; border-radius:var(--r-md); box-shadow:var(--sh-sm); background:#fff;}
.table th{background:var(--brand); color:#fff; text-align:left; font-family:var(--font-head); font-weight:600; font-size:14px; padding:14px 18px; letter-spacing:.02em;}
.table td{padding:14px 18px; border-bottom:1px solid var(--line-2); color:var(--ink-2);}
.table tr:nth-child(even) td{background:var(--bg-soft);}
.table tr:last-child td{border-bottom:none;}
.table td.price{font-family:var(--font-head); font-weight:700; color:var(--ink); white-space:nowrap;}

/* ---------------- Forms ---------------- */
.field{margin-bottom:18px;}
.field label{display:block; font-family:var(--font-head); font-weight:600; font-size:14px; margin-bottom:7px; color:var(--ink-2);}
.field input,.field textarea,.field select{
  width:100%;
  padding:13px 16px;
  border:1.5px solid var(--line);
  border-radius:var(--r-md);
  font-family:var(--font-body);
  font-size:16px;
  color:var(--ink);
  background:#fff;
  transition:.18s;
}
.field input:focus,.field textarea:focus,.field select:focus{outline:none; border-color:var(--brand); box-shadow:0 0 0 4px var(--teal-50);}
.field input.err,.field textarea.err{border-color:var(--coral);}
.field .msg{color:var(--coral); font-size:13px; margin-top:5px; font-family:var(--font-head); display:none;}
.field.invalid .msg{display:block;}

/* ---------------- Footer ---------------- */
.site-footer{background:var(--gradient-footer); color:#fff;}
.footer-top{display:grid; grid-template-columns:1.6fr 1fr 1fr 1.4fr; gap:40px; padding:64px 0 44px;}
.site-footer .brand{color:#fff;}
.site-footer .brand .sub{color:rgba(255,255,255,.7);}
.footer-about{color:rgba(255,255,255,.8); font-size:15px; margin-top:18px; max-width:300px;}
.footer-col h4{color:#fff; font-size:15px; letter-spacing:.04em; text-transform:uppercase; margin-bottom:16px; font-weight:600;}
.footer-col a{display:block; color:rgba(255,255,255,.78); padding:6px 0; font-size:15px; transition:.15s;}
.footer-col a:hover{color:#fff; padding-left:4px;}
.socials{display:flex; gap:10px; margin-top:18px;}
.socials a{width:40px;height:40px;border-radius:11px; background:rgba(255,255,255,.12); display:grid; place-items:center; transition:.18s;}
.socials a:hover{background:rgba(255,255,255,.25); transform:translateY(-2px);}
.socials svg{width:18px;height:18px; fill:#fff;}
.footer-bottom{border-top:1px solid rgba(255,255,255,.16); padding:22px 0; display:flex; justify-content:space-between; align-items:center; color:rgba(255,255,255,.7); font-size:14px; flex-wrap:wrap; gap:10px;}
/* newsletter strip */
.newsletter{background:var(--ink); color:#fff; border-radius:var(--r-xl); padding:46px 52px; display:flex; align-items:center; justify-content:space-between; gap:34px; flex-wrap:wrap;}
.newsletter h3{color:#fff; font-size:28px;}
.newsletter p{color:rgba(255,255,255,.72); margin-top:8px; font-size:16px;}
.newsletter form{display:flex; gap:12px; flex:1; min-width:300px; max-width:480px;}
.newsletter input{flex:1; padding:15px 18px; border-radius:var(--r-pill); border:none; font-size:16px; font-family:var(--font-body);}
.newsletter input:focus{outline:none; box-shadow:0 0 0 4px rgba(64,179,159,.4);}

/* ---------------- Reveal animation ---------------- */
.reveal{opacity:0; transform:translateY(24px); transition:opacity .7s ease, transform .7s ease; will-change:opacity, transform;}
.reveal.in{opacity:1; transform:none;}

/* ---------------- Page hero strip (inner pages) ---------------- */
.page-hero{background:var(--gradient-teal); color:#fff; padding:64px 0 70px; position:relative; overflow:hidden;}
.page-hero::before{content:""; position:absolute; inset:0; opacity:.16; background-image:radial-gradient(circle at 18% 28%,#fff 0 1px,transparent 1px); background-size:24px 24px;}
.page-hero .wrap{position:relative; z-index:2;}
.page-hero .crumb{font-family:var(--font-head); font-weight:500; font-size:14px; color:#CFEDED; display:flex; gap:8px; align-items:center;}
.page-hero h1{color:#fff; font-size:46px; margin-top:14px;}
.page-hero p{color:#E4F1F1; font-size:19px; margin-top:14px; max-width:620px;}
/* Page hero — optional photo background variant (opt-in via .has-photo + --hero-img inline var).
   Does not alter the base .page-hero rule, so pages without this class stay exactly as before. */
.page-hero.has-photo{background:var(--hero-img) center/cover no-repeat, var(--gradient-teal);}
.page-hero.has-photo::before{
  background-image:linear-gradient(180deg, rgba(9,40,46,.62), rgba(9,40,46,.78));
  background-size:cover;
  opacity:1;
}

/* ---------------- utility ---------------- */
.hide{display:none !important;}
.row{display:flex; align-items:center;}
.gap8{gap:8px;}
.gap12{gap:12px;}
.gap16{gap:16px;}
.mt8{margin-top:8px;}
.mt16{margin-top:16px;}
.mt24{margin-top:24px;}
.mt32{margin-top:32px;}
.center{text-align:center;}

/* ---------------- Responsive ---------------- */
@media(max-width:980px){
  .grid-3{grid-template-columns:repeat(2,1fr);}
  .grid-4{grid-template-columns:repeat(2,1fr);}
  .footer-top{grid-template-columns:1fr 1fr;}
  .nav-menu{display:none;}
  .hamburger{display:flex;}
  .mobile-nav{display:block;}
  .section{padding:70px 0;}
  .section-head h2{font-size:34px;}
}
/* ---------------- Header: crowded desktop row (fix overlap) ----------------
   Logo + 7 menu links + search/language/currency controls + "Apply Now" need about
   1230px of room, but the header content area is capped at --maxw (1240px) — and
   less on laptops. .nav-actions has min-width:0 (needed for the phone fix further
   down), so the browser squeezed that box narrower than its contents and the currency
   button and "Apply Now" were drawn on top of each other, while the menu links wrapped
   onto two lines ("Our / Services").
   Fix: above tablet size the action buttons never shrink, menu links stay on one line,
   spacing is tighter by default and tightens again on smaller laptops, and below 1200px
   the menu moves into the hamburger drawer (the same one already used on tablets/phones). */
@media(min-width:641px){
  .nav-actions,
  .nav-actions .apply-btn,
  .nav-utility{flex-shrink:0;}
}
.nav-menu a{white-space:nowrap;}
.nav-menu{gap:0;}
.nav-menu a{padding:9px 10px;}
.nav-actions{gap:10px;}
.nav-utility{gap:10px;}
@media(max-width:1360px){
  .nav-menu a{padding:9px 8px; font-size:14px;}
  .apply-btn{padding:12px 20px; font-size:15px;}
}
@media(max-width:1200px){
  .nav-menu{display:none;}
  .hamburger{display:flex;}
  .mobile-nav{display:block;}
}
@media(max-width:640px){
  .grid-3,.grid-2,.grid-4{grid-template-columns:1fr;}
  .footer-top{grid-template-columns:1fr;}
  .newsletter{padding:32px 22px; gap:20px;}
  .newsletter form{min-width:0; flex-direction:column;}
  .page-hero{padding:44px 0 48px;}
  .page-hero h1{font-size:32px;}
  .page-hero p{font-size:16px;}
  .section{padding:56px 0;}
  .section.tight{padding:40px 0;}
  .section-head{margin-bottom:36px;}
  .section-head h2{font-size:29px;}
  .section-head p{font-size:16px;}
  .wrap{padding:0 18px;}
  /* header / nav tightening */
  .nav-actions{gap:8px;}
  .nav-utility{gap:8px;}
  .langtog button{padding:5px 9px; font-size:12px;}
  .apply-btn{padding:9px 14px; font-size:14px;}
  /* modal */
  .modal-overlay{padding:10px;}
  .modal-body{padding:0 18px 22px;}
  .modal-logo{width:62px;height:62px;font-size:19px;border-radius:14px;margin:-34px 0 12px;}
  .modal h3{font-size:20px;}
  .modal-desc{font-size:15px;}
  .modal-stats{gap:7px;}
  .modal-stat{padding:10px 6px;}
  .modal-stat small{font-size:11.5px;}
  /* table — make scrollable on narrow screens */
  .table{display:block; overflow-x:auto; -webkit-overflow-scrolling:touch;}
  .table th,.table td{padding:10px 12px; font-size:14px;}
  .table td.price{white-space:normal;}
}

/* ---------------- Very narrow phones (fixes real horizontal-overflow bug) ----------------
   On screens this narrow (very common Android width, e.g. 360px), the header's logo +
   language toggle + "Apply Now" button + hamburger icon together need more width than is
   available, so the header row was overflowing past the right edge of the screen — which
   in turn dragged EVERY full-bleed section (hero, footer) and the fixed WhatsApp/quiz
   icons along with it, since the whole page ended up wider than the actual device screen.
   Hiding the header's "Apply Now" button here fixes it — the same action is still fully
   available via the big button in the hero section, and via the mobile menu (hamburger).

   UPDATE: a currency switcher icon was added to .nav-utility (alongside search + language
   toggle) later on, and on some phone widths it was enough to reopen the exact same
   overflow symptom again (apply-btn was already hidden here, so this time it was
   .nav-utility itself that no longer fit). Instead of continuing to hide controls one by
   one every time something new is added, .nav-utility now scrolls horizontally WITHIN
   itself if it doesn't fit — nothing is ever hidden or cut off-screen, and critically the
   page itself can never be forced wider than the device again, no matter how many icons
   end up in that cluster later. */
@media(max-width:480px){
  .site-header .nav-actions .apply-btn{display:none;}
  /* .btn normally forces its text to stay on one line (white-space:nowrap in
     brand.css) so the button grows as wide as needed to fit — fine for short
     labels like "Apply Now", but a longer label (e.g. "Chat via WhatsApp
     Sekarang") on a narrow phone screen was forcing the button (and the
     whole page along with it) wider than the screen. Letting text wrap to
     a 2nd line here instead keeps the button within the screen's width. */
  .btn{white-space:normal; text-align:center; max-width:100%; box-sizing:border-box;}
  .nav-utility{
    flex-wrap:nowrap;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    min-width:0;
    flex:1 1 auto;
  }
  .nav-utility::-webkit-scrollbar{display:none;}
}
/* Footer: copyright + privacy link; only the link for the active language is shown */
.footer-legal{display:inline-flex; gap:16px;}
.footer-legal a{color:rgba(255,255,255,.85); text-decoration:underline; text-underline-offset:3px;}
.footer-legal a:hover{color:#fff;}
html[lang="id"] .footer-legal .priv-en,html[lang="id"] .footer-legal .priv-ar,
html[lang="en"] .footer-legal .priv-id,html[lang="en"] .footer-legal .priv-ar,
html[lang="ar"] .footer-legal .priv-id,html[lang="ar"] .footer-legal .priv-en{display:none;}

/* ---------------- Floating "Our Channel" (kiri bawah, sejajar tombol WhatsApp) ---------------- */
.ch-float-wrap{position:fixed; left:20px; bottom:20px; z-index:400;}
.ch-float{position:relative; width:56px; height:56px; border-radius:50%; background:linear-gradient(135deg,#114c72,#0e4263); color:#fff; display:grid; place-items:center; box-shadow:var(--sh-lg); border:0; cursor:pointer; padding:0; transition:.18s;}
.ch-float svg{width:28px; height:28px;}
.ch-float:hover,.ch-float:focus-visible{transform:translateY(-3px) scale(1.05);}
.ch-float:focus-visible{outline:3px solid #07d0ac; outline-offset:3px;}
.ch-tip{position:absolute; left:calc(100% + 12px); top:50%; transform:translateY(-50%) translateX(-6px); background:#0e4263; color:#fff; font-family:var(--font-head); font-weight:600; font-size:14px; line-height:1; padding:10px 14px; border-radius:999px; white-space:nowrap; opacity:0; pointer-events:none; transition:.18s; box-shadow:var(--sh-md);}
.ch-float:hover .ch-tip,.ch-float:focus-visible .ch-tip{opacity:1; transform:translateY(-50%);}
.ch-float[aria-expanded="true"] .ch-tip{opacity:0;}
.ch-menu{position:absolute; left:0; bottom:68px; background:#fff; border-radius:var(--r-md); box-shadow:var(--sh-lg); border:1px solid var(--line); padding:10px; min-width:230px; opacity:0; transform:translateY(8px) scale(.96); transform-origin:left bottom; pointer-events:none; transition:.18s; display:flex; flex-direction:column; gap:2px;}
.ch-menu.open{opacity:1; transform:none; pointer-events:auto;}
.ch-menu-title{font-family:var(--font-head); font-weight:600; font-size:12px; color:var(--slate); padding:6px 10px 8px; white-space:nowrap;}
.ch-menu a{white-space:nowrap; display:flex; align-items:center; gap:12px; padding:10px; border-radius:10px; font-family:var(--font-head); font-weight:600; font-size:15px; color:var(--ink); transition:.15s;}
.ch-menu a:hover{background:var(--bg-soft);}
.ch-ic{width:34px; height:34px; border-radius:50%; display:grid; place-items:center; color:#fff; flex:none;}
.ch-ic svg{width:18px; height:18px; fill:currentColor;}
.ch-wa .ch-ic{background:#25D366;}
.ch-ig .ch-ic{background:linear-gradient(45deg,#f9a03f,#e1306c 55%,#833ab4);}
.ch-tt .ch-ic{background:#111;}
.ch-tg .ch-ic{background:#229ed9;}
.ch-yt .ch-ic{background:#ff0000;}
.ch-fb .ch-ic{background:#1877f2;}
.ch-li .ch-ic{background:#0a66c2;}
[dir="rtl"] .ch-float-wrap{left:auto; right:20px;}
[dir="rtl"] .ch-menu{left:auto; right:0; transform-origin:right bottom;}
[dir="rtl"] .ch-tip{left:auto; right:calc(100% + 12px);}
@media(max-width:640px){
  .ch-float-wrap{left:14px; bottom:14px;}
  [dir="rtl"] .ch-float-wrap{right:14px;}
  .ch-float{width:50px; height:50px;}
  .ch-float svg{width:26px; height:26px;}
  .ch-menu{bottom:62px; min-width:210px;}
  .ch-tip{display:none;}
}
@media(prefers-reduced-motion:reduce){.ch-float,.ch-menu,.ch-tip{transition:none;}}

/* logo footer (gambar penuh, tinggi tetap) */
.site-footer .brand .footer-logo{height:56px;width:auto;max-width:100%;display:block}
