/*
 * Early-load utility classes from the body HTML widget.
 * Smooth scroll is NOT declared here: elementor-frontend.min.css already ships
 * @media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}},
 * which is what live uses. Duplicating it here added nothing.
 */
.gradient-text {
  background: linear-gradient(to right, #e2be69, #d18200);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  color: transparent;
}

.white-bold-text {
  color: #ffffff;
  font-weight: 700;
}

/*
 * Top border only, as the class name says. It was `border: 1px solid transparent`
 * on all four sides against a gradient border-box, so every element carrying the
 * class painted a gold hairline at BOTH its top and its bottom -- which doubled
 * the line wherever two such sections met, and left a stray line cutting across
 * a section's middle.
 */
.twx-border-top {
  background:
    linear-gradient(#000 0 0) padding-box,
    linear-gradient(270deg, rgba(117, 249, 145, 0) 0%, #e2be69 50.51%, rgba(117, 249, 145, 0) 101.07%)
      border-box;
  border: 0 solid transparent;
  border-top-width: 1px;
  border-radius: 0;
}

/*
 * Needs Elementor-level specificity: post-17915.css sets border-width on the
 * element itself, so a bare .twx-border-top lost and all four sides kept
 * painting (measured 1px 1px 1px 1px).
 */
.elementor-17915 .elementor-element.twx-border-top {
  border-width: 1px 0 0 0;
}

/*
 * Stray gold hairlines, now removed at every width (previously only <=767px).
 *
 * .border-bottom-gradient draws a 2px gold rule at the bottom of whatever
 * carries it, and three of those landed badly on desktop:
 *   - ab55a94 (y7494) sat ~200px above a451418's own section border (y7697), so
 *     the Community/Bonus boundary showed TWO lines.
 *   - e0252ad (y7133) added a third in the same band.
 *   - eea1cfd (y10541) cut straight across the middle of the Chart Ideas /
 *     Live Portfolio card, full width.
 * a451418's top border is kept -- that is the real section separator.
 */
.elementor-17915 .elementor-element.elementor-element-e0252ad.border-bottom-gradient::after,
.elementor-17915 .elementor-element.elementor-element-ab55a94.border-bottom-gradient::after,
.elementor-17915 .elementor-element.elementor-element-eea1cfd.border-bottom-gradient::after {
  display: none;
}

.twx-bg-gradient {
  background-color: #000000;
  background-image: radial-gradient(
    93.75% 95.15% at 21.89% 4.85%,
    rgba(103, 103, 103, 0.4) 0%,
    rgba(41, 25, 0, 0.4) 58.66%,
    rgba(155, 96, 7, 0.4) 100%
  );
}

.twx-bg-gradient-2 {
  background-color: #000000;
  background-image: radial-gradient(
    93.75% 95.15% at 21.89% 4.85%,
    rgba(155, 96, 7, 0.4) 0%,
    rgba(41, 25, 0, 0.4) 51.91%,
    rgba(155, 96, 7, 0.4) 100%
  );
}

.border-bottom-gradient {
  position: relative;
}

.border-bottom-gradient::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: linear-gradient(
    270deg,
    rgba(117, 249, 145, 0) 0%,
    #e2be69 50.51%,
    rgba(117, 249, 145, 0) 101.07%
  );
  pointer-events: none;
}

/*
 * Scroll-reveal removed: the exported page contains zero e-animation /
 * elementor-invisible classes, so live has no section fade-in. The fade-up was
 * added locally and read as a difference from the live design.
 */

/* WP live: masthead kosong, nav di body page 17915 */
body.page-id-17915 {
  padding-top: 0 !important;
}

#masthead:empty {
  height: 0;
  min-height: 0;
  overflow: hidden;
  border: none;
  position: absolute;
  pointer-events: none;
}

/* Hero bg di belakang nav + konten */
.elementor-17915 {
  position: relative;
}

.elementor-17915 .elementor-element.elementor-element-a9fe13c {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1;
  pointer-events: none;
}

.elementor-17915 .elementor-element.elementor-element-a85b357,
.elementor-17915 .elementor-element.elementor-element-97f8b21 {
  position: relative;
  z-index: 2;
}

.elementor-17915 .elementor-element.elementor-element-a85b357 {
  z-index: 10;
}

/* Desktop: headline tidak tembus kolom kanan */
@media (min-width: 881px) {
  .elementor-17915 .elementor-element.elementor-element-7bcf5e3 {
    max-width: 703px;
    width: 100%;
  }

  .elementor-17915 .elementor-element.elementor-element-7bcf5e3 .elementor-heading-title {
    text-align: left;
  }

  .elementor-17915 .elementor-element.elementor-element-6d4b730 {
    max-width: 586px;
    overflow: hidden;
  }
}

/* Bootstrap reboot jangan override elementor grid */
.site-main .elementor,
.site-main .elementor * {
  box-sizing: border-box;
}

/*
 * CTA hover lift removed: translateY(-2px) + brightness(1.08) was added locally.
 * Elementor supplies no such hover on these buttons, so live does not lift them.
 */

/* Old WP login modal — replaced by React AuthModal */
#login-modal {
  display: none !important;
}

