/* ============================================================
   ARTICLE COMPONENTS — digitalic.id
   Table of Contents · Ringkasan · FAQ · Content Tables
   ============================================================ */

/* ============================================================
   ARTICLE LAYOUT — 3-column desktop / single-column mobile
   ============================================================ */

/*
 * Grid geometry tokens — single source of truth used by BOTH
 * .brxe-layrow (the 3-col grid) and .brxe-zihuzy (header block
 * that must visually align with the centre reading column).
 *
 * layrow  = 3-column grid  (ALWAYS 3 cols at ≥ 1100px)
 * sidel   = left  sidebar (ToC, sticky)       — --dc-col-l
 * centcol = centre column (featured img + TLDR + content) — 1fr
 * sider   = right sidebar (Services, sticky)  — --dc-col-r
 *
 * Container capped at 1400px so centre column doesn't blow out
 * on ultra-wide screens. Centre ≈ 1400−32×2−250−270−48 = 768px.
 */
:root {
  --dc-col-l: 250px;   /* left sidebar width  (was 200px) */
  --dc-col-r: 270px;   /* right sidebar width (was 220px) */
  --dc-gap:    24px;   /* column gap          */
}

.brxe-layrow {
  display:               grid;
  grid-template-columns: var(--dc-col-l) 1fr var(--dc-col-r);
  grid-template-areas:   'left center right';
  gap:                   var(--dc-gap);
  align-items:           start;
  width:                 100%;
}

/* ── Article page container ──────────────────────────────────────────
 * Bricks centres #brxe-wbggkj at 1101px, leaving blank gutters.
 * We widen to 1400px and add 32px breathing room on each side so the
 * 3-col grid fills the viewport on common desktop widths (1366–1920px).
 */
#brxe-wbggkj {
  max-width:      1400px      !important;
  width:          100%        !important;
  margin-inline:  auto        !important;
  padding-inline: 32px        !important;
  box-sizing:     border-box  !important;
}

/* ── Header block (breadcrumbs + title + meta) ──────────────────────
 * zihuzy is a sibling of layrow inside the container. Instead of using
 * margin-inline offsets (which fight Bricks flex behaviour), we give
 * zihuzy the SAME grid structure as layrow. All direct children are
 * placed in column 2 (the centre track), so they auto-align with
 * centcol at every viewport without any magic numbers.
 *
 * Bricks sets the parent (#brxe-wbggkj) to display:flex+column, which
 * means zihuzy is a flex item — using display:grid on zihuzy overrides
 * the flex item's internal layout cleanly.
 */
.brxe-zihuzy {
  display:               grid;
  grid-template-columns: var(--dc-col-l) 1fr var(--dc-col-r);
  gap:                   0 var(--dc-gap);   /* column gap only — rows stack flush */
  box-sizing:            border-box;
  width:                 100%;
  min-width:             0;
}

/* All direct children go into the centre track (column 2) */
.brxe-zihuzy > * {
  grid-column: 2;
  min-width:   0;          /* grid items must be allowed to shrink */
  max-width:   100%;
  box-sizing:  border-box;
}

/* Post-title: belt-and-braces word-wrap so long titles never overflow
 * their 1fr grid track, regardless of Bricks flex/sizing defaults.
 */
.brxe-zihuzy .brxe-post-title {
  display:       block      !important;
  width:         100%       !important;
  max-width:     100%       !important;
  white-space:   normal     !important;
  overflow-wrap: break-word !important;
  word-break:    break-word !important;
  hyphens:       auto       !important;
}

/* Tablet (768-1099px): collapse to 2-col → left track disappears */
@media (max-width: 1099px) {
  .brxe-zihuzy {
    grid-template-columns: 1fr var(--dc-col-r);  /* no left sidebar */
    gap:                   0 20px;
  }
  .brxe-zihuzy > * {
    grid-column: 1;   /* centre track is now column 1 */
  }
}

/* Mobile (<768px): zihuzy reverts to plain block — no grid tracks needed */
/* (full mobile rules consolidated in the main mobile block below)      */

/* Left sidebar ─ ToC */
.brxe-sidel {
  grid-area:  left;
  position:   sticky;
  top:        calc(var(--header-height, 90px) + 16px);
  max-height: calc(100vh - var(--header-height, 90px) - 36px);
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--primary-l-4) transparent;
}

/* Centre column ─ Ringkasan + content + FAQ */
.brxe-centcol {
  grid-area:     center;
  min-width:     0;                /* prevent grid blowout */
  overflow-wrap: break-word;       /* long words/URLs wrap instead of overflowing */
  word-break:    break-word;
}

/* Right sidebar ─ Services (not sticky — only dc-cta-card is sticky) */
.brxe-sider {
  grid-area:  right;
  align-self: stretch;   /* stretch to full article height so sticky child works */
  min-width:  0;
  /* Card appearance */
  background:    #ffffff;
  border:        1px solid var(--border-primary);
  border-radius: var(--radius-l);
  box-shadow:    0 4px 24px hsla(0, 0%, 0%, 0.07);
  padding:       var(--space-xl);
}

/* ── Tablet: hide left sidebar, keep right ── */
@media (max-width: 1099px) {
  .brxe-layrow {
    grid-template-columns: 1fr 200px;
    grid-template-areas:   'center right';
    gap:                   20px;
  }
  .brxe-sidel {
    display: none;
  }
  .brxe-centcol,
  .brxe-sider {
    min-width:  0;
    max-width:  100%;
    box-sizing: border-box;
  }
  /* zihuzy alignment handled by the grid approach above — no margin-inline needed */
}

