diff --git a/src/static/js/tutorial.js b/src/static/js/tutorial.js index 7da2ecd..ae8cc51 100644 --- a/src/static/js/tutorial.js +++ b/src/static/js/tutorial.js @@ -1849,15 +1849,18 @@ const Tutorial = { var el = document.querySelector(selector); var modalBody = document.querySelector('#modal-new .modal-body'); if (!el || !modalBody) return Promise.resolve(); - // Element zentriert im sichtbaren Modal-Bereich anzeigen - var elRect = el.getBoundingClientRect(); - var bodyRect = modalBody.getBoundingClientRect(); - var bodyVisibleH = bodyRect.height; - var offset = elRect.top - bodyRect.top + modalBody.scrollTop; - var elCenter = offset + elRect.height / 2; - var targetScroll = elCenter - bodyVisibleH / 2; - modalBody.scrollTo({ top: Math.max(0, targetScroll), behavior: 'smooth' }); - return new Promise(function(resolve) { setTimeout(resolve, 500); }); + // scrollIntoView auf dem Element - scrollt den naechsten scrollbaren Container + try { el.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch(e) {} + // Fallback: manuell scrollTop setzen via offsetTop-Berechnung + var elTop = 0; + var node = el; + while (node && node !== modalBody) { + elTop += node.offsetTop || 0; + node = node.offsetParent; + } + var targetScroll = elTop - modalBody.clientHeight / 2 + el.offsetHeight / 2; + modalBody.scrollTop = Math.max(0, targetScroll); + return new Promise(function(resolve) { setTimeout(resolve, 400); }); }, // Helfer: Modal scrollen UND Bubble neu positionieren