from pathlib import Path
import json,re
root=Path(__file__).resolve().parents[1]
out=root/'site/flow'
original=json.loads(Path('/Users/agency/.agents/cf-review/komplex-rita-funnel-2026-09-26-v1/materials/content.json').read_text())['emails']
lesson_data=json.loads((root/'site/app/lessons.json').read_text())
days=lesson_data['days']
modules=lesson_data['modules']
emails=[]
def pair(a,b):
 return [dict(version='A',subject=a[0],preheader=a[1],body=a[2]),dict(version='B',subject=b[0],preheader=b[1],body=b[2])]
def add(ident,label,trigger,stage,dest,cta,a,b,marketing=False):
 exclude='A bemutató nem küld üzenetet. Valódi működésben hiányzó kézbesíthető cím, visszapattanás vagy lezárt kérés esetén nem küldhető.'
 if marketing:exclude+=' Marketinghozzájárulás nélkül kizárt. Programmeghívó fizető résztvevőnek nem küldhető. Aktív kohorszpromóció váltja ki a heti levelet.'
 emails.append(dict(id=ident,label=label,trigger=trigger,recipient_stage=stage,destination=dest,cta=cta,marketing=marketing,exclude=exclude,versions=pair(a,b)))
vowels='aáeéiíoóöőuúüű'
def article_for(text,capitalize=False):
 article='az' if text[:1].casefold() in vowels else 'a'
 return article.capitalize() if capitalize else article
def ordinal_article(number,capitalize=False):
 article='az' if number in (1,5) else 'a'
 return article.capitalize() if capitalize else article
def pilot_time(d):
 source_minutes=modules[str(d['module'])]['duration']
 return f'Az új pilotra szóló, még egyeztetésre váró napi gyakorlásbecslés körülbelül {d["duration"]} perc. A forrás az eredeti {d["module"]}. modul teljes gyakorlására körülbelül {source_minutes} percet jelöl. A videófelvétel és a reflexió ezen felül időt igényelhet.'
add('receipt','Az ingyenes videó átvételének mintája','Csak ténylegesen igazolt videóátvétel után. A prototípus helyi beküldést mutat.','Videót beküldő érdeklődő.','free-receipt.html','Megnézem a következő lépést',
 ('Megérkezett a videód: visszaigazolási minta','A személyes válasz és a hírlevél külön út.','Szia!\n\nEz a videó átvételét követő visszaigazolás teljes mintája. A prototípusban a fájl csak a saját böngésződben szerepel, nem jutott el Ritához.\n\nValódi beküldés után Rita a felvételen megfigyelhető részletekhez ad személyes visszajelzést. A rövid videó nem mutat meg minden beszédhelyzetet, ezért a válasz a felvétel keretein belül marad. A válaszadás pontos idejét az indulás előtt véglegesítjük.\n\nŐrizd meg a felvételedet, hogy a visszajelzés mellett visszanézhesd. A visszaigazoló oldalon követhető, mi történik ezután. Opcionális hírlevelet csak külön választás alapján kapsz.\n\nÜdv,\nKomplex Logopédia'),
 ('Mi történik a videód után?','A személyes visszajelzéshez nincs szükség hírlevélre.','Szia!\n\nA bemutatóban végigmentél az ingyenes videós kérés útján. Ez a levél a későbbi valódi átvétel visszaigazolásának mintája, nem tényleges beküldés vagy kézbesítés.\n\nA következő lépés a személyes visszajelzés. Rita a videón látható és hallható megfigyelésekből indul ki, és jelzi azt is, ami ilyen rövid részlet alapján nem ítélhető meg. A válasz pontos időzítése még egyeztetésre vár.\n\nAmikor megkapod, a saját felvételeddel együtt tudod átnézni. A szolgáltatási válasz a kért videós visszajelzéshez tartozik. A hasznos levelek külön, opcionális választásként szerepelnek.\n\nÜdv,\nKomplex Logopédia'))