/* ══════════════════════════════════════════════════════════════════
   MOBILE  (<768px) — complete single-column layout
   Strategy: ditch grid for everything, use display:block / flex-column.
   Grid track widths are the root cause of width mismatches — block
   elements naturally fill 100% of their parent with zero ambiguity.
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 767px) {

  /* 1 ── Container: 12px padding (CWV-safe minimum) + gap between sections */
  #brxe-wbggkj {
    padding-inline: 12px !important;
    gap:            24px;            /* breathing room: zihuzy → layrow → author */
  }

  /* 2 ── Header block (zihuzy): plain block, no grid tracks */
  .brxe-zihuzy {
    display:    block       !important;
    width:      100%        !important;
    max-width:  100%        !important;
    box-sizing: border-box  !important;
  }
  /* Every direct child of zihuzy fills the full width */
  .brxe-zihuzy > * {
    display:    block       !important;
    width:      100%        !important;
    max-width:  100%        !important;
    min-width:  0           !important;
    box-sizing: border-box  !important;
  }

  /* 3 ── 3-col grid → flex-column so every child is exactly 100% wide.
   *      order property controls visual stack: ToC → Content → Widget.
   *      align-items:stretch guarantees children fill the full width. */
  .brxe-layrow {
    display:        flex        !important;
    flex-direction: column      !important;
    align-items:    stretch     !important;
    gap:            24px        !important;
  }

  /* 4 ── Each column: full width, unstuck */
  .brxe-sidel,
  .brxe-centcol,
  .brxe-sider {
    width:      100%            !important;
    max-width:  100%            !important;
    min-width:  0               !important;
    box-sizing: border-box      !important;
    position:   static          !important;
    max-height: none            !important;
    overflow-y: visible         !important;
  }

  /* ToC: show on mobile, fully un-stuck */
  .brxe-sidel { display: block !important; }

  /* Belt-and-braces position reset — use both class AND ID selector
     so we win even if Bricks-generated CSS uses #brxe-sidel !important */
  #brxe-sidel,
  .brxe-sidel {
    position:   static  !important;
    top:        auto    !important;
    z-index:    auto    !important;
    max-height: none    !important;
    overflow-y: visible !important;
  }

  /* Visual order: ToC (1) → Content (2) → Widget (3) */
  .brxe-sidel   { order: 1 !important; }
  .brxe-centcol { order: 2 !important; }
  .brxe-sider   { order: 3 !important; }

  /* 5 ── Prevent first child of centcol (featured image) from having
   *       negative margin-top that would cause overlap with ToC above */
  .brxe-centcol > *:first-child {
    margin-block-start: 0 !important;
  }

  /* 5b ── Content components inside centcol: enforce full width */
  .brxe-rngwrp,
  .brxe-post-toc,
  .brxe-faqwrp,
  .brxe-centcol > * {
    max-width:  100%        !important;
    box-sizing: border-box  !important;
  }

  /* 6 ── Flex-row elements: wrap instead of overflow
   *
   *  A) class="flex-row" — catches author block, tag rows, etc.
   *     Exception: meta bar (inside zihuzy) → swipeable instead (see §6b).
   *  B) ID-based Bricks rules (no class="flex-row"):
   *     #brxe-ljrkfz — post-sharing icons list (flex-direction:row)
   *     #brxe-lflvdf — secondary sharing list
   */
  #brxe-wbggkj .flex-row,
  #brxe-ljrkfz,
  #brxe-lflvdf {
    flex-wrap: wrap !important;
  }

  /* 6b ── Meta bar (author · date · reading-time · Bagikan):
   *       swipeable single line — same treatment as breadcrumbs.
   *       Overrides the wrap rule above for this specific flex-row. */
  #brxe-wbggkj .brxe-zihuzy .flex-row {
    flex-wrap:                  nowrap        !important;
    overflow-x:                 auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width:            none;
    -ms-overflow-style:         none;
    -webkit-mask-image:         linear-gradient(to right, black 80%, transparent 100%);
    mask-image:                 linear-gradient(to right, black 80%, transparent 100%);
  }
  #brxe-wbggkj .brxe-zihuzy .flex-row::-webkit-scrollbar { display: none; }

  /* Each group in the meta bar: don't shrink, don't wrap internally */
  .brxe-post-meta,
  .brxe-post-reading-time,
  #brxe-bnejmn {
    flex-shrink: 0;
    white-space: nowrap;
  }

  /* Equal font size for meta items and "Bagikan" label */
  .brxe-post-meta .item,
  .brxe-post-reading-time,
  #brxe-bnejmn .brx-submenu-toggle span {
    font-size: max(13px, 0.82em) !important;
  }

  /* 7 ── Breadcrumbs: swipeable single-line (SEO-safe).
   *
   *  WHY NOT ellipsis: truncation hides text — while Google still
   *  crawls the DOM, visible truncation can feel incomplete.
   *
   *  WHY NOT display:none on items: even if Google indexes hidden
   *  content, it's risky and hurts accessibility.
   *
   *  SOLUTION — horizontal scroll with hidden scrollbar + right fade:
   *  • Guaranteed one line (flex nowrap).
   *  • Full breadcrumb trail stays in DOM, readable, accessible.
   *  • User swipes right to read the rest if needed.
   *  • Fade gradient on the right edge signals "more content →".
   *  • Google Structured Data reads the full unclipped HTML. ✓
   */
  .brxe-breadcrumbs {
    display:                    flex          !important;
    flex-wrap:                  nowrap        !important;
    align-items:                center        !important;
    overflow-x:                 auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width:            none;           /* Firefox */
    -ms-overflow-style:         none;           /* IE / old Edge */
    font-size:                  max(11px, 0.72em) !important;
    line-height:                1.5           !important;
    /* Fade right edge to hint that more items exist */
    -webkit-mask-image:         linear-gradient(to right, black 75%, transparent 100%);
    mask-image:                 linear-gradient(to right, black 75%, transparent 100%);
  }
  .brxe-breadcrumbs::-webkit-scrollbar { display: none; }

  /* Items: don't wrap, don't shrink */
  .brxe-breadcrumbs .item,
  .brxe-breadcrumbs .separator {
    white-space: nowrap;
    flex-shrink: 0;
  }

  /* 8 ── Viewport safety net (single-post pages only).
   *      Clips at viewport edge — does NOT affect the 16px padding
   *      inside the container. Any remaining rogue overflow is hidden,
   *      not clipped from layout. */
  body.single-post {
    overflow-x: hidden;
  }
}


/* ── Featured image inside centcol ─────────────────────────────────
 * #brxe-featim is the <img> itself (Bricks puts the element ID directly
 * on the <img> tag, not a wrapper div). aspect-ratio reserves the correct
 * space before the image bytes arrive, eliminating the CLS layout shift.
 * height:auto ensures no Bricks-generated fixed-height rule wins over
 * the intrinsic sizing.
 */
.brxe-centcol #brxe-featim,
.brxe-centcol .brxe-image:first-child {
  display:          block;
  width:            100%;
  height:           auto;
  aspect-ratio:     16 / 9;
  object-fit:       cover;
  margin-block-end: var(--space-xl);
}

/* Images nested inside a Bricks wrapper div (other post types) */
.brxe-centcol .brxe-image:first-child img {
  width:      100%;
  height:     100%;
  display:    block;
  object-fit: cover;
}

/* ── ToC in sidebar: fix spacing relative to the featured image ──
 *
 * The base .brxe-post-toc rule has margin-block: var(--space-2xl) = 34px.
 * When the ToC lives in the sticky left sidebar that sits inside the grid,
 * that top margin creates an oversized gap below the featured image.
 * Reset it here so the card starts flush with the top of the grid row.
 */
.brxe-sidel .brxe-post-toc {
  margin-block-start: 0;
}

/* ── Services widget sidebar ── */

.brxe-sidrtit {
  font-size:      max(14px, 0.9em) !important;
  font-weight:    700 !important;
  letter-spacing: 0.07em !important;
  text-transform: uppercase !important;
  color:          var(--primary) !important;
  margin-block:   0 16px !important;
  line-height:    1.2 !important;
  padding-bottom: 10px;
  border-bottom:  2px solid var(--primary-l-4);
  position:       relative;
}

.brxe-sidrtit::after {
  content:             '';
  position:            absolute;
  inset-block-end:     -2px;
  inset-inline-start:  0;
  width:               32px;
  height:              2px;
  background:          var(--primary);
  border-radius:       2px;
}

/* Service list */
.dc-svc-list {
  list-style:    none;
  margin:        0;
  padding:       0;
  display:       flex;
  flex-direction: column;
  gap:           4px;
}

.dc-svc-list__link {
  display:         flex;
  align-items:     center;
  justify-content: space-between;
  gap:             10px;
  padding:         10px 14px;
  border-radius:   8px;
  font-size:       max(13px, 0.83em);
  font-weight:     500;
  color:           var(--text-body);
  text-decoration: none;
  border:          1px solid transparent;
  transition:      color 180ms ease, background 180ms ease, border-color 180ms ease;
  line-height:     1.35;
  overflow-wrap:   break-word;
  word-break:      break-word;
}

