). Der QR hängt ?code=CODE an. */
einloesenUrl: 'https://vitalunateam.de/gutschein-einloesen/',
/* Fallback-Code, falls nicht per ?code= übergeben (nur Vorschau). */
demoCode: 'TB-XXXX-XXXX',
dlHint: 'Tipp: Die heruntergeladene PNG kannst du direkt verschicken oder ausdrucken.',
sendenHint: 'Möchtest du die Karte stattdessen als gedruckte Karte im Geschenkkarton verschicken lassen? Das richten wir dir als Versand-Option ein.'
};
/* ============================================================ */
var root = document.getElementById('divi-tb-karte');
if (!root) return;
function el(n){ return root.querySelector('[data-el="'+n+'"]'); }
var params = new URLSearchParams(window.location.search);
var code = (params.get('code') || CONFIG.demoCode || '').toUpperCase();
var qrUrl = CONFIG.einloesenUrl + (CONFIG.einloesenUrl.indexOf('?')>-1?'&':'?') + 'code=' + encodeURIComponent(code);
el('titel').textContent = CONFIG.titel || '';
el('intro').textContent = CONFIG.intro || '';
el('brand').textContent = CONFIG.marke || '';
el('code').textContent = code;
el('dl-hint').textContent = CONFIG.dlHint || '';
el('senden-hint').textContent = CONFIG.sendenHint || '';
var state = { layout: 0, name: '', msg: CONFIG.demoMsg || '' };
/* Layout-Thumbnails */
function bgFor(i){
var L = (CONFIG.layouts||[])[i] || {};
if (L.img) return "url('"+L.img+"')";
/* Fallback-Verläufe, falls kein Bild gesetzt */
var grad = ["linear-gradient(135deg,#cfd8d2,#8aa182)","linear-gradient(135deg,#dfe6e3,#7fa5a0)","linear-gradient(135deg,#e7dfce,#b59a6e)"];
return grad[i % grad.length];
}
el('layouts').innerHTML = (CONFIG.layouts||[]).map(function(L,i){
return '
';
}).join('');
root.querySelectorAll('.k-lay').forEach(function(t){
t.addEventListener('click',function(){
state.layout = parseInt(t.getAttribute('data-i'),10)||0;
root.querySelectorAll('.k-lay').forEach(function(x){ x.classList.remove('aktiv'); });
t.classList.add('aktiv');
renderPreview();
});
});
el('in-name').addEventListener('input',function(){ state.name=this.value; renderPreview(); });
el('in-msg').addEventListener('input',function(){ state.msg=this.value; renderPreview(); });
function renderPreview(){
el('bg').style.backgroundImage = bgFor(state.layout);
el('fuer').textContent = state.name ? ('Für ' + state.name) : '';
el('msg').textContent = state.msg || '';
}
/* QR auf Canvas zeichnen (Vorschau) */
var qrCanvas = document.createElement('canvas');
function zeichneQR(canvas, size){
try{
var q = qrcode(0,'M'); q.addData(qrUrl); q.make();
var n = q.getModuleCount(); var cell = Math.floor(size/(n+2)); var pad = Math.floor((size-cell*n)/2);
canvas.width=size; canvas.height=size; var ctx=canvas.getContext('2d');
ctx.fillStyle='#fff'; ctx.fillRect(0,0,size,size); ctx.fillStyle='#2e251f';
for(var r=0;r
maxW&&line){ c.fillText(line.trim(),x,y); line=words[i]+' '; y+=lh; } else line=test; } c.fillText(line.trim(),x,y); }
if(document.fonts&&document.fonts.ready){ document.fonts.ready.then(malen); } else { malen(); }
});
})();