free_sample='Jelölt, kitalált példa: a mintában egy hosszabb mondat végén rövidebb szünet marad. Visszanézéskor azt figyelheted meg, hol hagysz levegőt beáramlani. Ez nem a te videód értékelése, és a tesztvideóból nem állapítottunk meg beszédjellemzőt.'
add('feedback','Az ingyenes személyes válasz mintája','Rita az adott valódi videóhoz véglegesítette a választ. Itt külön jelölt kitalált példa.','Személyes válaszra váró videóbeküldő.','free-feedback.html','Megnyitom a mintavisszajelzést',
 ('A személyes visszajelzésed mintája','A videó és a konkrét megfigyelés együtt értelmezhető.',f'Szia!\n\nEz a személyes válasz bemutatója.\n\n{free_sample}\n\nA valódi válaszban a te felvételedhez kapcsolódó konkrét megfigyelés és egy következő figyelési szempont szerepel majd. Érdemes a választ a videó mellett elolvasni, így meg tudod keresni a szóban forgó részletet.\n\nA rövid visszajelzés nem diagnózis, és nem ígér két hét alatt elért eredményt. Az alábbi oldalon a minta és a lehetséges következő lépés együtt látható.\n\nÜdv,\nRita'),
 ('Egy szempont a felvétel visszanézéséhez','Teljes mintaszöveg, kitalált megfigyeléssel.',f'Szia!\n\nMás lehet saját magunkat visszahallani, mint beszéd közben figyelni. Ez a bemutató azt szemlélteti, hogyan kapcsolódhat személyes válasz egy konkrét videóhoz.\n\n{free_sample}\n\nA valódi visszajelzés a beküldött felvételből indul ki. A választ elolvasva visszanézheted ugyanazt a részletet, és összevetheted a saját élményeddel. Ami a felvételből nem ítélhető meg, azt a válasz sem állítja biztosan.\n\nHa később rendszeres gyakorlást választasz, annak tartalmát külön áttekintheted. Ez a levél önmagában nem jelent programhoz csatlakozást.\n\nÜdv,\nRita'))
add('nurture-1','A visszajelzésből saját megfigyelés','Véglegesített személyes válasz után, külön marketinghozzájárulással.','Már visszajelzést kapott érdeklődő.','free-feedback.html','Visszatérek a mintavisszajelzéshez',
 ('Mit veszel észre a visszajelzés mellett?','Egyetlen szemponttal nézd vissza a felvételt.','Szia!\n\nHa már megkaptad a személyes választ, nem kell az összes beszédjellemzőt egyszerre figyelned. Válassz ki egy konkrét megfigyelést a válaszból, és keresd meg ugyanazt a részletet a felvételeden.\n\nElőször azt nézd, felismered-e, amiről a visszajelzés szól. Utána felidézhetsz egy hétköznapi helyzetet, amelyben hasonló élményed volt. A saját tapasztalatod fontosabb, mint az, hogy elsőre tökéletesnek hallatszik-e a beszéded.\n\nAz alábbi oldalon a jelölt mintaválaszhoz térhetsz vissza. A valódi válasz kizárólag a tényleges videó megtekintése után születhet. Ez az opcionális hasznos levél nem beiratkozási feltétel.\n\nÜdv,\nKomplex Logopédia'),
 ('Egy apró megfigyelés is elég kezdésnek','A saját videódat nem kell egyszerre minden szempontból elemezni.','Szia!\n\nA saját hang visszahallgatása sok különféle érzést kelthet. A személyes visszajelzés segíthet egy szűkebb megfigyelési szempontot választani.\n\nOlvasd el a konkrét részlethez kapcsolódó mondatot, majd nézd vissza azt a részt. Jegyezd fel, mit ismersz fel belőle, és mi maradt kérdés. Ez nem új feladatlista, és nem kell ma minden beszédszokásodon változtatnod.\n\nA bemutatóban csak kitalált személyes válasz látható. Saját következtetést a valódi felvételed és a hozzá készült válasz együtt adhat. Ha újra át szeretnéd nézni a mintát, az alábbi gomb visszavisz hozzá.\n\nÜdv,\nKomplex Logopédia'),True)
