'
+ '
'
+ '
' + escapeHtml(headTitle) + '
'
+ headLead
+ ''
+ '
' + body + '
'
+ ''
+ '
';
if (!_back) {
_back = document.createElement('div');
_back.className = 'ggs-qi-back';
_back.addEventListener('click', onBackClick);
document.body.appendChild(_back);
document.addEventListener('keydown', onKey);
}
_back.innerHTML = html;
var m = _back.querySelector('.ggs-qi-modal'); if (m) m.scrollTop = 0;
}
function open() {
if (!_config) return;
// Sicherheitsnetz: alle evtl. schon vorhandenen Overlays entfernen (nie doppelt)
var olds = document.querySelectorAll('.ggs-qi-back');
for (var i = 0; i < olds.length; i++) olds[i].remove();
_back = null;
document.removeEventListener('keydown', onKey);
_page = 1;
render();
}
window.GgsQuickIntro = {
init: function (config) {
_config = config || {};
// Plattform-Convention: GGS_TUTORIAL.replay() wird vom ℹ-Button im Header gerufen.
window.GGS_TUTORIAL = {
simId: _config.simId,
title: _config.title,
replay: function () { open(); },
};
// Beim 1. Besuch automatisch öffnen.
if (!isSeen()) {
// Kleiner Delay, damit Sim-Boot zuerst sein DOM aufbauen kann.
setTimeout(open, 400);
} else {
// Schon gesehen: kein Onboarding, aber die Sim darf trotzdem starten.
fireStart();
}
},
open: open,
close: close,
isSeen: isSeen,
};
})();