/* FAQ nested accordion */
.elementor-widget-n-accordion .e-n-accordion {
  width: 100%;
}

.elementor-widget-n-accordion .e-n-accordion-item > summary {
  list-style: none;
}

.elementor-widget-n-accordion .e-n-accordion-item > summary::-webkit-details-marker {
  display: none;
}

.elementor-widget-n-accordion .e-n-accordion-item > [role="region"] {
  width: 100%;
}

.elementor-17915 .elementor-element.elementor-element-53f438a .e-n-accordion-item-title-text {
  font-family: "Inter", sans-serif;
}

/* Footer Discord badge — reset negative margin Elementor */
.elementor-17915 .elementor-element.elementor-element-9af396d > .elementor-widget-container {
  margin-left: 0 !important;
}

/*
 * Heading-widget links. The theme's style.css:537 sets a bare global
 * `a { color: #4169e1 }`. Live overrides that for heading widgets, but the export
 * ships nothing that does, so the footer policy links (Syarat & Ketentuan,
 * Kebijakan Privasi) rendered royalblue locally while live shows them in the
 * heading's own colour. Inherit so they track the heading, as on live.
 */
.elementor-widget-heading .elementor-heading-title a {
  color: inherit;
}

/*
 * Same root cause, but it reaches much further than the footer: style.css also
 * ships `a:visited { color: #800080 }` (line 541), and this whole WordPress /
 * Elementor stylesheet stack is loaded on every route, not just the landing
 * page. So the React app inherited the stock underscores palette -- the course
 * card titles rendered royalblue, and "Balik ke beranda" / "Login" on the auth
 * pages turned purple once visited. Nothing in this design asks for either
 * colour. Every element that wants a link colour sets it via a class, which
 * outranks this, so handing plain links back to their parent is safe.
 */
a:link,
a:visited {
  color: inherit;
}

/*
 * Coupon field, revealed by "Punya Kode Promo?" (toggled in LandingScripts).
 *
 * The <input> carries inline `border:none !important; background:none !important`,
 * and an inline !important cannot be overridden from a stylesheet -- so the field
 * look goes on its .field-outer wrapper and the input stays transparent inside.
 */
.coupon_toggler_input.hidden {
  display: none;
}

/*
 * The checkout button below sits on a negative top margin, so once the coupon
 * field appeared the button overlapped it. The extra bottom margin buys back
 * more than that negative offset, and the stacking context keeps the field above
 * the button if anything else shifts.
 */
/*
 * One row, not two. The wrapper is display:block holding an inline <svg> and an
 * inline-block <input>, so they wrapped onto separate lines and read as a box
 * inside a box. Flex puts the icon and field on a single line, and the width is
 * forced because the theme sizes .field-outer to 360px regardless of its 909px
 * parent.
 */
.coupon_toggler_input {
  display: flex;
  align-items: center;
  gap: 10px;
  position: relative;
  z-index: 2;
  width: 100% !important;
  max-width: none !important;
  height: 52px;
  margin-top: 12px;
  margin-bottom: 48px;
  padding: 0 14px;
  border: 1px solid rgba(226, 190, 105, 0.28);
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.04);
}

.coupon_toggler_input svg {
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
}

.coupon_toggler_input input {
  flex: 1 1 auto;
  min-width: 0;
  width: auto;
  height: 100%;
  padding: 0;
  color: #f5f3f0;
  font: 600 14px/20px Inter, system-ui, sans-serif;
  text-transform: none;
}