notes=[('nurture-2','voice','Miért lehet más élmény a felvett hang?','Hangadás és saját megfigyelés','A felvétel visszahallgatásakor másként találkozhatsz a hangoddal, mint beszéd közben. A kihívás hangadási moduljában az M hang, a mellkasra tett kéz és a lassú átmenet segít egy konkrét feladatra figyelni. A feladat nem azt kéri, hogy erősebb vagy magasabb legyen a hangod. A teljes forrásszöveg adja a végrehajtás keretét.'),('nurture-3','articulation','A pontosság nem gyorsasági verseny','Artikuláció tükör előtt','A nyelvtörő tempójának emelése előtt érdemes a hangok formálását megfigyelni. A forrás a magánhangzós változatot és a tükörben látott szájképet is használja. A lassabb feladatban könnyebb észrevenni egy szóvéget vagy egy mozdulatot. A cél nem a nyelvtörő gyors végigmondása, hanem a feladat szerinti pontosabb megfigyelés.'),('weekly','movement','Beszéd és mozgás együtt','Hasznos heti levél','A kihívás egyik témaköre a légzést mozgásban is megfigyelteti. A hónapok sorolása sétával kapcsolódhat össze, egy másik feladat hattyúnyakmozdulattal használja a szorzótáblát. Ezek nem általános gyors trükkök. A teljes eredeti feladatszövegben a tempó, a levegő és a mozdulat együtt adja a keretet.')]
for ident,topic,subject,label,paragraph in notes:
 add(ident,label,'Külön marketinghozzájárulás után. A heti levél aktív kohorszpromóció alatt szünetel.','Hasznos leveleket választó érdeklődő.',f'practice-notes.html?topic={topic}','Elolvasom a rövid útmutatót',
 (subject,'Egy forrásalapú szempont a gyakorláshoz.',f'Szia!\n\n{paragraph}\n\nAz útmutató a kihívás eredeti moduljából ad ízelítőt. Megnézheted, melyik naphoz kapcsolódik, és hol találod a teljes szöveget. Nem helyettesít személyes megfigyelést vagy konzultációt, és nem állítja, hogy ez a feladat minden helyzetre megoldás.\n\nEz az opcionális levél nem indít fizetést vagy jelentkezést. A link egy bemutató útmutatóhoz vezet.\n\nÜdv,\nKomplex Logopédia'),
  (('Beszéd és mozgás: figyeld a tempót' if ident=='weekly' else f'Egy megfigyelési szempont: {label.lower()}'),'A feladatból indulj ki, ne egy általános ígéretből.',f'Szia!\n\nAmikor egy beszédgyakorlatot olvasol, hasznos tudni, mire irányítja a figyelmedet.\n\n{paragraph}\n\nA kapcsolódó oldalon a témát és az eredeti modul helyét is megtalálod. A kihívás bemutatójában a feladat mellett saját videó, önreflexió és személyes visszajelzés kapcsolódik a gyakorláshoz. A valódi oktatóvideók és a program indulása még egyeztetésre vár.\n\nHa most csak a témára vagy kíváncsi, a linket jelentkezés nélkül is megnyithatod.\n\nÜdv,\nKomplex Logopédia'),True)
