diff --git a/public/router.js b/public/router.js
index 773b0ae..62c4adc 100644
--- a/public/router.js
+++ b/public/router.js
@@ -1130,6 +1130,9 @@ function renderError(container, err) {
* @param {'default'|'success'|'danger'|'warning'} type
* @param {number} duration - ms
*/
+const TOAST_SUCCESS_KEY = 'oikos:toastSuccessCount';
+const TOAST_SUCCESS_MAX = 50;
+
const TOAST_ICONS = {
success: '',
danger: '',
@@ -1140,6 +1143,13 @@ function showToast(message, type = 'default', duration = 3000, onUndo = null) {
const container = document.getElementById('toast-container');
if (!container) return;
+ // Long Loop: Success-Toasts nach TOAST_SUCCESS_MAX Aufrufen unterdrücken
+ if (type === 'success' && typeof onUndo !== 'function') {
+ const successCount = parseInt(localStorage.getItem(TOAST_SUCCESS_KEY) ?? '0', 10) + 1;
+ localStorage.setItem(TOAST_SUCCESS_KEY, String(successCount));
+ if (successCount > TOAST_SUCCESS_MAX) return;
+ }
+
// Max. 3 gleichzeitige Toasts: ältesten entfernen falls Limit erreicht
const existing = container.querySelectorAll('.toast');
if (existing.length >= 3) existing[0].remove();