/* Football Manager Retro V4.3 - Ereignisse & Entscheidungen */
(function(){
'use strict';
const E=[
['reserve_angry','Spieler','Reservist fordert Einsatzzeit','{player} ist mit seiner Rolle unzufrieden und verlangt mehr Spielzeit.',['Einsatz versprechen','Gespräch suchen','Transfer erlauben']],
['new_contract','Spieler','Berater fordert neuen Vertrag','Der Berater von {player} verlangt nach starken Leistungen eine Gehaltserhöhung.',['Vertrag verbessern','Verhandeln','Ablehnen']],
['party','Spieler','Nachtleben statt Regeneration','{player} wurde spät in der Nacht in einem Club gesehen. Morgen wäre Training.',['Geldstrafe','Internes Gespräch','Ignorieren']],
['social_media','Medien','Kritik auf Social Media','{player} kritisiert öffentlich seine Einsatzzeit.',['Öffentlich bestrafen','Vier-Augen-Gespräch','Ignorieren']],
['play_hurt','Medizin','Spieler will angeschlagen spielen','{player} fühlt sich trotz kleiner Beschwerden einsatzbereit. Der Arzt rät zur Vorsicht.',['Schonen','Einsatz erlauben']],
['flu','Medizin','Grippewelle im Kader','Mehrere Spieler klagen über Erkältungssymptome.',['Training reduzieren','Normal weitertrainieren']],
['sponsor_bonus','Sponsor','Sonderprämie angeboten','Ein Sponsor bietet 500.000 € Bonus, wenn die nächsten drei Ligaspiele mindestens sechs Punkte bringen.',['Ziel annehmen','Ablehnen']],
['stadium_damage','Stadion','Sturmschaden am Stadion','Ein Unwetter hat Teile des Stadions beschädigt.',['Sofort reparieren','Provisorisch sichern']],
['gastro_hit','Finanzen','Neuer Gastro-Hit','Ein neuer Stadion-Snack verkauft sich überraschend gut.',['Produktion ausbauen','Preise erhöhen','Nichts ändern']],
['shirt_cult','Marketing','Trikot wird zum Kultobjekt','Das aktuelle Trikot geht in sozialen Medien viral.',['Produktion erhöhen','Vorsichtig nachproduzieren']],
['investor','Vorstand','Investor klopft an','Ein regionaler Investor bietet dem Verein 8 Mio. € gegen starken Einfluss auf Transfers.',['Annehmen','Ablehnen']],
['bus','Humor','Mannschaftsbus streikt','Auf dem Weg zum Training bleibt der Mannschaftsbus liegen.',['Taxis organisieren','Zu Fuß zum Trainingsplatz']],
['flooded_pitch','Training','Trainingsplatz überflutet','Starker Regen setzt den Trainingsplatz unter Wasser.',['Halle mieten','Training absagen']],
['player_fight','Kabine','Streit in der Kabine','Zwei Spieler geraten nach dem Training heftig aneinander.',['Beide bestrafen','Kapitän vermitteln lassen','Ignorieren']],
['fan_protest','Fans','Fans protestieren','Eine Fangruppe kritisiert Ticketpreise und fehlende Nähe zum Verein.',['Fanabend veranstalten','Ticketaktion starten','Ignorieren']],
['derby_security','Stadion','Sicherheitsauflagen vor Risikospiel','Die Behörden verlangen zusätzliche Sicherheitsmaßnahmen.',['Zusätzliche Security','Nur Mindestmaßnahmen']],
['tv_move','Medien','TV-Sender will Spiel verlegen','Der TV-Partner bietet 300.000 € für eine kurzfristige Spielverlegung.',['Zustimmen','Ablehnen']],
['pitch_bad','Stadion','Rasen in schlechtem Zustand','Der Platzwart warnt vor einem zunehmend schlechten Rasen.',['Rasen erneuern','Weiterspielen']],
['youth_project','Jugend','Jugendprojekt vorgeschlagen','Der Jugendleiter möchte 400.000 € in ein geheimes Nachwuchsprojekt investieren. Erfolg ungewiss.',['Investieren','Ablehnen']],
['wonderkid','Jugend','Balljunge überrascht Trainer','Ein 16-jähriger Balljunge zeigt nach dem Training erstaunliche Technik.',['Probetraining geben','Freundlich verabschieden']],
['documentary','Medien','Streaming-Doku angefragt','Eine Produktionsfirma möchte eine Saison lang hinter die Kulissen blicken.',['Doku erlauben','Ablehnen']],
['lucky_gloves','Humor','Glückshandschuhe verschwunden','Dein Torwart ist überzeugt, ohne seine Glückshandschuhe nicht spielen zu können.',['Neue Spezialhandschuhe kaufen','Psychologisches Gespräch','Ignorieren']],
['club_song','Humor','Spieler veröffentlicht Vereinssong','{player} veröffentlicht ohne Vorwarnung einen ziemlich schrägen Vereinssong.',['Marketingkampagne daraus machen','Diskret Abstand nehmen']],
['mascot','Humor','Ungewöhnliches Maskottchen','Bei einem Training läuft eine Ziege aufs Gelände. Die Fans taufen sie bereits „Goaldi“.',['Als Maskottchen behalten','Besitzer suchen']],
['christmas','Kabine','Weihnachtsfeier eskaliert','Die Weihnachtsfeier war offenbar deutlich länger als geplant.',['Mannschaft bestrafen','Intern abhaken']],
['free_agent_tip','Transfer','Scout meldet Schnäppchen','Dein Scout kennt einen vereinslosen Spieler, der kurzfristig helfen könnte.',['Probetraining','Nicht interessiert']],
['rival_bid','Transfer','Rivale provoziert mit Angebot','Ein direkter Konkurrent signalisiert Interesse an {player}.',['Unverkäuflich erklären','Gesprächsbereit zeigen']],
['captain_talk','Kabine','Kapitän fordert Teamabend','Der Kapitän glaubt, die Mannschaft brauche einen gemeinsamen Abend.',['Teamabend bezahlen','Training statt Freizeit']],
['energy_bill','Finanzen','Energieabrechnung überrascht','Die Energiekosten des Stadions liegen deutlich über Plan.',['Sparprogramm','Komfort beibehalten']],
['museum_find','Historie','Fund im Vereinsarchiv','Im Keller taucht eine Kiste mit historischen Erinnerungsstücken auf.',['Ausstellung eröffnen','An Sammler verkaufen']],
['penalty_pressure','Spieler','Elfmeterschütze unter Druck','Nach einem Fehlschuss bittet {player} darum, vorerst keine Elfmeter mehr zu schießen.',['Vertrauen aussprechen','Schützen wechseln']],
['training_bet','Training','Wette im Abschlusstraining','Die Mannschaft wettet: Verlierer des Trainingsspiels zahlt das gemeinsame Essen.',['Mitmachen lassen','Wette verbieten']]
];
const C=(v,a,b)=>Math.max(a,Math.min(b,v));
const club=()=>typeof getUserClub==='function'?getUserClub():null;
function ensure(){if(!state)return;state.v43 ||= {history:[],pending:null,lastEventWeek:-9,cooldowns:{},chains:[],promises:[],bonusChallenges:[],totalDecisions:0};}
function player(){const c=club();if(!c?.squad?.length)return null;return c.squad[Math.floor(Math.random()*c.squad.length)];}
function fmt(t,p){return String(t).replaceAll('{player}',p?.name||'ein Spieler');}
function eligible(def){const [id,cat]=def,v=state.v43,c=club();if((v.cooldowns[id]||0)>state.week)return false;if(id==='stadium_damage'&&c?.balance<1000000)return false;if(id==='investor'&&c?.balance>180000000)return false;if(id==='play_hurt'&&!c?.squad?.some(p=>p.fitness<85))return false;if(id==='wonderkid'&&state.v20?.academy?.length>17)return false;if(id==='fan_protest'&&state.v20?.fanMood==='Begeistert')return false;if(id==='energy_bill'&&state.v20?.facilities?.solar>=4)return false;return true;}
function makeEvent(def,forced=false){const [id,category,title,text,choices]=def,p=player();return {id:typeof uid==='function'?uid():`${Date.now()}-${Math.random()}`,type:id,category,title,text:fmt(text,p),playerId:p?.id||null,playerName:p?.name||null,choices,week:state.week,season:state.season,created:Date.now(),forced};}
function chance(){ensure();const v=state.v43;if(v.pending)return;if(v.chains.length){const due=v.chains.findIndex(x=>x.week<=state.week);if(due>=0){const ch=v.chains.splice(due,1)[0];const d=E.find(x=>x[0]===ch.type);if(d){v.pending=makeEvent(d,true);return;}}}if(state.week-v.lastEventWeek<2)return;let probability=.27;if(state.v20?.fanMood==='Unruhig')probability+=.05;if((state.v20?.boardConfidence||70)<40)probability+=.05;if(Math.random()>probability)return;const pool=E.filter(eligible);if(!pool.length)return;v.pending=makeEvent(pool[Math.floor(Math.random()*pool.length)]);v.lastEventWeek=state.week;}
function moneyDelta(n,label){const c=club();if(!c)return;c.balance+=n;if(label)state.news.unshift(`${label}: ${n>=0?'+':''}${typeof money==='function'?money(n):n}`);}
function morale(n){club()?.squad?.forEach(p=>p.morale=C((p.morale||70)+n,20,100));}
function fitness(n){club()?.squad?.forEach(p=>p.fitness=C((p.fitness||85)+n,25,100));}
function board(n){if(state.v20)state.v20.boardConfidence=C((state.v20.boardConfidence||70)+n,0,100);}
function fans(mode){if(state.v20)state.v20.fanMood=mode;}
function target(ev){return club()?.squad?.find(p=>p.id===ev.playerId)||player();}
function addYouth(boost=0){if(!state.v20?.academy)return;const p=typeof v20Youth==='function'?v20Youth():null;if(p){p.rating=C(p.rating+boost,40,78);p.potential=C(p.potential+boost*2,60,96);state.v20.academy.unshift(p);}}
function result(ev,idx){const p=target(ev),v=state.v43,c=club();let text='';switch(ev.type){
case'reserve_angry': if(idx===0){p.morale=C(p.morale+8,0,100);v.promises.push({playerId:p.id,due:state.week+3,type:'minutes'});text='Der Spieler ist zufrieden. Jetzt musst du dein Versprechen aber auch halten.';}else if(idx===1){p.morale=C(p.morale+2,0,100);text='Das Gespräch beruhigt die Lage vorerst.';}else{p.transferListed=true;p.askingPrice=Math.round((p.value||1e6)*1.1);text='Der Spieler darf sich nach einem neuen Verein umsehen.';}break;
case'new_contract':if(idx===0){p.wage=Math.round(p.wage*1.25);p.contract=Math.max(3,p.contract||2);p.morale=C(p.morale+10,0,100);text='Der Spieler unterschreibt zufrieden.';}else if(idx===1){if(Math.random()<.6){p.wage=Math.round(p.wage*1.12);p.morale+=4;text='Der Berater akzeptiert einen Kompromiss.';}else{p.morale-=7;text='Die Verhandlung scheitert. Der Spieler ist enttäuscht.';}}else{p.morale-=10;text='Die Forderung wurde abgelehnt. Das Verhältnis ist angespannt.';}break;
case'party':if(idx===0){p.morale-=5;board(2);text='Die Strafe sorgt für Disziplin, kommt beim Spieler aber schlecht an.';}else if(idx===1){p.morale+=2;text='Das persönliche Gespräch wirkt.';}else{p.fitness=C(p.fitness-6,0,100);text='Keine Konsequenz – aber die Regeneration leidet.';}break;
case'social_media':if(idx===0){p.morale-=8;board(2);text='Klare Linie des Vereins. Der Spieler ist sauer.';}else if(idx===1){p.morale+=3;text='Der Beitrag wird gelöscht und intern geklärt.';}else{fans('Unruhig');text='Die Diskussion schaukelt sich in den Medien hoch.';}break;
case'play_hurt':if(idx===0){p.fitness=C(p.fitness+8,0,100);text='Der Spieler bekommt die nötige Pause.';}else{p.morale+=4;if(Math.random()<.22){p.injuryGames=1+Math.floor(Math.random()*3);text='Das Risiko rächt sich: Der Spieler verletzt sich.';}else{text='Der Einsatz geht gut – diesmal.';}}break;
case'flu':if(idx===0){fitness(3);text='Die Belastung wird reduziert. Der Kader erholt sich.';}else{fitness(-4);text='Das Training läuft weiter, einige Spieler wirken aber müde.';}break;
case'sponsor_bonus':if(idx===0){v.bonusChallenges.push({startWeek:state.week,endWeek:state.week+3,target:6,reward:500000,startPoints:c.points||0});text='Die Herausforderung läuft: sechs Punkte aus drei Spielen.';}else text='Der Verein verzichtet auf zusätzlichen Druck.';break;
case'stadium_damage':if(idx===0){moneyDelta(-1200000);if(c.stadium)c.stadium.condition=C((c.stadium.condition||80)+8,0,100);text='Der Schaden wird professionell behoben.';}else{moneyDelta(-300000);if(c.stadium)c.stadium.condition=C((c.stadium.condition||80)-8,0,100);text='Die günstige Lösung hält – vorerst. Der Stadionzustand sinkt.';}break;
case'gastro_hit':if(idx===0){moneyDelta(-180000);if(state.v20?.facilities)state.v20.facilities.gastro=C((state.v20.facilities.gastro||1)+1,0,5);text='Mehr Verkaufsstellen steigern das langfristige Gastro-Potenzial.';}else if(idx===1){moneyDelta(220000);fans('Unruhig');text='Kurzfristig mehr Gewinn, die Fans finden die Preise happig.';}else text='Du lässt den Erfolg einfach laufen.';break;
case'shirt_cult':if(idx===0){moneyDelta(-350000);setTimeout(()=>{},0);v.chains.push({week:state.week+2,type:'museum_find'});text='Die Produktion wird hochgefahren. Ob sich das auszahlt, zeigt sich später.';}else{moneyDelta(180000);text='Die limitierte Menge verkauft sich mit sicherer Marge.';}break;
case'investor':if(idx===0){moneyDelta(8000000);board(-4);v.investorInfluence=3;text='8 Mio. € sind da – der Investor wird bei künftigen Transfers mitreden.';}else{board(3);text='Der Vorstand respektiert die Unabhängigkeit.';}break;
case'bus':if(idx===0){moneyDelta(-45000);text='Alle kommen rechtzeitig und trocken an.';}else{fitness(-2);morale(2);text='Ein ungewöhnlicher Fußmarsch – anstrengend, aber gut für den Teamgeist.';}break;
case'flooded_pitch':if(idx===0){moneyDelta(-70000);text='Das Training findet in der Halle statt.';}else{fitness(2);text='Ein freier Tag sorgt immerhin für Regeneration.';}break;
case'player_fight':if(idx===0){morale(-2);board(2);text='Klare Konsequenzen, aber die Stimmung ist frostig.';}else if(idx===1){morale(4);text='Der Kapitän schlichtet erfolgreich.';}else{morale(-5);text='Der Konflikt schwelt weiter.';}break;
case'fan_protest':if(idx===0){moneyDelta(-120000);fans('Zufrieden');text='Der Fanabend verbessert die Stimmung.';}else if(idx===1){moneyDelta(-250000);fans('Zufrieden');text='Die Ticketaktion kommt gut an.';}else{fans('Unruhig');board(-3);text='Der Protest wird lauter.';}break;
case'derby_security':if(idx===0){moneyDelta(-180000);text='Das Spiel kann sicher stattfinden.';}else if(Math.random()<.3){moneyDelta(-350000);board(-4);text='Nach Zwischenfällen folgt eine Verbandsstrafe.';}else text='Du kommst mit den Mindestmaßnahmen durch.';break;
case'tv_move':if(idx===0){moneyDelta(300000);fitness(-2);text='TV-Geld kommt rein, die Vorbereitung wird etwas schwieriger.';}else{board(1);text='Der sportliche Rhythmus hat Vorrang.';}break;
case'pitch_bad':if(idx===0){moneyDelta(-600000);if(c.stadium)c.stadium.condition=C((c.stadium.condition||80)+12,0,100);text='Der neue Rasen ist ausgezeichnet.';}else{if(Math.random()<.18){const q=player();q.injuryGames=1;text=`Der schlechte Rasen fordert seinen Preis: ${q.name} fällt kurz aus.`;}else text='Der alte Rasen hält noch eine Weile.';}break;
case'youth_project':if(idx===0){moneyDelta(-400000);const luck=Math.random();if(luck>.82){addYouth(8);text='Jackpot! Das Projekt entdeckt ein außergewöhnliches Talent.';}else if(luck>.4){addYouth(3);text='Das Projekt bringt ein interessantes Talent hervor.';}else{text='Vorerst kein Durchbruch. Vielleicht war die Investition Lehrgeld.';}}else text='Der Verein investiert diesmal nicht.';break;
case'wonderkid':if(idx===0){addYouth(7);text='Das Probetraining bestätigt den Eindruck: ein echtes Talent!';}else text='Vielleicht wirst du dich eines Tages an diese Entscheidung erinnern.';break;
case'documentary':if(idx===0){moneyDelta(900000);if(Math.random()<.5){fans('Begeistert');text='Die Doku wird ein Hit und bringt Geld sowie neue Fans.';}else{morale(-3);text='Gutes Geld, aber die Kameras sorgen für Unruhe in der Kabine.';}}else text='Der Verein bleibt hinter verschlossenen Türen.';break;
case'lucky_gloves':if(idx===0){moneyDelta(-12000);p.morale+=6;text='Die neuen Handschuhe fühlen sich angeblich „magisch“ an.';}else if(idx===1){p.morale+=2;text='Das Gespräch hilft dem Torwart, den Aberglauben einzuordnen.';}else{p.morale-=5;text='Der Torwart fühlt sich nicht ernst genommen.';}break;
case'club_song':if(idx===0){moneyDelta(140000);fans('Begeistert');text='Der Song ist objektiv fragwürdig – aber die Fans lieben ihn.';}else{p.morale-=2;text='Der Verein kommentiert den musikalischen Ausflug nicht.';}break;
case'mascot':if(idx===0){moneyDelta(-8000);fans('Begeistert');text='„Goaldi“ wird zum Publikumsliebling.';}else{moneyDelta(5000);text='Der Besitzer bedankt sich mit einer kleinen Spende.';}break;
case'christmas':if(idx===0){morale(-4);board(2);text='Die Mannschaft akzeptiert die Strafe widerwillig.';}else{morale(4);text='Intern abhaken stärkt den Zusammenhalt – solange nichts nach außen dringt.';}break;
case'free_agent_tip':if(idx===0){moneyDelta(-30000);if(Math.random()<.45){const q=typeof createPlayer==='function'?createPlayer(['ST','ZM','IV'][Math.floor(Math.random()*3)],Math.max(58,c.rating-6)):null;if(q){q.value=Math.round(q.value*.7);state.transferList?.unshift({...q,fromClub:'Vereinslos',asking:Math.round(q.value*.65)});}text='Das Probetraining überzeugt. Der Spieler erscheint günstig am Transfermarkt.';}else text='Der Spieler kann im Probetraining nicht überzeugen.';}else text='Der Scout akzeptiert die Entscheidung.';break;
case'rival_bid':if(idx===0){p.morale+=3;fans('Begeistert');text='Die klare Ansage kommt bei Fans und Spieler gut an.';}else{p.transferListed=true;p.askingPrice=Math.round((p.value||1e6)*1.3);text='Du öffnest die Tür für ein lukratives Angebot.';}break;
case'captain_talk':if(idx===0){moneyDelta(-35000);morale(5);text='Der Teamabend stärkt die Kabine.';}else{fitness(-2);morale(-2);text='Die zusätzliche Einheit ist intensiv – nicht jeder ist begeistert.';}break;
case'energy_bill':if(idx===0){moneyDelta(-90000);if(c.stadium)c.stadium.condition=C(c.stadium.condition-2,0,100);text='Das Sparprogramm senkt Kosten, aber auch etwas Komfort.';}else{moneyDelta(-280000);text='Der Verein zahlt die Rechnung und hält den Standard.';}break;
case'museum_find':if(idx===0){moneyDelta(-120000);if(state.v20?.facilities)state.v20.facilities.museum=C((state.v20.facilities.museum||0)+1,0,5);fans('Begeistert');text='Die neue Ausstellung wird zum Fanmagneten.';}else{moneyDelta(420000);text='Ein Sammler zahlt überraschend viel.';}break;
case'penalty_pressure':if(idx===0){p.morale+=5;p.penalties=C((p.penalties||65)+2,1,99);text='Dein Vertrauen stärkt den Schützen.';}else{p.morale-=2;text='Der Druck ist weg, aber sein Selbstvertrauen bekommt einen kleinen Dämpfer.';}break;
case'training_bet':if(idx===0){morale(3);text='Die Kabine hat Spaß – das Essen wird lautstark abgerechnet.';}else{board(1);morale(-1);text='Disziplin vor Spaß. Der Vorstand nickt, die Spieler weniger.';}break;
default:text='Die Entscheidung wurde umgesetzt.';}
return text;}
function decide(idx){ensure();const ev=state.v43.pending;if(!ev)return;const modalEl=document.querySelector('#eventDecisionModal');try{const choice=ev.choices[idx];const outcome=result(ev,idx);state.v43.history.unshift({...ev,choice,outcome,resolvedWeek:state.week});state.v43.history=state.v43.history.slice(0,150);state.v43.totalDecisions++;state.v43.cooldowns[ev.type]=state.week+8;state.v43.pending=null;state.news.unshift(`${ev.title}: ${outcome}`);if(state.v32?.chronicle)state.v32.chronicle.unshift({id:`event-${ev.id}`,season:state.season,week:state.week,date:new Date().toLocaleDateString('de-DE'),type:'Entscheidung',text:`${ev.title} – ${choice}. ${outcome}`});if(typeof save==='function')save();}catch(err){console.error('Ereignisentscheidung fehlgeschlagen',err);state.v43.pending=null;state.news?.unshift?.('Das Ereignis wurde abgeschlossen, konnte aber nicht vollständig ausgewertet werden.');}finally{if(modalEl)modalEl.remove();if(typeof render==='function')render();}}
function processChallenges(){ensure();const c=club(),v=state.v43;v.bonusChallenges=v.bonusChallenges.filter(x=>{if(state.week<x.endWeek)return true;const gained=(c.points||0)-x.startPoints;if(gained>=x.target){moneyDelta(x.reward,'Sponsor-Sonderbonus');state.news.unshift(`Sponsorenziel erfüllt: ${gained} Punkte – Bonus ausgezahlt.`);}else state.news.unshift(`Sponsorenziel verpasst: nur ${gained} von ${x.target} Punkten.`);return false;});v.promises=v.promises.filter(x=>{if(state.week<x.due)return true;const p=c.squad.find(y=>y.id===x.playerId);if(p){const recentApps=p.apps||0;if(recentApps<2){p.morale=C(p.morale-10,0,100);state.news.unshift(`Versprechen an ${p.name} nicht erfüllt – seine Moral sinkt.`);}else p.morale=C(p.morale+4,0,100);}return false;});}
function eventsView(){ensure();const v=state.v43;return `<section><div class="card"><span class="viz-badge">VERSION 4.3</span><h2>🎲 Ereignisse & Entscheidungen</h2><p>Unvorhersehbare Geschichten rund um Spieler, Fans, Vorstand, Finanzen und Vereinsleben. Nicht jede Woche passiert etwas.</p><div class="grid cols-3"><div class="metric-card"><span>Entscheidungen</span><div class="viz-stat-value">${v.totalDecisions}</div></div><div class="metric-card"><span>Offene Ereignisse</span><div class="viz-stat-value">${v.pending?1:0}</div></div><div class="metric-card"><span>Ereignisketten</span><div class="viz-stat-value">${v.chains.length}</div></div></div></div><div class="card" style="margin-top:16px"><h2>Entscheidungshistorie</h2>${v.history.length?v.history.map(x=>`<article class="event-history"><small>${x.season} · Woche ${x.week} · ${x.category}</small><h3>${esc(x.title)}</h3><p>${esc(x.text)}</p><p><b>Deine Entscheidung:</b> ${esc(x.choice)}</p><p class="good">${esc(x.outcome)}</p></article>`).join(''):'<p class="muted">Noch keine Ereignisse.</p>'}</div></section>`;}
function modal(){ensure();const ev=state.v43.pending;const stale=document.querySelector('#eventDecisionModal');if(!ev){if(stale)stale.remove();return;}if(stale)return;const wrap=document.createElement('div');wrap.id='eventDecisionModal';wrap.className='event-modal-backdrop';wrap.innerHTML=`<div class="event-modal"><div class="event-category">${esc(ev.category)}</div><h2>${esc(ev.title)}</h2><p>${esc(ev.text)}</p><div class="event-choices">${ev.choices.map((x,i)=>`<button class="${i===0?'primary':''}" data-event-choice="${i}">${esc(x)}</button>`).join('')}</div><small>Die Folgen sind nicht immer vollständig vorhersehbar.</small></div>`;document.body.appendChild(wrap);wrap.querySelectorAll('[data-event-choice]').forEach(b=>b.onclick=()=>decide(Number(b.dataset.eventChoice)));}
function afterWeek(before){if(!state||state.week<=before)return;ensure();processChallenges();chance();save();render();}
const oldNext=nextWeek;nextWeek=function(){const b=state?.week||0;oldNext();afterWeek(b);};
const oldFinish=finishLiveMatch;finishLiveMatch=function(){const b=state?.week||0;oldFinish();afterWeek(b);};
const oldRender=render;render=function(){if(!state)return;ensure();oldRender();if(view==='events'){$('#content').innerHTML=eventsView();bindDynamic();}const label=$('#seasonLabel');if(label)label.textContent=label.textContent.replace(/Version 4\.2[^·]*/,'Version 4.3 · Ereignisse');setTimeout(modal,0);};
const oldLoad=load;load=function(){oldLoad();if(state){ensure();save();render();}};
const oldNew=newGame;newGame=function(...a){oldNew(...a);if(state){state.v43=null;ensure();save();render();}};
window.FMEvents43={ensure,trigger:chance,decide};
})();