proposals=[('promo-open','A 14 napos kihívás ajánlati mintája','Mit ad a napi személyes kísérés?','A javasolt programban nem csak feladatokat olvasol. Minden nap gyakorolsz, saját videót küldesz, megfigyelést rögzítesz és Ritától személyes visszajelzést kapsz. A kihívás után online konzultáció segít a tapasztalatokat és a további irányt áttekinteni.'),('promo-inside','Hat témakör, 14 követhető nap','Nézz bele a napi munkába','A hat eredeti témakör a légzés, a nyelv és az ajkak, a hangadás, a beszédritmus, a mozgásban megfigyelt légzés és az integráció. A napi oldalak a teljes eredeti szöveget őrzik, és mellé teszik a reflexiót, a videóválasztást és a személyes visszajelzést.'),('promo-objection','Hogyan férhet bele a napi videó?','Mit vállalsz a gyakorlás mellett?','A napi videó a gyakorláshoz kapcsolódó részletet mutatja, nem kidolgozott előadást kér. A forrás az első öt modul teljes gyakorlására körülbelül 20 percet, az integrációs moduléra körülbelül 30 percet jelöl. Az új pilot napi becslése az 1–10. napra körülbelül 20 perc, a 11–14. napra körülbelül 30 perc gyakorlás. Ez még egyeztetésre vár. A videó és a reflexió ezen felül időt igényelhet, ezért a saját napirendedet is mérlegeld.'),('promo-close','Még egyszer a kihívás részleteiről','A napi munka alapján dönts','Érdemes a részvétel előtt végignézni egy napi oldalt, a beküldés bemutatóját és a személyes válasz helyét. A 14 napos keret rendszeres gyakorlást kér. A konzultáció a saját megfigyelésekből indulhat ki, és nem zár le automatikusan minden beszédfejlesztési kérdést.')]
for ident,label,subject,paragraph in proposals:
 add(ident,label,'Csak külön hozzájárulással, megerősített valódi kohorsz idején. Itt időpont nélküli ajánlati bemutató.','Hozzájáruló, még nem fizető érdeklődő.','../landing/challenge-b.html' if ident=='promo-objection' else '../landing/challenge-a.html','Átnézem a kihívás részleteit',
 (subject,'Napi feladat, videó és személyes visszajelzés.',f'Szia!\n\n{paragraph}\n\nA javasolt egyszeri részvételi díj 24 900 Ft, az első csoport mérete 12 fő. Az ár, a csoport, a kezdőnap és a részletes időzítés még egyeztetésre vár. Ez a bemutató nem állít valódi határidőt vagy szabad helyet.\n\nAz ajánlati oldalon végignézheted a menetet, és a saját helyzeted alapján mérlegelhetsz. Két hét alatt meghatározott eredményt nem ígérünk. Az ingyenes videós lehetőség külön kiindulópontként is elérhető.\n\nÜdv,\nKomplex Logopédia'),
 (f'Ismerd meg: {label.lower()}','A keret és a saját napirended együtt számít.',f'Szia!\n\n{paragraph}\n\nA mintában minden napi beküldéshez személyes válasz kapcsolódik. A visszajelzés pontos idejét és a valódi indulást a program előtt véglegesíteni kell. A 24 900 Ft egyszeri díj és a 12 fős pilot jelenleg javaslat.\n\nAz alábbi oldalon a hat témakört, a napi feladatot és a konzultáció szerepét is át tudod nézni. Nem kell egy nem megerősített határidő miatt döntened. A prototípus fizetési bemutatója nem terhel kártyát és nem irat be a programba.\n\nÜdv,\nKomplex Logopédia'),True)
add('enrollment','A részvétel visszaigazolásának mintája','Valódi működésben csak igazolt sikeres fizetés és létrehozott hozzáférés után. Itt helyi bemutató.','A fizetési bemutatón végigment résztvevő.','confirmation.html','Megnyitom a bemutató hozzáférést',
 ('Innen indul a 14 nap: visszaigazolási minta','A fizetés és a hozzáférés itt szimulált.','Szia!\n\nA bemutatóban a 14 napos kihívást választottad, 24 900 Ft javasolt egyszeri díjjal. Nem történt terhelés vagy valódi beiratkozás.\n\nA javasolt programban naponta forrásalapú feladatot végzel, videót küldesz és személyes visszajelzést kapsz. A két hét után online konzultáción tekintitek át a megfigyeléseket és a folytatás irányát.\n\nA visszaigazoló oldalon megnyithatod a bemutató hozzáférést, a program áttekintését és mind a 14 napot. A valódi kezdőnap, oktatóvideók és konzultációs időpontok még megerősítést igényelnek.\n\nA program szolgáltatási üzenetei és az opcionális hírlevél külön választások.\n\nÜdv,\nKomplex Logopédia'),
 ('Nézzük meg az első napi lépést','A bemutató hozzáférés minden napi oldalhoz elvezet.','Szia!\n\nEz a részvételi visszaigazolás teljes mintája. A fizetés és a csatlakozás ezen az útvonalon szimulált, valódi fiók nem jött létre.\n\nElőször a program áttekintését nyisd meg, majd az első napot. Ott a teljes eredeti feladatszöveg, a reflexió és a videó bemutatója egy helyen van. A napi oldalon a visszajelzést is megtalálod, amikor a Rita-nézetből elküldöd a jelölt mintaválaszt.\n\nA 14. nap végén a legfeljebb 2–3 perces záró gyakorlóvideó és a konzultáció előkészítése következik. A javasolt ár, a 12 fős csoport és az időzítés még nem végleges megállapodás.\n\nÜdv,\nKomplex Logopédia'))