.coupon_toggler_input input::placeholder {
  color: #98938e;
}

/*
 * Match the CTA width beneath it, and replace the UA's blue focus ring with the
 * brand gold. The dashboard's focus styles are scoped to .twx-course-page, so the
 * landing needs its own.
 */
.coupon_toggler_input {
  width: 100%;
}

.coupon_toggler_input input:focus {
  outline: none;
}

.coupon_toggler_input input:focus-visible {
  outline: 2px solid #e2be69;
  outline-offset: 2px;
  border-radius: 8px;
}

.coupon-toggler-container:focus-visible {
  outline: 2px solid #e2be69;
  outline-offset: 2px;
  border-radius: 8px;
}

.twx-nav-hidden {
  display: none !important;
}

/*
 * "Course" entry added to the landing header, before Login. Styled as a plain
 * text link rather than a third pill so it does not compete with the two CTAs.
 *
 * Hidden below 768px on purpose: the phone header is already exactly full at
 * one row (152px lockup + 141px of Login/Sign-up inside a 314px content box),
 * so a third item would wrap it again. Mobile reaches /course from the footer.
 */
.twx-nav-course .elementor-button {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 10px 14px;
  border: 0;
  background: transparent;
  color: #f5f3f0;
  font-size: 14px;
  font-weight: 600;
  transition: color 0.2s ease;
}

.twx-nav-course .elementor-button:hover,
.twx-nav-course .elementor-button:focus-visible {
  color: #e2be69;
}

@media (max-width: 767px) {
  .twx-nav-course {
    display: none;
  }
}

/*
 * Divider widgets. Elementor renders these via widget-divider.min.css, which this
 * export omits entirely. post-17915.css does define the per-instance custom
 * properties (--divider-color / --divider-border-width / --divider-border-style,
 * 8 instances each), but with nothing consuming them all 8 dividers rendered
 * invisible -- including the vertical rules that carry --e-transform-rotateZ:90deg.
 * The markup is <div class="elementor-divider"><span class="elementor-divider-separator">
 * </span></div>, so the empty span must fill its container for the border to show.
 * Every divider on this page is the --view-line variant.
 */
.elementor-widget-divider .elementor-divider {
  display: flex;
}

.elementor-widget-divider .elementor-divider-separator {
  display: flex;
  flex: 1 1 auto;
  margin: 0;
  direction: ltr;
}

.elementor-widget-divider--view-line .elementor-divider-separator {
  border-block-start: var(--divider-border-width, 1px) var(--divider-border-style, solid)
    var(--divider-color, currentColor);
}

/*
 * Elementor kit-7 breakpoints (frontend.min.css ships -1px placeholders).
 * Without this, elementor-hidden-widescreen is display:none at ALL widths
 * and mobile-only images/cards never appear.
 */
@media (max-width: 2399px) {
  .elementor .elementor-hidden-widescreen {
    display: revert;
  }
}

@media (max-width: 767px) {
  .elementor .elementor-hidden-mobile,
  .elementor .elementor-hidden-phone {
    display: none !important;
  }
}

@media (min-width: 768px) and (max-width: 880px) {
  .elementor .elementor-hidden-mobile_extra {
    display: none !important;
  }
}

@media (min-width: 881px) and (max-width: 1024px) {
  .elementor .elementor-hidden-tablet {
    display: none !important;
  }
}

@media (min-width: 1025px) and (max-width: 1200px) {
  .elementor .elementor-hidden-tablet_extra {
    display: none !important;
  }
}

@media (min-width: 1201px) and (max-width: 1366px) {
  .elementor .elementor-hidden-laptop {
    display: none !important;
  }
}

@media (min-width: 1367px) and (max-width: 2399px) {
  .elementor .elementor-hidden-desktop {
    display: none !important;
  }
}

@media (min-width: 2400px) {
  .elementor .elementor-hidden-widescreen {
    display: none !important;
  }
}

/* TWX auth forms — kill WP/theme double input frames (must load after theme-default.css) */
.twx-auth-modal label.twx-auth-field,
.twx-auth-page label.twx-auth-field {
  margin: 0 !important;
  padding: 0 !important;
  display: block !important;
  position: relative !important;
  border: none !important;
}