.dc-svc-list__link:hover {
  color:            var(--primary);
  background:       var(--primary-l-4);
  border-color:     hsla(239, 65%, 59%, 0.2);
}

.dc-svc-list__link svg {
  flex-shrink:  0;
  opacity:      0;
  transform:    translateX(-4px);
  transition:   opacity 180ms ease, transform 180ms ease;
  color:        var(--primary);
}

.dc-svc-list__link:hover svg {
  opacity:   1;
  transform: translateX(0);
}

/* ── Design tokens ── */
:root {
  --primary:         #525FDF;
  --primary-l-4:     #e0ddfa;
  --primary-d-1:     #444cae;
  --secondary:       #b6def7;
  --secondary-l-4:   #f1f8fd;
  --tertiary:        #157BD4;
  --text-body:       hsla(0, 0%, 25%, 1);
  --text-title:      #303030;
  --link:            #9795B5;
  --border-primary:  hsla(0, 0%, 50%, 0.15);
  --bg-surface:      #F8F8F8;
  --bg-body:         #FCFCFC;
  --shadow-primary:  hsla(0, 0%, 0%, 0.15);
  --font-primary:    'Satoshi', sans-serif;

  /* Space scale (62.5% base → 1rem = 10px) */
  --space-xs:  1.2rem;   /* 12px */
  --space-s:   1.4rem;   /* 14px */
  --space-m:   1.8rem;   /* 18px */
  --space-l:   2.2rem;   /* 22px */
  --space-xl:  2.8rem;   /* 28px */
  --space-2xl: 3.4rem;   /* 34px */

  /* Component-local tokens */
  --toc-accent-w:    3px;
  --toc-indent:      1.6rem;
  --radius-s:        6px;
  --radius-m:        10px;
  --radius-l:        14px;
  --transition-base: 180ms ease;
}


/* ============================================================
   RESPONSIVE SAFETY — images · media · pre/code · word-wrap
   ============================================================ */

/* Images are always capped at column width */
.brxe-post-content img,
.brxe-rngwrp img,
.brxe-faqitm img {
  max-width: 100%;
  height:    auto;
  display:   block;
}

/* Embedded media (iframes, videos, embeds) stay in-column */
.brxe-post-content iframe,
.brxe-post-content video,
.brxe-post-content embed,
.brxe-post-content object {
  max-width: 100%;
}

/* Code blocks: scroll horizontally, never break layout */
.brxe-post-content pre {
  overflow-x:               auto;
  -webkit-overflow-scrolling: touch;
  max-width:                100%;
  white-space:              pre;
}

/* Inline code: break long tokens (hashes, paths, etc.) */
.brxe-post-content code:not(pre code) {
  word-break: break-all;
}

/* Long URLs and words in content areas wrap inside the column */
.brxe-post-content {
  overflow-wrap: break-word;
  word-break:    break-word;
}


/* ============================================================
   1. TABLE OF CONTENTS
   ============================================================ */

.brxe-post-toc {
  font-family:      var(--font-primary);
  background:       var(--bg-surface);
  border:           1px solid var(--border-primary);
  border-left:      var(--toc-accent-w) solid var(--primary);
  border-radius:    var(--radius-m);
  padding:          var(--space-l) var(--space-xl);
  margin-block:     var(--space-2xl);
  box-shadow:       0 2px 12px var(--shadow-primary);
  position:         relative;
  overflow:         hidden;
}

/* Generated label — rendered BEFORE the list so it appears at top */
.brxe-post-toc::before {
  content:        'Konten Ini Membahas:';
  display:        block;
  font-size:      max(11px, 0.7em);
  font-weight:    700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color:          var(--primary);
  margin-bottom:  var(--space-m);
}

/* Subtle gradient wash in top-right corner (absolutely positioned — no flow impact) */
.brxe-post-toc::after {
  content:           '';
  position:          absolute;
  inset-block-start: 0;
  inset-inline-end:  0;
  width:             160px;
  height:            160px;
  background:        radial-gradient(circle at top right, var(--primary-l-4) 0%, transparent 70%);
  pointer-events:    none;
}

/* Reset browser list defaults */
.brxe-post-toc .toc-list {
  list-style:    none;
  margin:        0;
  padding:       0;
}

/* Nested list — indented, visually separated */
.brxe-post-toc .toc-list .toc-list {
  padding-inline-start: var(--toc-indent);
  margin-block-start:   0.4rem;
  border-inline-start:  1px solid var(--border-primary);
  margin-inline-start:  0.4rem;
}

.brxe-post-toc .toc-list-item {
  margin:        0;
  padding:       0;
  line-height:   1;
}

.brxe-post-toc .toc-list-item + .toc-list-item {
  margin-block-start: 0.2rem;
}

/* Nested item spacing */
.brxe-post-toc .toc-list .toc-list .toc-list-item + .toc-list-item {
  margin-block-start: 0.1rem;
}

.brxe-post-toc .toc-link {
  display:           block;
  padding:           0.55rem var(--space-s) 0.55rem var(--space-xs);
  border-radius:     var(--radius-s);
  font-size:         max(14px, 0.88em);
  font-weight:       500;
  color:             var(--text-body);
  text-decoration:   none;
  line-height:       1.4;
  position:          relative;
  transition:        color var(--transition-base),
                     background var(--transition-base),
                     padding-inline-start var(--transition-base);
  word-break:        break-word;
}

.brxe-post-toc .toc-link:hover,
.brxe-post-toc .toc-link:focus-visible {
  color:                  var(--primary);
  background:             var(--primary-l-4);
  padding-inline-start:   var(--space-m);
  outline:                none;
  box-shadow:             inset 3px 0 0 var(--primary);
}

/* Nested link — slightly smaller, muted */
.brxe-post-toc .toc-list .toc-list .toc-link {
  font-size:   max(13px, 0.83em);
  font-weight: 400;
  color:       var(--text-body);
  opacity:     0.85;
  padding-block: 0.4rem;
}

.brxe-post-toc .toc-list .toc-list .toc-link:hover,
.brxe-post-toc .toc-list .toc-list .toc-link:focus-visible {
  opacity: 1;
  color:   var(--primary);
}

/* tocbot active state */
.brxe-post-toc .is-active-link {
  color:      var(--primary) !important;
  font-weight: 600 !important;
  background:  var(--primary-l-4);
  box-shadow:  inset 3px 0 0 var(--primary);
}

@media (max-width: 640px) {
  /* ToC: tighter horizontal padding on mobile (container already has 12px) */
  .brxe-post-toc {
    padding:       var(--space-s) var(--space-m);   /* 14px 18px (was 18px 22px) */
    margin-block:  var(--space-l);
  }

  .brxe-post-toc .toc-list .toc-list {
    padding-inline-start: 1.2rem;
  }
}


/* ============================================================
   2. RINGKASAN / TL;DR BOX
   ============================================================
   Layout model: wrapper padding:0, overflow:hidden — lets the
   .brxe-rngtit header strip span the full card width and have its
   own gradient background, while .brxe-rngcon carries the reading
   padding below. border-radius on wrapper + overflow:hidden clips
   the header strip corners cleanly.
   ============================================================ */