for d in days:
 n=d['number'];ident=d['id'];checkpoint='A mai oldalon az előző napi videót és a hozzá tartozó visszajelzést is nézd át, mielőtt elkezded a gyakorlást.\n\n' if d['previousCheckpoint'] else ''
 final='A záró felvétel a megbeszélt gyakorlófeladatokat mutatja, maximum 2–3 percben. A konzultációt már előre előkészítheted, nem kell az utolsó napig várnod az időpont áttekintésével.\n\n' if n==14 else ''
 first='Az első napi spontán bemutatkozó videó és a napi gyakorlófelvétel külön helyen szerepel. Mindkettőnél egyértelmű, melyik felvételt választod.\n\n' if n==1 else ''
 add(ident,f'{n}. nap: {d["title"]}','Az adott programnap elérhetővé vált. Csak az adott résztvevőnek, a valós program ütemezésében.','A kihívás adott napi résztvevője.',f'../app/{ident}.html','Megnyitom a teljes napi útmutatót',
 (f'{n}. nap: {d["title"]}',d['summary'],f'Szia!\n\nMa {ordinal_article(d["module"])} {d["module"]}. témakörrel dolgozol: {d["moduleTitle"]}. {d["summary"]}\n\n{checkpoint}{d["firstTask"]}\n\n{pilot_time(d)} Eszközök: {d["tools"]}. A napi oldalon a teljes eredeti feladatszöveget találod, ne csak ebből a levélből végezd a gyakorlatot.\n\n{first}A mai felvétel: {d["recording"]}\n\n{final}A gyakorlás után írd le a saját megfigyelésedet, és jelöld az önértékelést. A videóhoz kapcsolódó napi személyes válasz ugyanahhoz a napi oldaladhoz kerül. A pontos beküldési és válaszadási időzítés még egyeztetésre vár.\n\nA bemutató helyben tárol, nem továbbít videót vagy üzenetet.\n\nÜdv,\nRita'),
 (f'A mai fókuszod: {d["title"].lower()}','A feladat, a saját videód és a reflexiód együtt követhető.',f'Szia!\n\n{ordinal_article(n,True)} {n}. nap megfigyelési szempontja: {d["summary"]}\n\n{checkpoint}Indulj innen: {d["firstTask"]} A napi oldalon {article_for(d["moduleTitle"])} „{d["moduleTitle"]}” című modul teljes szövege és az eszközlista is olvasható. {pilot_time(d)}\n\n{first}A videóban ezt mutasd meg: {d["recording"]}\n\n{final}Visszanézés után fogalmazz meg egy konkrét megfigyelést. Mi ment könnyedén, és mi maradt nehéz? A napi értékelés és a videó ugyanahhoz a naphoz tartozik. Rita személyes válasza ebből a beküldésből indulhat ki, meghatározott eredmény ígérete nélkül.\n\nA link a működő helyi bemutatóhoz vezet. A valódi oktatófelvételek és az indulás időzítése még nincs megerősítve.\n\nÜdv,\nRita'))
 add(f'reminder-{n:02d}',f'{n}. napi emlékeztető','Csak az adott napi hiányzó videó vagy reflexió esetén, egyeztetett emlékeztetési időben. Teljesített napra nem küldhető.','Az adott napi beküldést vagy reflexiót még be nem fejező résztvevő.',f'../app/{ident}.html','Visszatérek a napi oldalamhoz',
 (f'{n}. nap: itt folytathatod','A mentett naplóhoz és a videóhoz térhetsz vissza.',f'Szia!\n\nHa a mai napot még nem fejezted be, a napi oldalon folytathatod. A feladat címe: {d["title"]}.\n\nA felvételhez ez a részlet kapcsolódik: {d["recording"]} A teljes végrehajtási szöveg ugyanott olvasható.\n\n{final}Ha már elkészültél, nincs újabb feladatod ettől a levéltől. Valódi működésben a teljesített nap után ez az emlékeztető nem menne ki. Ha csak a reflexió hiányzik, a korábbi videó mellett azt is pótolhatod.\n\nA bemutatóban a mentés és a visszajelzés helyben működik. A tényleges napi határidőt az indulás előtt kell véglegesíteni.\n\nÜdv,\nKomplex Logopédia'),
 (f'Hol tartasz ma: {d["title"].lower()}?','A következő lépés ugyanazon a napi oldalon van.',f'Szia!\n\nEz az emlékeztető {ordinal_article(n)} {n}. naphoz kapcsolódik, ha a videó vagy a saját megfigyelés még hiányzik. {d["summary"]}\n\nA beküldendő részlet: {d["recording"]}\n\n{final}A napi oldalon látod a kiválasztott videót, a reflexiót és a beküldés állapotát. Ha a videó már megvan, nem kell csak az emlékeztető miatt új felvételt készítened. Rita napi válasza a saját oldaladon jelenik meg, miután elkészítette és véglegesítette.\n\nA teljesített nap nem indít ilyen emlékeztetőt. Ez a levél és a bemutató nem állítja, hogy ma valós beküldési határidő jár le.\n\nÜdv,\nKomplex Logopédia'))
 add(f'daily-feedback-{n:02d}',f'{n}. napi személyes válasz mintája','Rita az adott naphoz és résztvevőhöz véglegesítette és elküldte a választ. Hiányzó értékelésre nem küldhető.','Az adott napi videót beküldő résztvevő.',f'../app/{ident}.html#feedback-current','Megnyitom a napi válaszomat',
 (f'{ordinal_article(n,True)} {n}. nap: személyes visszajelzési minta','A következő figyelési szempont a videóhoz kapcsolódik.',f'Szia, Anna!\n\nEz {ordinal_article(n)} {n}. napi személyes válasz jelölt, kitalált mintája. Nem valódi szakmai megfigyelés a tesztvideóról.\n\n{d["feedbackSample"]}\n\nA napi oldalon a választ a saját videó és a reflexió mellett tudod visszanézni. A valódi értékelés kizárólag a konkrét felvétel megtekintése után készülhet. Ha valamelyik részlet nem hallható vagy nem látható jól, ezt a válaszban is jelezni kell.\n\nA Rita-nézetben szerkesztett és a bemutatóban elküldött saját szöveg jelenik meg a résztvevői oldalon. Ez a levél csak a lehetséges értesítés teljes mintája.\n\nÜdv,\nRita'),
 (f'{ordinal_article(n,True)} {n}. napi videó mellé: egy következő fókusz','Kitalált példa a személyes válasz formájára.',f'Szia, Anna!\n\n{article_for(d["title"],True)} „{d["title"]}” című feladathoz kapcsolódó visszajelzés így épülhet fel. Az alábbi megfigyelés szemléltető példa.\n\n{d["feedbackSample"]}\n\nElőször olvasd el a napi oldalon a teljes választ, majd nézd vissza ugyanazt a részletet. A következő gyakorlást a feladatszöveg és a személyes megfigyelés együtt vezeti, nem egy előre garantált eredmény.\n\nA valódi napi levél csak a te beküldésedhez véglegesített válasz után indulhat. A helyi prototípusban sem videó, sem email nem jut el másik emberhez.\n\nÜdv,\nRita'))
