(function () { var _typoKeys = [ ['family','font-family'],['weight','font-weight'],['style','font-style'], ['decoration','text-decoration'],['transform','text-transform'], ['sizeDesktop','font-size','-d'],['sizeTablet','font-size','-t'],['sizeMobile','font-size','-m'], ['lineHeightDesktop','line-height','-d'],['lineHeightTablet','line-height','-t'],['lineHeightMobile','line-height','-m'], ['letterSpacingDesktop','letter-spacing','-d'],['letterSpacingTablet','letter-spacing','-t'],['letterSpacingMobile','letter-spacing','-m'], ['wordSpacingDesktop','word-spacing','-d'],['wordSpacingTablet','word-spacing','-t'],['wordSpacingMobile','word-spacing','-m'] ]; function typoCssVarsForEl(el, obj, prefix) { if (!obj) return; _typoKeys.forEach(function (k) { var v = obj[k[0]]; if (v !== undefined && v !== '') el.style.setProperty(prefix + k[1] + (k[2] || ''), String(v)); }); } function init() { document.querySelectorAll('.bkbg-src-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({ references: [], style: 'academic', label: 'Sources & References', showLabel: true, showAuthor: true, showPublication: true, showDate: true, showUrl: true, openInNewTab: true, bgColor: '#f8fafc', labelColor: '#111827', numberColor: '#6366f1', titleColor: '#111827', authorColor: '#374151', pubColor: '#6b7280', urlColor: '#6366f1', borderColor: '#e2e8f0', cardBg: '#ffffff', borderRadius: 8, paddingTop: 40, paddingBottom: 40 }, opts); var wrap = document.createElement('div'); wrap.className = 'bkbg-src-wrap bkbg-src-' + o.style; wrap.style.cssText = 'background:' + o.bgColor + ';padding:' + o.paddingTop + 'px 0 ' + o.paddingBottom + 'px;box-sizing:border-box;'; /* ── typography CSS vars ── */ typoCssVarsForEl(wrap, o.labelTypo, '--bksrc-lb-'); typoCssVarsForEl(wrap, o.refTypo, '--bksrc-rf-'); if (o.showLabel && o.label) { var lbl = document.createElement('h3'); lbl.className = 'bkbg-src-label'; lbl.style.cssText = 'color:' + o.labelColor + ';border-bottom:2px solid ' + o.borderColor + ';margin:0 0 20px;padding-bottom:10px;'; lbl.textContent = o.label; wrap.appendChild(lbl); } var target = o.openInNewTab ? '_blank' : '_self'; var refs = o.references || []; if (o.style === 'academic') { refs.forEach(function (r, i) { var item = document.createElement('div'); item.className = 'bkbg-src-item'; item.style.cssText = 'display:flex;gap:8px;margin-bottom:12px;line-height:1.65;align-items:flex-start;'; var num = document.createElement('span'); num.className = 'bkbg-src-num'; num.style.cssText = 'flex-shrink:0;min-width:28px;color:' + o.numberColor + ';'; num.textContent = '[' + (i + 1) + ']'; item.appendChild(num); var body = document.createElement('div'); var parts = []; if (o.showAuthor && r.author) parts.push('' + esc(r.author) + '. '); parts.push('"' + esc(r.title) + '."'); if (o.showPublication && r.publication) parts.push(' ' + esc(r.publication) + '.'); if (o.showDate && r.accessDate) parts.push(' Accessed ' + esc(r.accessDate) + '.'); if (o.showUrl && r.url) parts.push(' ' + esc(r.url) + ''); body.innerHTML = parts.join(''); item.appendChild(body); wrap.appendChild(item); }); } else if (o.style === 'cards') { refs.forEach(function (r, i) { var card = document.createElement('div'); card.className = 'bkbg-src-item'; card.style.cssText = 'display:flex;gap:12px;padding:14px 16px;margin-bottom:10px;border-radius:' + o.borderRadius + 'px;border:1px solid ' + o.borderColor + ';background:' + o.cardBg + ';'; var num = document.createElement('span'); num.className = 'bkbg-src-num'; num.style.cssText = 'flex-shrink:0;color:' + o.numberColor + ';align-self:flex-start;margin-top:2px;'; num.textContent = i + 1; card.appendChild(num); var cbody = document.createElement('div'); cbody.className = 'bkbg-src-card-body'; cbody.style.cssText = 'flex:1;min-width:0;'; var ctitle = document.createElement('p'); ctitle.className = 'bkbg-src-card-title'; ctitle.style.cssText = 'margin:0 0 3px;color:' + o.titleColor + ';'; ctitle.textContent = r.title; cbody.appendChild(ctitle); var metaParts = []; if (o.showAuthor && r.author) metaParts.push('' + esc(r.author) + ''); if (o.showPublication && r.publication) metaParts.push('' + esc(r.publication) + ''); if (o.showDate && r.accessDate) metaParts.push('' + esc(r.accessDate) + ''); if (metaParts.length) { var meta = document.createElement('p'); meta.className = 'bkbg-src-card-meta'; meta.style.cssText = 'margin:0 0 4px;display:flex;flex-wrap:wrap;gap:4px;'; meta.innerHTML = metaParts.join('·'); cbody.appendChild(meta); } if (o.showUrl && r.url) { var link = document.createElement('a'); link.className = 'bkbg-src-card-url'; link.href = r.url; link.target = target; link.rel = 'noopener noreferrer'; link.style.cssText = 'display:block;word-break:break-all;color:' + o.urlColor + ';margin-top:4px;'; link.textContent = r.url; cbody.appendChild(link); } card.appendChild(cbody); wrap.appendChild(card); }); } else { /* minimal */ var ul = document.createElement('ul'); ul.className = 'bkbg-src-list'; ul.style.cssText = 'list-style:none;padding:0;margin:0;'; refs.forEach(function (r, i) { var li = document.createElement('li'); li.className = 'bkbg-src-item'; li.style.cssText = 'margin-bottom:8px;line-height:1.6;color:' + o.titleColor + ';'; var parts = []; parts.push('' + (i + 1) + '.'); if (o.showAuthor && r.author) parts.push('' + esc(r.author) + '. '); parts.push('' + esc(r.title) + ''); if (o.showPublication && r.publication) parts.push(', ' + esc(r.publication) + ''); if (o.showUrl && r.url) parts.push(' — ' + esc(r.url) + ''); li.innerHTML = parts.join(''); ul.appendChild(li); }); wrap.appendChild(ul); } 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); } })();