(function(){ 'use strict'; var cfg = window.ADS_CONFIG || {}; var slots = cfg.slots || {}; /* Ratio → percentage for padding-top intrinsic sizing */ var RATIO_PAD = { '1:1': '100%', /* 1/1 = 1.000 */ '16:9': '56.25%', /* 9/16 = 0.5625 */ '9:16': '177.78%' /* 16/9 = 1.7778 */ }; /* ── GTM ── */ if (cfg.gtm && cfg.gtm.enabled && cfg.gtm.id && cfg.gtm.id.indexOf('XXXXXXX') === -1) { var gtmS = document.createElement('script'); gtmS.innerHTML = "(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','"+cfg.gtm.id+"');"; document.head.appendChild(gtmS); var ns = document.getElementById('gtm-noscript'); if (ns) ns.innerHTML = ''; } /* ── Build inner content node ── */ function buildContent(type, slotCfg) { var wrap = document.createElement('div'); wrap.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;overflow:hidden;'; var placeholder = function(bg, color, msg) { wrap.style.cssText += 'display:flex;align-items:center;justify-content:center;background:'+bg+';'; wrap.innerHTML = ''+msg+''; }; if (type === 'image') { var img = slotCfg.image || {}; var src = (img.src || '').trim(); if (!src) { placeholder('#f0f0ee','#aaa','No image uploaded yet'); return wrap; } var a = document.createElement('a'); a.href = img.href || '#'; a.target = '_blank'; a.rel = 'noopener noreferrer'; a.style.cssText = 'display:block;width:100%;height:100%;'; var image = document.createElement('img'); image.src = src; image.alt = img.alt || 'Advertisement'; image.style.cssText = 'width:100%;height:100%;object-fit:cover;display:block;'; image.onerror = function() { wrap.innerHTML = 'Image not found.
Check the file path in admin.
'; wrap.style.background = '#fff0f0'; wrap.style.display = 'flex'; wrap.style.alignItems = 'center'; wrap.style.justifyContent = 'center'; }; a.appendChild(image); wrap.appendChild(a); } else if (type === 'adsense') { var asCfg = slotCfg.adsense || {}; var code = (asCfg.code || '').trim(); if (!code) { placeholder('#f0f7ff','#555','Paste AdSense code
in the admin panel'); return wrap; } wrap.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;'; var inner = document.createElement('div'); inner.style.cssText = 'width:100%;text-align:center;'; /* Parse and re-create nodes so