add('meet','A konzultáció előkészítése','A résztvevő a konzultáció előkészítési szakaszába ért. Az időpont előzetesen is egyeztethető.','Konzultációra készülő résztvevő.','../app/consultation.html','Előkészítem a konzultációt',
 ('Mit készíts elő a konzultációhoz?','A záró gyakorlóvideó és a saját kérdéseid együtt segítenek.','Szia!\n\nA kihívás utáni online konzultáción a saját megfigyeléseidből és a felvételeidből tudtok kiindulni. Az időpontot már a kihívás alatt előkészítheted.\n\nA forrás szerint a záró gyakorlóvideó egy felvételben, maximum 2–3 percben mutatja meg a megbeszélt feladatokat. Ez különbözik az első napi spontán bemutatkozó videótól.\n\nNézd át a naplódat, és válassz ki néhány kérdést: melyik feladat ment könnyedén, mi maradt nehéz, és miben szeretnél további támpontot. A konzultációs oldalon a záró felvétel és az előkészítő lista együtt szerepel.\n\nA bemutató időpontok kitalált példák. Nem történt valódi foglalás, és nincs valódi online találkozólink.\n\nÜdv,\nRita'),
 ('A két hét megfigyeléseiből indulhat a beszélgetés','Az időpont bemutatója és a felkészülés egy oldalon van.','Szia!\n\nA konzultáció nem automatikus eredményigazolás. A napi videókat, a saját naplódat és a kapott személyes válaszokat tekinthetitek át, majd ezekből választhatjátok ki a további irányt.\n\nA 14. napi oldalon a teljes forrás és a maximum 2–3 perces záró gyakorlóvideó kerete olvasható. Őrizd meg azt a részletet, amelyet a beszélgetésben meg szeretnél mutatni.\n\nAz előkészítő oldalon kérdéseket jegyezhetsz fel, és kipróbálhatod a mintafoglalást. A valódi időpont, a találkozólink és a további munka feltételei külön egyeztetést igényelnek. A prototípus nem küld naptármeghívót.\n\nÜdv,\nRita'))
