(function () {
function init() {
document.querySelectorAll('.bkbg-cnv-app').forEach(function (el) {
if (el.dataset.rendered) return;
el.dataset.rendered = '1';
var opts;
try { opts = JSON.parse(el.dataset.opts || '{}'); } catch (e) { opts = {}; }
var o = Object.assign({
seriesTitle: 'Series',
currentPart: 1,
totalParts: 1,
currentTitle: 'Current Chapter',
prevTitle: '',
prevUrl: '',
nextTitle: '',
nextUrl: '',
chapters: [],
showChapterList: true,
chapterListOpen: false,
showProgress: true,
style: 'card',
openInNewTab: false,
partLabel: 'Part',
bgColor: '#ffffff',
borderColor: '#e2e8f0',
accentColor: '#6366f1',
seriesTitleColor: '#374151',
currentTitleColor: '#111827',
progressBg: '#e2e8f0',
progressFill: '#6366f1',
btnBg: '#f1f5f9',
btnColor: '#374151',
pillBg: '#eef2ff',
pillColor: '#4f46e5',
chapterListBg: '#f8fafc',
activeChapterBg: '#eef2ff',
activeChapterColor: '#4f46e5',
borderRadius: 10,
paddingTop: 0,
paddingBottom: 0
}, opts);
function typoCssVarsForEl(typo, prefix, el) {
if (!typo) return;
if (typo.family) el.style.setProperty(prefix + 'font-family', "'" + typo.family + "', sans-serif");
if (typo.weight) el.style.setProperty(prefix + 'font-weight', typo.weight);
if (typo.transform) el.style.setProperty(prefix + 'text-transform', typo.transform);
if (typo.style) el.style.setProperty(prefix + 'font-style', typo.style);
if (typo.decoration) el.style.setProperty(prefix + 'text-decoration', typo.decoration);
var su = typo.sizeUnit || 'px';
if (typo.sizeDesktop !== '' && typo.sizeDesktop != null) el.style.setProperty(prefix + 'font-size-d', typo.sizeDesktop + su);
if (typo.sizeTablet !== '' && typo.sizeTablet != null) el.style.setProperty(prefix + 'font-size-t', typo.sizeTablet + su);
if (typo.sizeMobile !== '' && typo.sizeMobile != null) el.style.setProperty(prefix + 'font-size-m', typo.sizeMobile + su);
var lhu = typo.lineHeightUnit || '';
if (typo.lineHeightDesktop !== '' && typo.lineHeightDesktop != null) el.style.setProperty(prefix + 'line-height-d', typo.lineHeightDesktop + lhu);
if (typo.lineHeightTablet !== '' && typo.lineHeightTablet != null) el.style.setProperty(prefix + 'line-height-t', typo.lineHeightTablet + lhu);
if (typo.lineHeightMobile !== '' && typo.lineHeightMobile != null) el.style.setProperty(prefix + 'line-height-m', typo.lineHeightMobile + lhu);
var lsu = typo.letterSpacingUnit || 'px';
if (typo.letterSpacingDesktop !== '' && typo.letterSpacingDesktop != null) el.style.setProperty(prefix + 'letter-spacing-d', typo.letterSpacingDesktop + lsu);
if (typo.letterSpacingTablet !== '' && typo.letterSpacingTablet != null) el.style.setProperty(prefix + 'letter-spacing-t', typo.letterSpacingTablet + lsu);
if (typo.letterSpacingMobile !== '' && typo.letterSpacingMobile != null) el.style.setProperty(prefix + 'letter-spacing-m', typo.letterSpacingMobile + lsu);
var wsu = typo.wordSpacingUnit || 'px';
if (typo.wordSpacingDesktop !== '' && typo.wordSpacingDesktop != null) el.style.setProperty(prefix + 'word-spacing-d', typo.wordSpacingDesktop + wsu);
if (typo.wordSpacingTablet !== '' && typo.wordSpacingTablet != null) el.style.setProperty(prefix + 'word-spacing-t', typo.wordSpacingTablet + wsu);
if (typo.wordSpacingMobile !== '' && typo.wordSpacingMobile != null) el.style.setProperty(prefix + 'word-spacing-m', typo.wordSpacingMobile + wsu);
}
var target = o.openInNewTab ? '_blank' : '_self';
var progress = Math.round((o.currentPart / o.totalParts) * 100);
var wrap = document.createElement('div');
wrap.className = 'bkbg-cnv-wrap bkbg-cnv-' + o.style;
wrap.style.cssText = 'background:' + o.bgColor + ';padding-top:' + o.paddingTop + 'px;padding-bottom:' + o.paddingBottom + 'px;';
if (o.style === 'card') {
wrap.style.cssText += 'border:1px solid ' + o.borderColor + ';border-radius:' + o.borderRadius + 'px;box-shadow:0 2px 8px rgba(0,0,0,.06);overflow:hidden;';
} else if (o.style === 'banner') {
wrap.style.cssText += 'border-left:4px solid ' + o.accentColor + ';border:1px solid ' + o.borderColor + ';border-left-width:4px;border-radius:' + o.borderRadius + 'px;overflow:hidden;';
} else {
wrap.style.cssText += 'border-top:2px solid ' + o.accentColor + ';padding-top:16px;';
}
/* Header */
var hdr = document.createElement('div');
hdr.className = 'bkbg-cnv-header';
hdr.style.cssText = 'padding:16px 20px;' + (o.style !== 'minimal' ? 'border-bottom:1px solid ' + o.borderColor + ';' : '');
var meta = document.createElement('div');
meta.className = 'bkbg-cnv-meta';
meta.style.cssText = 'display:flex;align-items:center;gap:10px;margin-bottom:6px;flex-wrap:wrap;';
var pill = document.createElement('span');
pill.className = 'bkbg-cnv-pill';
pill.style.cssText = 'background:' + o.pillBg + ';color:' + o.pillColor + ';padding:3px 10px;border-radius:20px;font-size:12px;font-weight:600;';
pill.textContent = o.partLabel + ' ' + o.currentPart + ' of ' + o.totalParts;
var series = document.createElement('span');
series.className = 'bkbg-cnv-series';
series.style.cssText = 'font-size:13px;color:' + o.seriesTitleColor + ';';
series.textContent = o.seriesTitle;
meta.appendChild(pill);
meta.appendChild(series);
hdr.appendChild(meta);
var cTitle = document.createElement('h3');
cTitle.className = 'bkbg-cnv-current-title';
cTitle.style.cssText = 'margin:0;color:' + o.currentTitleColor + ';';
cTitle.textContent = o.currentTitle;
hdr.appendChild(cTitle);
if (o.showProgress) {
var pWrap = document.createElement('div');
pWrap.className = 'bkbg-cnv-progress-wrap';
pWrap.style.marginTop = '10px';
var pBar = document.createElement('div');
pBar.className = 'bkbg-cnv-progress-bar';
pBar.style.cssText = 'background:' + o.progressBg + ';border-radius:4px;height:6px;overflow:hidden;';
var pFill = document.createElement('div');
pFill.className = 'bkbg-cnv-progress-fill';
pFill.style.cssText = 'background:' + o.progressFill + ';width:' + progress + '%;height:100%;border-radius:4px;';
var pLbl = document.createElement('div');
pLbl.className = 'bkbg-cnv-progress-label';
pLbl.style.cssText = 'font-size:11px;margin-top:4px;opacity:.8;color:' + o.seriesTitleColor + ';';
pLbl.textContent = progress + '% through the series';
pBar.appendChild(pFill);
pWrap.appendChild(pBar);
pWrap.appendChild(pLbl);
hdr.appendChild(pWrap);
}
wrap.appendChild(hdr);
/* Nav row */
var nav = document.createElement('div');
nav.className = 'bkbg-cnv-nav';
nav.style.cssText = 'display:flex;gap:10px;padding:14px 20px;flex-wrap:wrap;';
if (o.prevTitle) {
var prevBtn = document.createElement('a');
prevBtn.className = 'bkbg-cnv-btn';
prevBtn.href = o.prevUrl || '#';
prevBtn.target = target;
if (o.openInNewTab) prevBtn.rel = 'noopener noreferrer';
prevBtn.style.cssText = 'flex:1;min-width:160px;background:' + o.btnBg + ';color:' + o.btnColor + ';padding:10px 14px;border-radius:6px;font-size:13px;text-decoration:none;display:flex;flex-direction:column;gap:2px;';
prevBtn.innerHTML = '← Previous' + esc(o.prevTitle) + '';
nav.appendChild(prevBtn);
}
if (o.nextTitle) {
var nextBtn = document.createElement('a');
nextBtn.className = 'bkbg-cnv-btn bkbg-cnv-btn-next';
nextBtn.href = o.nextUrl || '#';
nextBtn.target = target;
if (o.openInNewTab) nextBtn.rel = 'noopener noreferrer';
nextBtn.style.cssText = 'flex:1;min-width:160px;background:' + o.accentColor + ';color:#fff;padding:10px 14px;border-radius:6px;font-size:13px;text-decoration:none;display:flex;flex-direction:column;gap:2px;text-align:right;';
nextBtn.innerHTML = 'Next →' + esc(o.nextTitle) + '';
nav.appendChild(nextBtn);
}
wrap.appendChild(nav);
/* Chapter list */
if (o.showChapterList && o.chapters && o.chapters.length) {
var details = document.createElement('details');
if (o.chapterListOpen) details.open = true;
details.style.cssText = 'border-top:1px solid ' + o.borderColor + ';';
var summary = document.createElement('summary');
summary.className = 'bkbg-cnv-summary';
summary.style.cssText = 'padding:12px 20px;cursor:pointer;font-size:13px;font-weight:600;list-style:none;display:flex;align-items:center;justify-content:space-between;background:' + o.chapterListBg + ';color:' + o.seriesTitleColor + ';';
summary.innerHTML = 'All ' + o.totalParts + ' chapters▾';
var ul = document.createElement('ol');
ul.className = 'bkbg-cnv-list';
ul.style.cssText = 'margin:0;padding:8px 0;list-style:none;background:' + o.chapterListBg + ';';
o.chapters.forEach(function (ch, i) {
var isActive = (i + 1) === o.currentPart;
var li = document.createElement('li');
li.className = 'bkbg-cnv-list-item';
li.style.cssText = 'padding:8px 20px 8px 44px;position:relative;font-size:13px;' + (isActive ? 'background:' + o.activeChapterBg + ';' : '');
var num = document.createElement('span');
num.className = 'bkbg-cnv-item-num';
num.style.cssText = 'position:absolute;left:20px;font-weight:700;color:' + (isActive ? o.activeChapterColor : o.seriesTitleColor) + ';';
num.textContent = (i + 1) + '.';
li.appendChild(num);
if (ch.url && !isActive) {
var link = document.createElement('a');
link.className = 'bkbg-cnv-item-link';
link.href = ch.url;
link.target = target;
if (o.openInNewTab) link.rel = 'noopener noreferrer';
link.style.cssText = 'color:' + o.seriesTitleColor + ';text-decoration:none;';
link.textContent = ch.title;
li.appendChild(link);
} else {
var span = document.createElement('span');
span.style.cssText = 'color:' + (isActive ? o.activeChapterColor : o.seriesTitleColor) + ';font-weight:' + (isActive ? '600' : '400') + ';';
span.textContent = ch.title;
li.appendChild(span);
}
if (isActive) {
var badge = document.createElement('span');
badge.className = 'bkbg-cnv-current-badge';
badge.style.cssText = 'margin-left:8px;font-size:11px;padding:1px 7px;background:' + o.accentColor + ';color:#fff;border-radius:10px;font-weight:600;';
badge.textContent = 'Current';
li.appendChild(badge);
}
ul.appendChild(li);
});
details.appendChild(summary);
details.appendChild(ul);
wrap.appendChild(details);
}
typoCssVarsForEl(o.typoTitle, '--bkbg-cnv-tt-', wrap);
el.parentNode.insertBefore(wrap, el);
});
}
function esc(str) {
return String(str || '').replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
}
if (document.readyState !== 'loading') { init(); }
else { document.addEventListener('DOMContentLoaded', init); }
})();