.twx-auth-modal label.twx-auth-field input,
.twx-auth-modal label.twx-auth-field .twx-auth-field__input,
.twx-auth-page label.twx-auth-field input,
.twx-auth-page label.twx-auth-field .twx-auth-field__input,
.twx-auth-modal label.twx-auth-field input:focus,
.twx-auth-modal label.twx-auth-field .twx-auth-field__input:focus,
.twx-auth-page label.twx-auth-field input:focus,
.twx-auth-page label.twx-auth-field .twx-auth-field__input:focus {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  height: auto !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  outline: none !important;
  box-shadow: none !important;
  background: transparent !important;
  background-color: transparent !important;
  font-size: 15px !important;
  font-weight: 600 !important;
  line-height: 1.4 !important;
  color: #f5f3f0 !important;
  font-family: Inter, system-ui, sans-serif !important;
  -webkit-appearance: none !important;
  appearance: none !important;
}

.twx-auth-modal .twx-auth-btn-hot,
.twx-auth-modal .twx-auth-submit,
.twx-auth-page .twx-auth-btn-hot,
.twx-auth-page .twx-auth-submit {
  text-transform: none !important;
  color: #fff !important;
}

/* ==========================================================================
 * Design pass — decorative rules, pricing header, mobile layout
 * ========================================================================== */

/*
 * 1. Decorative vertical hairlines.
 * Five divider widgets (--divider-color:#B8883750, rotated via
 * --e-transform-rotateZ:90deg) sit between sections purely as ornament:
 * 39c78be (MEET XANDER -> COMMUNITY), 731624b (ALPHA CALLS -> KUALITAS),
 * 993eb34 (-> PRICING), 8c85370 (-> FAQ), and e36360c, which resolves to a
 * 0x0 box and never painted at all.
 *
 * Only the stroke and its drop shadow are dropped. Each widget is also the
 * section gap (138-283px of the flex column it lives in), so the box is kept
 * and vertical rhythm is unchanged. e36360c contributes no height, so it goes.
 */
.elementor-17915 .elementor-element.elementor-element-39c78be,
.elementor-17915 .elementor-element.elementor-element-731624b,
.elementor-17915 .elementor-element.elementor-element-993eb34,
.elementor-17915 .elementor-element.elementor-element-8c85370 {
  --divider-border-width: 0;
}

.elementor-17915 .elementor-element.elementor-element-39c78be .elementor-divider-separator,
.elementor-17915 .elementor-element.elementor-element-731624b .elementor-divider-separator,
.elementor-17915 .elementor-element.elementor-element-993eb34 .elementor-divider-separator,
.elementor-17915 .elementor-element.elementor-element-8c85370 .elementor-divider-separator {
  border: 0;
}

.elementor-17915 .elementor-element.elementor-element-39c78be > .elementor-widget-container,
.elementor-17915 .elementor-element.elementor-element-731624b > .elementor-widget-container,
.elementor-17915 .elementor-element.elementor-element-993eb34 > .elementor-widget-container,
.elementor-17915 .elementor-element.elementor-element-8c85370 > .elementor-widget-container {
  box-shadow: none;
}

.elementor-17915 .elementor-element.elementor-element-e36360c {
  display: none;
}

/*
 * 2. Pricing card header lockup.
 * post-17915.css pulls the Premium / Premium+ logo lockup out of the card with
 * margin-left:-55px (desktop) and -68px (<=767px), so it hangs past the card's
 * left edge on desktop and is clipped by the viewport on mobile. Align it to
 * the same left edge as the description and price rows beneath it, and center
 * both header columns against each other.
 */
.elementor-17915 .elementor-element.elementor-element-dea1412 > .elementor-widget-container,
.elementor-17915 .elementor-element.elementor-element-1295645 > .elementor-widget-container {
  margin-left: 0;
}

.elementor-17915 .elementor-element.elementor-element-903345c,
.elementor-17915 .elementor-element.elementor-element-9141f00 {
  justify-content: center;
}

/*

/* ==========================================================================
 * Mobile (<=767px)
 *
 * The export bakes per-breakpoint pixel geometry from the Elementor editor:
 * the hero container is pinned to --width:257.364px and its children carry
 * large negative margins to claw back the difference. That scaffolding is left
 * alone — it is what makes the headline, CTA and badges land correctly. Only
 * the boxes that escape the viewport are corrected, plus touch-target and
 * type-size floors.
 * ========================================================================== */