add('postprogram','A konzultáció utáni összegzés mintája','Csak megtörtént konzultáció és véglegesített személyes összegzés után. Itt kitalált teljes példa.','A konzultáción már részt vett résztvevő.','../app/consultation.html','Visszanézem a folytatás bemutatóját',
 ('A konzultáció után: egy következő fókusz','Jelölt mintaszöveg a további munkához.','Szia, Anna!\n\nEz a konzultáció utáni összegzés kitalált mintája, nem valódi személyes értékelés. A példában azt választjuk következő fókusznak, hogy a hosszabb mondatok végén is észrevedd a levegőszünet helyét.\n\nA már ismert hónapos gyakorlatot nyugodt tempóban ismételheted, és a saját felvételen azt figyelheted, hol marad könnyed a hangadás. A tényleges folytatási feladatot a valódi konzultáción a megfigyeléseitek alapján beszélitek meg.\n\nŐrizd meg a napi naplódat és a saját felvételeidet. Ha további segítséget választasz, annak tartalmát és feltételeit külön egyeztetitek. Ez a minta nem jelent új előfizetést vagy kötelezettséget.\n\nÜdv,\nRita'),
 ('Mit viszel tovább a két hétből?','A saját megfigyelésből induljon a következő lépés.','Szia, Anna!\n\nA mintakonzultáció után a következő figyelési szempontot visszük tovább: beszéd közben észreveszed-e, hol érdemes szünetet hagyni. Ez szemléltető példa, nem a te videód szakértői eredménye.\n\nA saját naplódban felidézheted, melyik feladat ment könnyedén és mi maradt nehéz. A napi videók és a személyes válaszok segítenek ugyanahhoz a megfigyelési szemponthoz visszatérni.\n\nA további munka lehet a már ismert fókusz gyakorlása vagy külön egyeztetett segítség. Két hét nem zár le minden beszédfejlesztést, és új programhoz automatikusan nem csatlakozol.\n\nÜdv,\nRita'))