.brxe-rngwrp {
  font-family:   var(--font-primary);
  position:      relative;
  background:    #ffffff;
  border:        1px solid hsla(205, 75%, 42%, 0.2);
  border-radius: var(--radius-l);
  padding:       0;                /* children carry their own padding */
  margin-block:  var(--space-2xl);
  box-shadow:    0 4px 24px hsla(205, 82%, 42%, 0.1),
                 0 1px 4px  hsla(205, 82%, 42%, 0.05);
  overflow:      hidden;           /* clips header strip to border-radius */
}

/* Old decorative circle removed — header strip replaces it */
.brxe-rngwrp::after { display: none; }

/* ── Header strip: full-width gradient bar ─────────────────────────
 * Sits flush at the top of the card; wrapper overflow:hidden rounds
 * the top corners without needing border-radius on the strip itself.
 */
.brxe-rngtit {
  font-family:    var(--font-primary) !important;
  font-size:      max(11px, 0.72em) !important;
  font-weight:    700 !important;
  letter-spacing: 0.1em !important;
  text-transform: uppercase !important;
  color:          #ffffff !important;
  background:     linear-gradient(90deg, #0e65b8 0%, var(--tertiary) 100%);
  margin:         0 !important;
  padding:        13px var(--space-xl) !important;
  line-height:    1.3 !important;
  display:        flex !important;
  align-items:    center !important;
  gap:            8px !important;
}

/* ✓ check icon in a semi-transparent rounded square */
.brxe-rngtit::before {
  content:         '✓';
  display:         inline-flex;
  align-items:     center;
  justify-content: center;
  width:           18px;
  height:          18px;
  min-width:       18px;
  background:      rgba(255, 255, 255, 0.22);
  border-radius:   4px;
  font-size:       11px;
  font-weight:     900;
  line-height:     1;
  flex-shrink:     0;
}

/* ── Content area ──────────────────────────────────────────────────── */
.brxe-rngcon {
  color:       var(--text-body);
  font-size:   max(15px, 0.94em) !important;
  line-height: 1.75 !important;
  padding:     var(--space-xl) var(--space-2xl);
}

.brxe-rngcon p {
  font-size:    inherit !important;
  line-height:  inherit !important;
  max-width:    none;
  margin-block: 0;
}

.brxe-rngcon p + p {
  margin-block-start: var(--space-m);
}

.brxe-rngcon ul,
.brxe-rngcon ol {
  padding-inline-start: var(--space-xl);
  margin-block:         var(--space-s) 0;
}

.brxe-rngcon li {
  font-size:          inherit !important;
  line-height:        1.65 !important;
  max-width:          none;
  margin-block-start: 0.4rem;
}

.brxe-rngcon li::marker { color: var(--tertiary); }

.brxe-rngcon strong,
.brxe-rngcon b {
  font-weight: 600;
  color:       var(--text-title);
}

.brxe-rngcon a {
  color:                 var(--tertiary);
  text-decoration:       underline;
  text-underline-offset: 3px;
  transition:            color var(--transition-base),
                         text-decoration-color var(--transition-base);
}
.brxe-rngcon a:hover {
  color:                 var(--primary-d-1);
  text-decoration-color: transparent;
}

@media (max-width: 640px) {
  .brxe-rngwrp  { margin-block: var(--space-l); }
  .brxe-rngtit  { padding: 11px var(--space-m) !important; }
  .brxe-rngcon  { padding: var(--space-m) var(--space-l); }
}


/* ============================================================
   3. FAQ SECTION
   ============================================================
   Design decisions:
   · Left border always visible (not just on hover) — structure cue
   · Q badge: rounded square, purple (#525FDF) — question identifier
   · A badge: rounded square, teal (#157BD4)    — answer identifier
   · Dashed separator between Q and A           — clear Q→A split
   · Hover: lift (translateY -2px) + stronger shadow — interactivity
   · FAQ heading: "?" circle badge for instant section recognition
   ============================================================ */

.brxe-faqwrp {
  font-family:  var(--font-primary);
  margin-block: var(--space-2xl);
}

/* ── FAQ section heading ────────────────────────────────────────── */
.brxe-faqtit {
  font-family:    var(--font-primary) !important;
  font-size:      clamp(20px, 2.5vw + 12px, 30px) !important;
  font-weight:    700 !important;
  color:          var(--text-title) !important;
  line-height:    1.2 !important;
  margin-block:   0 var(--space-xl) !important;
  padding-bottom: var(--space-m);
  border-bottom:  2px solid var(--primary-l-4);
  position:       relative;
  display:        flex !important;
  align-items:    center !important;
  gap:            12px !important;
}

/* "?" badge before FAQ heading */
.brxe-faqtit::before {
  content:         '?';
  display:         inline-flex;
  align-items:     center;
  justify-content: center;
  width:           32px;
  height:          32px;
  min-width:       32px;
  border-radius:   50%;
  background:      var(--primary);
  color:           #ffffff;
  font-size:       max(15px, 0.95em);
  font-weight:     900;
  letter-spacing:  0;
  line-height:     1;
  flex-shrink:     0;
}

/* Purple underline accent */
.brxe-faqtit::after {
  content:            '';
  position:           absolute;
  inset-block-end:    -2px;
  inset-inline-start: 0;
  width:              48px;
  height:             2px;
  background:         var(--primary);
  border-radius:      2px;
}

/* ── FAQ item card ──────────────────────────────────────────────── */
.brxe-faqitm {
  background:    #ffffff;
  border:        1px solid var(--border-primary);
  border-left:   3px solid var(--primary);   /* always visible — no hover reveal */
  border-radius: var(--radius-m);
  padding:       var(--space-l) var(--space-xl);
  margin-block:  0 var(--space-m);
  box-shadow:    0 1px 6px hsla(0, 0%, 0%, 0.04);
  transition:    border-color var(--transition-base),
                 box-shadow   var(--transition-base),
                 transform    var(--transition-base);
  position:      relative;
}

/* Old hover-reveal bar removed — left border is baked in */
.brxe-faqitm::before { display: none; }

.brxe-faqitm:hover {
  border-color:      hsla(239, 65%, 59%, 0.3);
  border-left-color: var(--primary);
  box-shadow:        0 8px 28px hsla(239, 65%, 59%, 0.12);
  transform:         translateY(-2px);
}

/* ── Question: Q badge (rounded square, top-aligned) ─────────────
 * Top-aligned (not vertically centred) so multi-line questions
 * don't put the badge in the middle of a tall block.
 */
.brxe-faqq01 {
  font-family:          var(--font-primary) !important;
  font-size:            max(16px, 1em) !important;
  font-weight:          600 !important;
  color:                var(--text-title) !important;
  line-height:          1.4 !important;
  margin-block:         0 !important;   /* A's margin-top provides Q→A gap */
  padding-inline-start: calc(2.4rem + 10px);
  position:             relative;
}

.brxe-faqq01::before {
  content:             'Q';
  position:            absolute;
  inset-inline-start:  0;
  inset-block-start:   0;             /* top-aligned */
  width:               2.4rem;
  height:              2.4rem;
  border-radius:       6px;           /* rounded square, not circle */
  background:          var(--primary);
  color:               #ffffff;
  font-size:           max(11px, 0.7em);
  font-weight:         700;
  letter-spacing:      0;
  display:             flex;
  align-items:         center;
  justify-content:     center;
  line-height:         1;
  flex-shrink:         0;
}

/* ── Answer: A badge (teal — visually distinct from Q's purple) ───
 * Dashed border-top = explicit Q→A divider.
 * Teal badge colour vs purple Q badge = role differentiation.
 */
.brxe-faqa01 {
  color:                var(--text-body);
  font-size:            max(15px, 0.94em) !important;
  line-height:          1.75 !important;
  padding-inline-start: calc(2.4rem + 10px);
  padding-block-start:  var(--space-m);
  margin-block-start:   var(--space-m);
  border-top:           1px dashed var(--border-primary);
  position:             relative;
}

.brxe-faqa01::before {
  content:             'A';
  position:            absolute;
  inset-inline-start:  0;
  inset-block-start:   var(--space-m);  /* offset = padding-block-start */
  width:               2.4rem;
  height:              2.4rem;
  border-radius:       6px;
  background:          var(--tertiary); /* teal — distinct from Q purple */
  color:               #ffffff;
  font-size:           max(11px, 0.7em);
  font-weight:         700;
  letter-spacing:      0;
  display:             flex;
  align-items:         center;
  justify-content:     center;
  line-height:         1;
  flex-shrink:         0;
}

.brxe-faqa01 p {
  font-size:    inherit !important;
  line-height:  inherit !important;
  max-width:    none;
  margin-block: 0;
}

.brxe-faqa01 p + p {
  margin-block-start: var(--space-s);
}

.brxe-faqa01 ul,
.brxe-faqa01 ol {
  padding-inline-start: var(--space-xl);
  margin-block:         var(--space-s) 0;
}

.brxe-faqa01 li {
  font-size:          inherit !important;
  line-height:        1.65 !important;
  max-width:          none;
  margin-block-start: 0.35rem;
}

.brxe-faqa01 li::marker { color: var(--tertiary); }

.brxe-faqa01 strong,
.brxe-faqa01 b {
  font-weight: 600;
  color:       var(--text-title);
}

.brxe-faqa01 a {
  color:                 var(--tertiary);
  text-decoration:       underline;
  text-underline-offset: 3px;
  transition:            color var(--transition-base);
}
.brxe-faqa01 a:hover { color: var(--primary-d-1); }

@media (max-width: 640px) {
  .brxe-faqitm {
    padding: var(--space-m) var(--space-l);
  }
  .brxe-faqq01 { padding-inline-start: calc(2.2rem + 8px); }
  .brxe-faqq01::before { width: 2.2rem; height: 2.2rem; }
  .brxe-faqa01 { padding-inline-start: calc(2.2rem + 8px); }
  .brxe-faqa01::before { width: 2.2rem; height: 2.2rem; }
}


/* ============================================================
   4. CONTENT TABLES
   ============================================================ */

/* Responsive scroll wrapper — generated via CSS, no JS */
.brxe-post-content table {
  display:        block; /* triggers overflow on the element itself */
}

/* Outer overflow wrapper using :has() — progressively enhanced */
/* Fallback: table itself scrolls on narrow viewports */
.brxe-post-content .wp-block-table,
.brxe-post-content figure.wp-block-table {
  overflow-x:    auto;
  -webkit-overflow-scrolling: touch;
  border-radius: var(--radius-m);
  box-shadow:    0 2px 12px var(--shadow-primary);
  margin-block:  var(--space-xl);
}

.brxe-post-content table {
  display:         table; /* re-set after outer wrapper takes over */
  width:           100%;
  min-width:       480px;    /* triggers horizontal scroll when viewport < minWidth */
  border-collapse: separate;
  border-spacing:  0;
  font-family:     var(--font-primary);
  font-size:       max(14px, 0.875em) !important;
  line-height:     1.55 !important;
  background:      #ffffff;
  border:          1px solid var(--border-primary);
  border-radius:   var(--radius-m);
  overflow:        hidden; /* clips border-radius on child cells */
}

/* -- thead -------------------------------------------------- */
.brxe-post-content table thead {
  background:  linear-gradient(135deg, var(--primary) 0%, var(--primary-d-1) 100%);
  color:       #ffffff;
}

.brxe-post-content table thead th {
  padding:         var(--space-m) var(--space-l);
  font-size:       max(13px, 0.82em) !important;
  font-weight:     700 !important;
  letter-spacing:  0.04em;
  text-transform:  uppercase;
  color:           #ffffff !important;
  text-align:      left;
  white-space:     nowrap;
  border-bottom:   2px solid var(--primary-d-1);
  line-height:     1.3 !important;
}

.brxe-post-content table thead th:not(:last-child) {
  border-right: 1px solid hsla(0, 0%, 100%, 0.15);
}

/* -- tbody -------------------------------------------------- */
.brxe-post-content table tbody tr {
  transition: background var(--transition-base);
}

/* Alternating rows */
.brxe-post-content table tbody tr:nth-child(odd) {
  background: var(--bg-body);
}

.brxe-post-content table tbody tr:nth-child(even) {
  background: var(--secondary-l-4);
}

.brxe-post-content table tbody tr:hover {
  background: var(--primary-l-4);
}

.brxe-post-content table tbody td {
  padding:       var(--space-m) var(--space-l);
  color:         var(--text-body) !important;
  font-size:     max(14px, 0.875em) !important;
  line-height:   1.6 !important;
  vertical-align: top;
  border-bottom: 1px solid var(--border-primary);
}

.brxe-post-content table tbody tr:last-child td {
  border-bottom: none;
}

.brxe-post-content table tbody td:not(:last-child) {
  border-right: 1px solid var(--border-primary);
}

/* First column — slightly more weight */
.brxe-post-content table tbody td:first-child {
  font-weight: 500;
  color:       var(--text-title) !important;
}

/* -- tfoot -------------------------------------------------- */
.brxe-post-content table tfoot {
  background: var(--bg-surface);
}

.brxe-post-content table tfoot td,
.brxe-post-content table tfoot th {
  padding:     var(--space-m) var(--space-l);
  font-size:   max(13px, 0.82em) !important;
  font-weight: 600;
  color:       var(--text-body) !important;
  border-top:  2px solid var(--border-primary);
}

/* -- caption ----------------------------------------------- */
.brxe-post-content table caption {
  caption-side:  bottom;
  font-size:     max(12px, 0.78em) !important;
  color:         hsla(0, 0%, 35%, 0.8);
  padding-block: var(--space-s);
  text-align:    left;
  font-style:    italic;
  line-height:   1.5 !important;
}

/* -- Links inside tables ----------------------------------- */
.brxe-post-content table a {
  color:                var(--tertiary);
  text-decoration:      underline;
  text-underline-offset: 2px;
  transition:           color var(--transition-base);
}

.brxe-post-content table a:hover {
  color: var(--primary-d-1);
}

/* -- Standalone table (no figure wrapper) ------------------
   display:block makes this the scroll container.
   min-width:0 overrides the 480px from the base rule so the
   BLOCK itself never overflows the parent column — internal
   table cells determine their own minimum widths and scroll
   horizontally within this box.                             */
.brxe-post-content > table {
  overflow-x:               auto;
  -webkit-overflow-scrolling: touch;
  display:                  block;
  min-width:                0;         /* reset — internal table decides its own min */
  max-width:                100%;      /* block never wider than parent column       */
  margin-block:             var(--space-xl);
  border-radius:            var(--radius-m);
  box-shadow:               0 2px 12px var(--shadow-primary);
}

/* -- Responsive: full-width cells on very small screens ---- */
@media (max-width: 480px) {
  .brxe-post-content table thead th,
  .brxe-post-content table tbody td,
  .brxe-post-content table tfoot td,
  .brxe-post-content table tfoot th {
    padding: var(--space-s) var(--space-m);
  }
}

/* -- Print ------------------------------------------------- */
@media print {
  .brxe-post-toc {
    display: none;
  }

  .brxe-rngwrp,
  .brxe-faqwrp {
    box-shadow:  none;
    border-left: 3px solid #525FDF;
    background:  transparent;
  }

  .brxe-rngwrp::after,
  .brxe-post-toc::before {
    display: none;
  }

  .brxe-post-content table {
    display:         table;
    min-width:       0;
    overflow:        visible;
    border:          1px solid #ccc;
    box-shadow:      none;
    page-break-inside: avoid;
  }

  .brxe-post-content table thead {
    background:   #525FDF !important;
    print-color-adjust: exact;
    -webkit-print-color-adjust: exact;
  }

  .brxe-post-content table tbody tr:nth-child(even) {
    background:   #f1f8fd !important;
    print-color-adjust: exact;
    -webkit-print-color-adjust: exact;
  }

  .brxe-post-content table tbody tr:hover {
    background: transparent;
  }

  .brxe-post-content .wp-block-table,
  .brxe-post-content figure.wp-block-table,
  .brxe-post-content > table {
    overflow:  visible;
    display:   block;
    box-shadow: none;
  }

  .brxe-faqitm {
    box-shadow:    none;
    border-left:   3px solid #525FDF;
    border-radius: 0;
    page-break-inside: avoid;
  }
}


/* ════════════════════════════════════════════════════════════════════
   5. CONTENT TYPOGRAPHY ENHANCEMENTS  (ryze.ai-inspired style)
   ════════════════════════════════════════════════════════════════════ */

/* ── H1/H2/H3: always left-aligned on single post ─────────────────── */
body.single-post .brxe-post-title,
body.single-post .brxe-post-content h1,
body.single-post .brxe-post-content h2,
body.single-post .brxe-post-content h3,
body.single-post .brxe-post-content h4 {
  text-align: left !important;
}

/* ── H2: section heading — bold full-colour bar, flush left ────────── */
.brxe-post-content h2 {
  border-inline-start: 4px solid var(--primary);
  padding-inline-start: 14px;
  margin-inline-start:  0;                  /* flush to column edge */
  margin-block:         var(--space-2xl) var(--space-l);
  line-height:          1.3;
}

/* ── H3: sub-section — thinner bar, indented, softer colour ────────── *
 *  Visual cues that H3 is subordinate to H2:
 *  1. margin-inline-start: 20px   → indented right
 *  2. border-width: 2px           → half as thick as H2
 *  3. border-color at 50% opacity → visually softer
 *  Together these three cues make the hierarchy unmistakable.         */
.brxe-post-content h3 {
  border-inline-start: 2px solid hsla(239, 65%, 59%, 0.5);
  padding-inline-start: 12px;
  margin-inline-start:  20px;               /* ← indent: child of H2 */
  margin-block:         var(--space-xl) var(--space-m);
  line-height:          1.35;
}

/* ── Hyperlinks: underline blue (SEO-friendly, readable) ──────────── */
.brxe-post-content a {
  color:                   var(--primary);
  text-decoration:         underline;
  text-decoration-color:   hsla(239, 65%, 59%, 0.35);
  text-underline-offset:   3px;
  transition:              color var(--transition-base),
                           text-decoration-color var(--transition-base);
}
.brxe-post-content a:hover {
  color:                   var(--primary-d-1);
  text-decoration-color:   var(--primary-d-1);
}

/* ── Blockquote: styled card ───────────────────────────────────────── */
.brxe-post-content blockquote {
  margin-inline:   0;
  padding:         var(--space-m) var(--space-xl) var(--space-m) var(--space-l);
  background:      var(--bg-surface);
  border-inline-start: 4px solid var(--primary);
  border-radius:   0 var(--radius-m) var(--radius-m) 0;
  font-style:      italic;
  color:           var(--text-body);
  margin-block:    var(--space-xl);
  position:        relative;
}
.brxe-post-content blockquote p {
  margin: 0;
  font-size: max(15px, 0.94em) !important;
  line-height: 1.7 !important;
}
.brxe-post-content blockquote cite,
.brxe-post-content blockquote footer {
  display:    block;
  margin-top: var(--space-s);
  font-size:  max(12px, 0.78em);
  font-style: normal;
  color:      var(--primary);
  font-weight: 600;
}

/* ── Mobile: justify post content paragraphs ──────────────────────── */
@media (max-width: 767px) {
  .brxe-post-content p {
    text-align: justify;
    hyphens:    auto;
    -webkit-hyphens: auto;
  }
}

/* ── brxe-tdpdof (sidebar promo block): reduce oversized text ─────── */
.brxe-tdpdof {
  padding-block:  var(--space-m) !important;  /* override padding-vertical-xl */
  padding-inline: var(--space-l) !important;  /* keep horizontal-l */
}
.brxe-tdpdof .brxe-heading,
.brxe-tdpdof .brxe-heading.text-l {
  font-size:   max(15px, 0.93em) !important;
  line-height: 1.35 !important;
}
.brxe-tdpdof p,
.brxe-tdpdof .brxe-text-basic {
  font-size: max(13px, 0.83em) !important;
  line-height: 1.6 !important;
}

/* ── Hide: old bottom Bagikan dropdown, old taxonomy labels ───────── */
/* Point 16 – bottom Bagikan share (deprecated) */
#brxe-wfoson { display: none !important; }

/* Point 9 – hide category/tag taxonomy rows + their labels */
.brxe-block:has(> .brxe-post-taxonomy) { display: none !important; }

/* Point 12 – old avatar-left author box (replaced by dc-author-card) */
.brxe-post-author.author.avatar-left { display: none !important; }


/* ════════════════════════════════════════════════════════════════════
   6. SUBTITLE  (ACF field injected below post title)
   ════════════════════════════════════════════════════════════════════ */

.dc-post-subtitle {
  font-family:   var(--font-primary);
  font-size:     clamp(15px, 1.6vw + 6px, 19px);
  font-weight:   400;
  color:         hsla(0, 0%, 25%, 0.75);
  line-height:   1.65;
  margin-block:  0 var(--space-m);
  max-width:     100%;
}


/* ════════════════════════════════════════════════════════════════════
   7. AUTHOR CARD  (.dc-author-card — injected at end of .brxe-centcol)
   ════════════════════════════════════════════════════════════════════
   Design: two-column grid — left = avatar + label + name (centred),
   1px vertical divider, right = large quotation mark + bio text.
   Full-width of post content column, no extra max-width.
   ════════════════════════════════════════════════════════════════════ */

.dc-author-card {
  display:       grid;
  grid-template-columns: 160px 1fr;
  width:         100%;
  box-sizing:    border-box;
  background:    #ffffff;
  border:        1px solid var(--border-primary);
  border-radius: var(--radius-l);
  margin-block:  var(--space-2xl);
  margin-inline: 0;
  box-shadow:    0 2px 16px hsla(0, 0%, 0%, 0.06);
  overflow:      hidden;
}

/* ── Left column: avatar · label · name ──────────────────────────── */
.dc-author-left {
  display:         flex;
  flex-direction:  column;
  align-items:     center;
  justify-content: center;
  text-align:      center;
  gap:             4px;
  padding:         var(--space-xl) var(--space-l);
  border-right:    1px solid var(--border-primary);
}

.dc-author-avatar {
  width:         80px;
  height:        80px;
  border-radius: 50%;
  object-fit:    cover;
  border:        none !important;
  box-shadow:    none !important;
  filter:        none !important;
  margin-bottom: 10px;
  flex-shrink:   0;
}

.dc-author-label {
  font-size:      max(10px, 0.65em);
  font-weight:    700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color:          var(--text-muted);
  line-height:    1;
}

.dc-author-name {
  font-size:       max(15px, 0.95em);
  font-weight:     700;
  color:           var(--text-title);
  text-decoration: none;
  line-height:     1.3;
  margin-block:    2px 0;
  transition:      color var(--transition-base);
}
.dc-author-name:hover { color: var(--primary); }

/* ── Right column: quote mark · bio ──────────────────────────────── */
.dc-author-right {
  display:         flex;
  flex-direction:  column;
  justify-content: center;
  padding:         var(--space-xl) var(--space-2xl);
}

/* Large decorative opening quote — matches reference orange/primary accent */
.dc-author-qmark {
  font-family:  Georgia, 'Times New Roman', serif;
  font-size:    3.8rem;
  color:        var(--primary);
  line-height:  0.75;
  display:      block;
  margin-bottom: 10px;
  user-select:  none;
}

.dc-author-bio {
  font-size:   max(14px, 0.9em);
  color:       var(--text-body);
  line-height: 1.7;
  margin:      0;
}

/* ── Mobile: stack vertically ─────────────────────────────────────── */
@media (max-width: 560px) {
  .dc-author-card {
    grid-template-columns: 1fr;
  }
  .dc-author-left {
    border-right:  none;
    border-bottom: 1px solid var(--border-primary);
    padding:       var(--space-l) var(--space-xl);
  }
  .dc-author-right {
    padding: var(--space-l) var(--space-xl);
  }
}


/* ════════════════════════════════════════════════════════════════════
   8. CTA CARD  (injected below services widget via PHP filter)
   ════════════════════════════════════════════════════════════════════
   Design: clean light card — subtle tinted background, dark headline,
   colored circular checkmarks, platform logo row, solid primary CTA.
   ════════════════════════════════════════════════════════════════════ */

/* ── Heading → shortcode gap in right sidebar ─────────────────────── */
.brxe-sider .brxe-heading + .brxe-shortcode,
.brxe-sider .brxe-sidrtit  + .brxe-shortcode {
  margin-block-start: var(--space-l);
}

/* ── Card wrapper ─────────────────────────────────────────────────── */
.dc-cta-card {
  background:       hsla(239, 65%, 59%, 0.055);
  border-top:       1px solid hsla(239, 65%, 59%, 0.18);
  border-radius:    0 0 var(--radius-l) var(--radius-l);
  padding:          var(--space-xl) var(--space-xl);
  /* bleed to edges of .brxe-sider (neutralise its padding) */
  margin-inline:    calc(-1 * var(--space-xl));
  margin-block-end: calc(-1 * var(--space-xl));
  margin-block-start: var(--space-l);
  position:  sticky;
  top:       calc(var(--header-height, 90px) + 16px);
}

/* ── Label ────────────────────────────────────────────────────────── */
.dc-cta-label {
  display:          inline-flex;
  align-items:      center;
  gap:              5px;
  font-size:        max(10px, 0.65em);
  font-weight:      700;
  letter-spacing:   0.1em;
  text-transform:   uppercase;
  color:            var(--primary);
  margin-block-end: var(--space-s);
}

/* ── Title (span → must be display:block) ─────────────────────────── */
.dc-cta-title {
  display:      block;
  font-size:    clamp(15px, 1.1vw + 8px, 20px);
  font-weight:  800;
  color:        #111130;
  line-height:  1.35;
  margin-block: 0 var(--space-m);
}

/* ── Feature list ─────────────────────────────────────────────────── */
.dc-cta-features {
  list-style: none;
  margin:     0 0 var(--space-m);
  padding:    0;
  display:    flex;
  flex-direction: column;
  gap:        8px;
}

.dc-cta-feature {
  display:     flex;
  align-items: flex-start;
  gap:         8px;
  font-size:   max(12px, 0.78em);
  color:       #2d2d3a;
  line-height: 1.45;
}

/* Circular checkmark badge */
.dc-cta-chk {
  display:         inline-flex;
  align-items:     center;
  justify-content: center;
  width:           18px;
  height:          18px;
  min-width:       18px;
  background:      var(--primary);
  border-radius:   50%;
  flex-shrink:     0;
  margin-top:      2px;
}
.dc-cta-chk svg {
  width:           10px;
  height:          10px;
  stroke:          #ffffff;
  stroke-width:    2.5;
  fill:            none;
  stroke-linecap:  round;
  stroke-linejoin: round;
}

/* ── Platform logos row ───────────────────────────────────────────── */
.dc-cta-logos {
  display:      flex;
  align-items:  center;
  gap:          14px;
  margin-block: var(--space-m) var(--space-l);
  flex-wrap:    wrap;
  opacity:      0.82;
}
.dc-cta-logos svg {
  height:      20px;
  width:       auto;
  flex-shrink: 0;
}

/* ── CTA button: solid primary ────────────────────────────────────── */
.dc-cta-btn {
  display:         flex;
  align-items:     center;
  justify-content: center;
  gap:             7px;
  width:           100%;
  background:      var(--primary);
  color:           #ffffff !important;
  font-size:       max(13px, 0.82em);
  font-weight:     700;
  letter-spacing:  0.01em;
  padding:         12px 16px;
  border-radius:   var(--radius-m);
  text-decoration: none !important;
  box-shadow:      0 2px 12px hsla(239, 65%, 59%, 0.30);
  transition:      background  var(--transition-base),
                   transform   var(--transition-base),
                   box-shadow  var(--transition-base);
}
.dc-cta-btn:hover {
  background:  hsla(239, 65%, 48%, 1);
  transform:   translateY(-1px);
  box-shadow:  0 4px 18px hsla(239, 65%, 59%, 0.40);
}
.dc-cta-btn svg {
  width:           13px;
  height:          13px;
  stroke:          #ffffff;
  flex-shrink:     0;
  transition:      transform var(--transition-base);
  fill:            none;
  stroke-linecap:  round;
  stroke-linejoin: round;
}
.dc-cta-btn:hover svg { transform: translateX(3px); }


/* ════════════════════════════════════════════════════════════════════
   9. LAST-MODIFIED DATE  (injected into post-meta by PHP filter)
   ════════════════════════════════════════════════════════════════════ */

.dc-last-modified {
  font-style: italic;
  opacity:    0.8;
  font-size:  max(12px, 0.78em) !important;
}
.dc-last-modified time { font-style: inherit; }


/* ════════════════════════════════════════════════════════════════════
   10. CTA SECTION HEADING — "Kami Siap Bantu Semua Aktivitas Digitalmu"
       Parent: .brxe-section.radial-gradient
       Bricks default text-32 = 32px fixed → diganti fluid scale
       Desktop max 48px, mobile min 28px
   ════════════════════════════════════════════════════════════════════ */

.radial-gradient .brxe-heading {
  font-size:   clamp(28px, 3.5vw + 16px, 48px) !important;
  line-height: 1.2 !important;
  font-weight: 700 !important;   /* naik dari 600 → lebih impactful untuk CTA */
  letter-spacing: -0.02em;       /* tight letter-spacing = lebih modern & bold */
}


/* ════════════════════════════════════════════════════════════════════
   11. ALL-SERVICE PAGE — Full Card Redesign
       - Nama + info SELALU terlihat di bawah gambar (bukan overlay)
       - Category badge pill selalu tampil
       - Excerpt singkat diinject via JS
       - Hover: lift card + slight image zoom
       - Icon grid atas: label nama via CSS ::after
       - Category group headers diinject via JS
   ════════════════════════════════════════════════════════════════════ */

/* ─── Card: flex column, transisi hover ─────────────────────────── */
.brxe-oncpgq.brxe-block {
  display:        flex        !important;
  flex-direction: column      !important;
  overflow:       hidden      !important;
  transition:     transform 250ms ease, box-shadow 250ms ease !important;
  background:     #ffffff;
  height:         100%;
}

.brxe-oncpgq:hover {
  transform:  translateY(-5px)                        !important;
  box-shadow: 0 12px 36px rgba(82, 95, 223, 0.18)    !important;
}

/* ─── Image: slight zoom on hover (tone down dari 1.2 → 1.06) ───── */
.brxe-oncpgq:hover .brxe-cktyqx {
  transform: scale(1.06) !important;
}

/* ─── Info wrapper: STATIC position, below image ────────────────── */
.brxe-oncpgq .project-info__wrapper.brxe-block {
  position:        static      !important;
  opacity:         1           !important;
  background:      #ffffff     !important;
  width:           100%        !important;
  height:          auto        !important;
  min-height:      unset       !important;
  top:             auto        !important;
  left:            auto        !important;
  padding:         14px 16px   !important;
  display:         flex        !important;
  flex-direction:  column      !important;
  justify-content: flex-start  !important;
  align-items:     flex-start  !important;
  gap:             5px         !important;
  transform:       none        !important;
  flex:            1;
}

/* Hover: tetap sama (override rule Bricks) */
.brxe-oncpgq:hover .project-info__wrapper.brxe-block {
  background:      #ffffff    !important;
  justify-content: flex-start !important;
  padding-bottom:  14px       !important;
}

/* ─── Category badge ─────────────────────────────────────────────── */
.brxe-oncpgq .project-info__wrapper .brxe-aldkqi {
  order:          -1           !important;
  display:        inline-flex  !important;
  align-self:     flex-start   !important;
  background:     #eceeff      !important;
  color:          #525FDF      !important;
  font-size:      11px         !important;
  font-weight:    600          !important;
  line-height:    1            !important;
  padding:        4px 10px     !important;
  border-radius:  50px         !important;
  margin:         0            !important;
  text-transform: capitalize;
}

/* ─── Heading: dark, left-aligned ───────────────────────────────── */
.brxe-oncpgq .project-info__wrapper .brxe-wnljzz {
  color:       var(--text-title, #1a1a2e)      !important;
  text-shadow: none                             !important;
  font-size:   clamp(14px, 1vw + 11px, 17px)  !important;
  font-weight: 700                              !important;
  text-align:  left                             !important;
  line-height: 1.3                              !important;
  margin:      0                                !important;
  padding:     0                                !important;
}

/* ─── Excerpt (diinject via JS) ──────────────────────────────────── */
.service-excerpt {
  font-size:             13px    !important;
  font-weight:           400     !important;
  color:                 #6b7280 !important;
  line-height:           1.55    !important;
  margin:                2px 0 0 !important;
  padding:               0       !important;
  display:               -webkit-box !important;
  -webkit-line-clamp:    2;
  -webkit-box-orient:    vertical;
  overflow:              hidden;
  font-family:           var(--font-primary) !important;
}

/* ─── Divider: hide ──────────────────────────────────────────────── */
.brxe-oncpgq .project-info__wrapper .brxe-qioafb {
  display: none !important;
}

/* ─── "Selengkapnya" link ────────────────────────────────────────── */
.brxe-oncpgq .project-info__wrapper .brxe-ygnguk {
  display:     inline-flex !important;
  margin-top:  auto        !important;   /* push ke bawah */
  padding-top: 8px         !important;
  font-size:   13px        !important;
  font-weight: 600         !important;
  color:       #525FDF     !important;
  opacity:     0.75;
  transition:  opacity 150ms ease, color 150ms ease;
}
.brxe-oncpgq:hover .project-info__wrapper .brxe-ygnguk {
  opacity: 1 !important;
}

/* ─── Category group headers (diinject via JS) ───────────────────── */
.service-group-header {
  grid-column:   1 / -1;
  display:       flex;
  align-items:   center;
  gap:           10px;
  padding:       6px 0 10px;
  margin-top:    var(--space-xl, 28px);
  border-bottom: 2px solid #eceeff;
  font-size:     clamp(16px, 1.5vw + 12px, 21px);
  font-weight:   700;
  color:         var(--text-title, #1a1a2e);
  font-family:   var(--font-primary);
}
.service-group-header:first-of-type { margin-top: 0; }

.service-group-header-count {
  display:       inline-flex;
  align-items:   center;
  background:    #525FDF;
  color:         #fff;
  font-size:     11px;
  font-weight:   600;
  padding:       3px 9px;
  border-radius: 50px;
  line-height:   1;
}

/* ─── Icon grid (atas): label nama service via ::after ───────────── */
/* Hanya berlaku untuk card-menu yang BELUM punya teks (.brxe-text-basic)
   sehingga mega menu (yang sudah punya label teks) tidak kena dobel.     */
.card-menu:not(:has(.brxe-text-basic)).brxe-block {
  flex-direction: column !important;
  align-items:    center !important;
  text-align:     center;
  padding:        var(--space-s) var(--space-xs) !important;
  gap:            6px !important;
}
.card-menu:not(:has(.brxe-text-basic)) .brxe-svg {
  width:       36px !important;
  height:      36px !important;
  flex-shrink: 0;
}
.card-menu:not(:has(.brxe-text-basic))::after {
  content:     attr(aria-label);
  font-size:   clamp(10px, 0.5vw + 9px, 12px);
  font-weight: 600;
  color:       var(--text-title, #333);
  line-height: 1.3;
  max-width:   100%;
  word-break:  break-word;
}
.card-menu:not(:has(.brxe-text-basic)):hover::after { color: #ffffff !important; }

/* ── Forminator: sembunyikan field HTML privacy notice di form contact ── */
.forminator-row:has(#html-3) { display: none !important; }

/* ── Forminator: fix Select2 dropdown — border terlihat "keputus" ────── */
/* Penyebab: margin-right:3px geser box ke kiri + bg abu bocor keluar radius */
#forminator-module-918.forminator-design--flat
  .forminator-select2 + .forminator-select .selection {
    margin-right: 0 !important;
    overflow:     hidden !important;  /* clip bg anak ke rounded corner */
}

#forminator-module-918.forminator-design--flat
  .forminator-select2 + .forminator-select .selection
  .select2-selection--multiple[role="combobox"],
#forminator-module-918.forminator-design--flat
  .forminator-select2 + .forminator-select .selection
  .select2-selection--single[role="combobox"] {
    background-color: #fff !important;  /* samakan dengan input lain */
}