/*
 * Hero "Alpha Calls" composite (410614e). This is the hero graphic for the
 * phone and mobile_extra bands only -- its desktop counterpart (5b5f7de) is
 * display:none below 881px. It is absolutely positioned inside a container far
 * narrower than itself and then dragged back with large asymmetric margins,
 * differently per band, and in both the image ran past the viewport and was cut
 * off: body.scrollWidth measured 704px on a 390px screen and 1022px on a 768px
 * one (the document itself clips, so this never surfaced as a scrollbar -- the
 * artwork was simply sliced at both edges).
 *
 * The two bands need different geometry, so they are handled separately below:
 * a contained full-bleed band under the copy on phones, and the empty right
 * half of the hero in landscape.
 */
@media (max-width: 767px) {
  .elementor-17915 .elementor-element.elementor-element-410614e {
    left: 50% !important;
    right: auto !important;
    transform: translateX(-50%);
    width: 100vw !important;
    max-width: 100vw !important;
    --container-widget-width: 100vw;
  }

  .elementor-17915 .elementor-element.elementor-element-410614e > .elementor-widget-container {
    margin-inline: 0 !important;
    width: 100%;
  }

  .elementor-17915 .elementor-element.elementor-element-410614e img {
    width: 100%;
    height: auto;
  }
}

/*
 * Phone landscape / small tablet. The authored left:404px + 594px width + a
 * -229px/262px margin pair landed the collage on top of the headline and CTA.
 * The hero copy column only occupies the left ~394px here, so seat the collage
 * in the free right half at a size that fits.
 */
@media (min-width: 768px) and (max-width: 880px) {
  .elementor-17915 .elementor-element.elementor-element-410614e {
    top: 0 !important;
    left: auto !important;
    right: 0 !important;
    width: min(44vw, 340px) !important;
    max-width: none !important;
    --container-widget-width: 100%;
  }

  .elementor-17915 .elementor-element.elementor-element-410614e > .elementor-widget-container {
    margin: 0 !important;
    width: 100%;
  }

  .elementor-17915 .elementor-element.elementor-element-410614e img {
    width: 100%;
    height: auto;
  }

  /*
   * The section after the hero is pulled up with a flat margin-top:-783px,
   * which is tuned to the 2149px desktop hero. Here the hero is only 1193px,
   * so -783px dragged "APA KATA MEREKA" over the headline and the social-proof
   * badges. Scale the overlap to this hero instead.
   */
  .elementor-17915 .elementor-element.elementor-element-5c0cd62 {
    margin-top: -480px;
  }
}

@media (max-width: 880px) {
  /*
   * Safety net for both bands: this page carries ~40 hand-tuned negative
   * margins, so pin the clip to #landing-body instead of relying on whatever
   * ancestor happens to contain it. overflow-x:clip creates no scroll
   * container, so sticky/fixed descendants keep working.
   */
  #landing-body {
    overflow-x: clip;
  }
}