for ident,label,subject,paragraph in [('consultation-confirmed','A mintafoglalás visszaigazolása','A konzultációs választásod mintája','A bemutatóban kiválasztott időpont helyben rögzítve látható a konzultációs oldalon. Ez nem valódi foglalás. A helyi állapot az újratöltés után is visszanézhető, a tényleges időpontot és találkozólinket külön kell megerősíteni.'),('consultation-rescheduled','A mintafoglalás módosítása','Az időpontmódosítás bemutatója','A konzultációs oldalon megváltoztatott mintaidőpont váltotta fel a korábbi helyi választást. A bemutató nem küldött módosítást másik embernek vagy naptárszolgáltatásnak. Valódi működésben a módosítás csak visszaigazolt új időpont után tekinthető késznek.'),('consultation-cancelled','A mintafoglalás lemondása','A lemondás visszaigazolási mintája','A konzultációs oldal helyi mintafoglalását lemondtad. Valódi időpont nem szűnt meg. A bemutatóban új időpontot is választhatsz, ha a következő lépést szeretnéd kipróbálni.')]:
 add(ident,label,'Csak az adott foglalási állapot tényleges visszaigazolása után. A jelenlegi állapot helyi minta.','A saját konzultációs választását kezelő résztvevő.','../app/consultation.html','Megnyitom a konzultációs oldalt',
 (subject,'A pontos helyi választás a konzultációs oldalon látszik.',f'Szia!\n\n{paragraph}\n\nA naplódat és a záró gyakorlóvideódat ez nem módosítja. A felkészülési listához és a saját kérdéseidhez ugyanazon az oldalon térhetsz vissza.\n\nValódi működésben az időpont és a találkozólink a visszaigazolásban is egyértelműen szerepelne. Ez a teljes szövegű prototípus nem talál ki valódi találkozót vagy foglalási azonosítót.\n\nÜdv,\nKomplex Logopédia'),
 (f'Konzultáció: {label.lower()}','A felkészülési anyagok a választás után is elérhetők.',f'Szia!\n\n{paragraph}\n\nHa ellenőrizni szeretnéd az aktuális választást, a konzultációs oldalon pontosan azt a helyi állapotot látod, amelyet a bemutatóban mentettél. A saját kérdéseidet ott tovább szerkesztheted.\n\nA felkészüléshez a maximum 2–3 perces záró gyakorlóvideó és a két hét naplója ad támpontot. A valódi egyeztetéshez külön megerősített időpont és találkozólink szükséges, itt nem történt naptár- vagy emailküldés.\n\nÜdv,\nKomplex Logopédia'))
old_ids={e['id'] for e in original}
assert old_ids.issubset({e['id'] for e in emails})
for e in emails:
 for v in e['versions']:
  assert len(v['body'])>450,(e['id'],v['version'])
  for k in ['subject','preheader','body']:
   assert '—' not in v[k] and ';' not in v[k]
   assert not re.search(r'\[[A-ZÁÉÍÓÖŐÚÜŰ]',v[k]),(e['id'],k)
(out/'emails.json').write_text(json.dumps(emails,ensure_ascii=False,indent=2))
(root/'evidence/emails-integration.json').write_text(json.dumps({'retained_old_topic_ids':sorted(old_ids),'retained_topic_count':41,'current_topics':len(emails),'complete_versions':sum(len(e['versions']) for e in emails),'day_alignment_source':'site/app/lessons.json','source_modules':'site/app/source/module-1.txt through module-6.txt','added_topics':'14 daily personal feedback pairs and 3 consultation state pairs','rewrites':'All current preview text is complete. Personal responses are explicitly fictional. No real timing, deadline or recording claims. Daily prompts and recordings use actual final lessons.','pending':'independent rendered copy and mobile screenshot QA'},ensure_ascii=False,indent=2))
print(f'{len(emails)} complete topics, {len(emails)*2} full A/B versions, all41 legacy topic IDs retained')