@media (max-width: 767px) {
  /*
   * Pricing CTA (memberpay checkout shortcode). Widget is 308px with
   * margin:-28px -109px -60px -39px, i.e. a 456px box inside a 303px card, so
   * the gold button overflowed the card and the viewport. Fill the card width.
   */
  .elementor-17915 .elementor-element.elementor-element-ac718ea,
  .elementor-17915 .elementor-element.elementor-element-60b635a {
    width: 100% !important;
    max-width: 100% !important;
    --container-widget-width: 100%;
  }

  /*
   * The -28px/-60px vertical margins also collapsed the widget box to 0px, so
   * the 56px button painted outside its own layout box and the card closed on
   * ~150px of dead space. Let it occupy its real height instead.
   */
  .elementor-17915 .elementor-element.elementor-element-ac718ea > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-60b635a > .elementor-widget-container {
    margin: 0 !important;
    padding: 0 !important;
  }

  /*
   * Header. The logo lockup (180px) plus the Login/Sign-up pair (141px) came to
   * 321px inside a 314px content box, so --flex-wrap-mobile:wrap dropped the
   * buttons onto a second row and left the whole right half of the bar empty.
   * Trim the gutters and the lockup so the bar holds one row.
   */
  .elementor-17915 .elementor-element.elementor-element-a1ef457 {
    --flex-wrap: nowrap;
    --padding-left: 14px;
    --padding-right: 14px;
  }

  .elementor-17915 .elementor-element.elementor-element-057922e > .elementor-widget-container {
    margin-left: 0;
  }

  .elementor-17915 .elementor-element.elementor-element-057922e img {
    width: 152px;
  }

  /* ------------------------------------------------------------------------
   * Left/right gutters.
   *
   * The section wrapper already gives a symmetric 41px/41px column (308px of
   * 390px). Content drifted off it by 9-28px because the editor baked a per
   * element inline margin onto almost every block -- "Harga Sampai Periode"
   * painted 18px from the left edge but 45px from the right, the pricing cards
   * sat at 12/21, and their feature list overran the right padding by 17px.
   *
   * Note these offsets are load-bearing: the column is a flex container with
   * align-items:center, so a child's width is shrink-to-fit over its contents
   * *including* those negative margins. Simply zeroing one side re-sizes the
   * child and moves it further off-centre. The fix is to break that coupling
   * with align-self:stretch, then let text-align do the centring.
   * ---------------------------------------------------------------------- */

  /* Centred headings, eyebrows and CTAs: fill the column, centre the text. */
  .elementor-17915 .elementor-element.elementor-element-6586760,
  .elementor-17915 .elementor-element.elementor-element-e28ab6f,
  .elementor-17915 .elementor-element.elementor-element-b33f207,
  .elementor-17915 .elementor-element.elementor-element-15c40db,
  .elementor-17915 .elementor-element.elementor-element-c7c2294,
  .elementor-17915 .elementor-element.elementor-element-9a1d090,
  .elementor-17915 .elementor-element.elementor-element-5bfc25b,
  .elementor-17915 .elementor-element.elementor-element-eb18469,
  .elementor-17915 .elementor-element.elementor-element-ad0bf17,
  .elementor-17915 .elementor-element.elementor-element-abf05d5,
  .elementor-17915 .elementor-element.elementor-element-700d24a,
  .elementor-17915 .elementor-element.elementor-element-298fb9a {
    align-self: stretch;
    width: 100%;
    max-width: 100%;
  }

  .elementor-17915 .elementor-element.elementor-element-6586760 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-e28ab6f > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-b33f207 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-15c40db > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-c7c2294 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-9a1d090 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-5bfc25b > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-eb18469 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-ad0bf17 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-abf05d5 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-700d24a > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-298fb9a > .elementor-widget-container {
    margin-inline: 0;
  }

  /*
   * These two eyebrows were only centred as a side effect of the shrink-to-fit
   * box; once the widget fills the column they need a real text-align.
   */
  .elementor-17915 .elementor-element.elementor-element-6586760 .elementor-heading-title,
  .elementor-17915 .elementor-element.elementor-element-eb18469 .elementor-heading-title {
    text-align: center;
  }

  /*
   * Pricing cards. --width is 116% of the 308px column, so (100% - 116%) / 2
   * centres them; the authored -29px overshot and left 12px/21px gutters.
   * Padding was 38px left against 33px right, which tilted every row inside.
   */
  .elementor-17915 .elementor-element.elementor-element-c0b4f24,
  .elementor-17915 .elementor-element.elementor-element-cf74c6e {
    margin-left: -8%;
    --padding-left: 33px;
    --padding-right: 33px;
  }

  /*
   * Card inner columns carry a baked --width:303.477px, wider than the 291px
   * left by the card's padding, so the feature list and CTA overran the right
   * gutter. The card itself is align-items:normal, so 100% is safe here.
   */
  .elementor-17915 .elementor-element.elementor-element-d832579,
  .elementor-17915 .elementor-element.elementor-element-ac718ea,
  .elementor-17915 .elementor-element.elementor-element-4faf73d,
  .elementor-17915 .elementor-element.elementor-element-bf582a0,
  .elementor-17915 .elementor-element.elementor-element-60b635a,
  .elementor-17915 .elementor-element.elementor-element-7b838f2 {
    --width: 100%;
  }

  /* Card header column sat 15px left of the feature list below it. */
  .elementor-17915 .elementor-element.elementor-element-903345c,
  .elementor-17915 .elementor-element.elementor-element-5009a7e {
    margin-left: 0;
  }

  /*
   * Every price and feature row carries margin-left:-16px on its inner
   * container, so both cards had their prices and benefit list sitting 16px
   * left of the header lockup, the description and the divider.
   */
  .elementor-17915 .elementor-element.elementor-element-bb2b59e > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-11da16a > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-d9a227f > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-66d1408 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-34acdaa > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-ada7472 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-e258c60 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-81e8a6b > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-f666c7b > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-c406e00 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-09252f8 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-93b26c1 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-4848a14 > .elementor-widget-container,
  .elementor-17915 .elementor-element.elementor-element-6ec0e11 > .elementor-widget-container {
    margin-left: 0;
  }

  /*
   * The "KUALITAS YANG TERBUKTI" and FAQ cards have baked px widths rather than
   * a percentage, so they get an explicit centring expression instead of -8%.
   * align-self:stretch again decouples them from the column's shrink-to-fit.
   */
  .elementor-17915 .elementor-element.elementor-element-eea1cfd {
    align-self: stretch;
    margin-inline: calc((100% - 300px) / 2);
  }

  .elementor-17915 .elementor-element.elementor-element-b263c4c {
    align-self: stretch;
    margin-inline: calc((100% - 316px) / 2);
  }

  /*
   * Stray .border-bottom-gradient rules around "JOIN GROUP DISCORD".
   * e0252ad and ab55a94 are overlapping section wrappers whose 2px gold ::after
   * lines land at y=5250 and y=5314. The button occupies 5236-5284, so at this
   * width the first line crosses it and the second sits just under it. They
   * read as separators at desktop (256px above / 58px below), so this is scoped
   * to the phone band rather than removing the rule outright.
   */
  .elementor-17915 .elementor-element.elementor-element-e0252ad.border-bottom-gradient::after,
  .elementor-17915 .elementor-element.elementor-element-ab55a94.border-bottom-gradient::after {
    display: none;
  }

  /*
   * Same rule on the "KUALITAS YANG TERBUKTI" card. Its box runs 442px past its
   * content (padding-bottom:710px against margin-bottom:-442px), so on phones
   * the bottom line falls at y=11203 -- inside the Premium card, painting a gold
   * rule straight under Rp4.700.000. At desktop it lands on the card's own edge,
   * 2135px clear of the pricing section, so it is only suppressed here.
   */
  .elementor-17915 .elementor-element.elementor-element-eea1cfd.border-bottom-gradient::after {
    display: none;
  }

  /*
   * Checkout button. An inline <style> in body.html sets
   * .v8_checkout_btn{width:90% !important} below 640px, so it rendered 262px in
   * a 291px column -- a 78px gap on the right against 49px on the left. Any
   * width value we set loses to that declaration, so hand the sizing to the
   * flex cross axis instead: width:auto lets align-self:stretch fill the
   * column, matching the feature text above it.
   */
  .elementor-17915 .elementor-element.elementor-element-ac718ea .new-join-btn,
  .elementor-17915 .elementor-element.elementor-element-60b635a .new-join-btn {
    width: auto !important;
    align-self: stretch;
  }

  /* Touch targets: every CTA measured 14-39px tall. 44px is the floor. */
  .elementor-17915 .elementor-button.elementor-size-sm {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 48px;
  }

  .elementor-17915 .elementor-element.elementor-element-36e2660 .elementor-button,
  .elementor-17915 .elementor-element.elementor-element-2bab435 .elementor-button {
    min-height: 44px;
    font-size: 14px;
  }

  /* "LIHAT OUTLOOK" is a padding-less text link: 154x14 before this. */
  .elementor-17915 .elementor-element.elementor-element-700d24a .elementor-button {
    min-height: 44px;
    padding-inline: 4px;
  }

  /* CTA labels shipped at 12-13px; lift to a legible floor. */
  .elementor-17915 .elementor-element.elementor-element-4495e41 .elementor-button,
  .elementor-17915 .elementor-element.elementor-element-298fb9a .elementor-button,
  .elementor-17915 .elementor-element.elementor-element-700d24a .elementor-button {
    font-size: 15px;
  }

}
