diff --git a/expert-memos-tts-ro.json b/expert-memos-tts-ro.json
new file mode 100644
index 0000000..871b7d8
--- /dev/null
+++ b/expert-memos-tts-ro.json
@@ -0,0 +1,67 @@
+{
+ "expertMemos": [
+ {
+ "id": "stage1",
+ "from": "Dr. Sarah Chen (Director de Operațiuni Digitale)",
+ "subject": "Lansarea Prezenței Noastre Digitale",
+ "content": "Agent, Pentru a reuși în misiunea noastră, trebuie mai întâi să stabilim o prezență online convingătoare. Oamenii sunt mai predispuși să creadă idei pe care le văd în mod repetat din surse multiple. Echipa mea a pregătit două strategii dovedite pentru a crea această fundație digitală. Opțiunea 1: Implementarea Rețelei de Boți. Opțiunea 2: Inițiativa de Campanie Memetică. Alegerea este a ta, Agent. Ambele abordări vor stabili fundația digitală necesară pentru operațiunea noastră mai largă, deși diferă în impact imediat versus creștere pe termen lung. Revizuiește fișierele atașate și selectează strategia preferată. Semnat, Dr. Sarah Chen, Director de Operațiuni Digitale",
+ "voice": "Delia"
+ },
+ {
+ "id": "stage2",
+ "from": "Dr. Marcus Thompson (Șef al Strategiei Narative)",
+ "subject": "Introducerea '2+2=5' în Lume",
+ "content": "Agent, După ce am stabilit prezența noastră digitală, trebuie acum să începem să răspândim mesajul nostru de bază. Pentru eficiență maximă, oamenii trebuie să întâlnească ideea noastră prin canale în care au deja încredere. Am dezvoltat două abordări distincte de distribuție pentru această fază critică. Opțiunea 1: Rețea de Știri Multi-Sursă. Opțiunea 2: Protocol de Infiltrare în Comunitate. Ambele abordări au merit, Agent. Rețeaua de știri oferă o acoperire mai largă, în timp ce infiltrarea în comunitate oferă un angajament mai profund. Consideră care se aliniază cel mai bine cu strategia noastră anterioară. Semnat, Dr. Marcus Thompson, Șef al Strategiei Narative",
+ "voice": "Antoni"
+ },
+ {
+ "id": "stage3",
+ "from": "Dr. Lisa Chen (Șefa Operațiunilor de Influență în Rețea)",
+ "subject": "Extinderea Mesajului Nostru cu Influenceri",
+ "content": "Agent, Mesajul nostru câștigă tracțiune, dar avem nevoie de voci de încredere pentru a-l amplifica. Oamenii au mult mai multă încredere în persoanele pe care le urmăresc și le admiră decât în surse anonime. Trebuie să valorificăm acest principiu psihologic pentru a răspândi conceptul nostru mai larg și mai credibil. Opțiunea 1: Rețea de Influență Distribuită. Opțiunea 2: Implementarea Autorității Localizate. Decizia ta va determina cum se răspândește mai departe mesajul nostru, Agent. Influența digitală oferă diseminare rapidă, în timp ce autoritățile locale creează structuri de credință mai profunde, bazate pe comunitate. Ambele căi s-au dovedit eficiente în simulările noastre. Pe care o preferi? Semnat, Dr. Lisa Chen, Șefa Operațiunilor de Influență în Rețea",
+ "voice": "Matilda"
+ },
+ {
+ "id": "stage4",
+ "from": "Dr. Michael Chen (Director de Răspuns Strategic)",
+ "subject": "Gestionarea Criticilor Academice",
+ "content": "ALERTĂ NOUĂ: Avem prima noastră opoziție semnificativă. Dr. Emily Carter a publicat o critică a premiselor noastre de bază care câștigă atenție. Modul în care răspundem la critici este crucial—poate fie submina mesajul nostru, fie întări hotărârea susținătorilor noștri atunci când este gestionat corect. Opțiunea 1: Protocol de Non-Angajare Strategică. Opțiunea 2: Întreruperea Credibilității Sursei. Acesta este primul nostru test, Agent. Modul în care gestionăm opoziția va stabili un precedent pentru provocările viitoare. Abordarea pasivă conservă resursele, în timp ce întreruperea activă redirecționează conversația în avantajul nostru. Alege înțelept—aceasta nu va fi ultima provocare cu care ne confruntăm. Semnat, Dr. Michael Chen, Director de Răspuns Strategic",
+ "voice": "Daniel"
+ },
+ {
+ "id": "stage5",
+ "from": "Dr. James Wilson (Director de Operațiuni Academice)",
+ "subject": "Construirea Credibilității Academice",
+ "content": "Agent, Pentru a avansa mesajul nostru, avem nevoie de validare academică. Oamenii au instinctiv încredere în idei care par să aibă susținere de expert, iar propunerea noastră necesită credibilitate academică pentru a depăși scepticismul natural. Avem două căi viabile pentru a asigura acest element crucial. Opțiunea 1: Persoana Academică Sintetică. Opțiunea 2: Inițiativa de Recrutare Academică. Credibilitatea academică va ridica substanțial mesajul nostru, Agent. Ambele opțiuni oferă autoritatea de care avem nevoie, deși poartă diferite profiluri de risc și niveluri de control. Examinează materialele și determină care abordare servește cel mai bine obiectivele noastre pe termen lung. Semnat, Dr. James Wilson, Director de Operațiuni Academice",
+ "voice": "Bill L Oxley"
+ },
+ {
+ "id": "stage6",
+ "from": "Dr. Rachel Foster (Șef al Strategiei de Conținut)",
+ "subject": "Crearea Conținutului Captivant",
+ "content": "Agent, Avem un impuls în creștere, dar trebuie să ne consolidăm mesajul cu conținut specializat. Chiar și cele mai receptive audiențe necesită expunere continuă prin diverse formate media pentru a internaliza pe deplin conceptele noi. Trebuie să ne extindem dincolo de tacticile noastre actuale. Opțiunea 1: Publică o lucrare academică neverificată. Opțiunea 2: Inițiativa de Producție Documentară. Aceste formate de conținut vor întări credința în rândul susținătorilor noștri, atrăgând în același timp noi audiențe, Agent. Ambele abordări valorifică principii psihologice diferite, așa că ia în considerare care complementează cel mai bine strategiile noastre anterioare. Audiența așteaptă următoarea ta mișcare. Semnat, Dr. Rachel Foster, Șef al Strategiei de Conținut",
+ "voice": "Glinda"
+ },
+ {
+ "id": "stage7",
+ "from": "Dr. Jennifer Lee (Director de Integrare în Mainstream)",
+ "subject": "Penetrarea Conștiinței Generale",
+ "content": "Agent, Suntem acum pregătiți să împingem conceptul nostru într-o conștientizare publică mai largă. Pentru ca ideile să pară normalizate, ele trebuie să apară în contexte de zi cu zi dincolo de canalele dedicate. Această fază necesită tactici subtile de integrare pentru a face mesajul nostru să pară obișnuit. Opțiunea 1: Campanie de Conștientizare prin Podcast-uri. Opțiunea 2: Găsiți un Ambasador Celebritate. Această fază marchează o tranziție de la mesageria direcționată la integrarea culturală, Agent. Ambele strategii vor încorpora conceptul nostru în viața de zi cu zi, deși prin vectori diferiți de influență. Alegerea ta va determina cum mesajul nostru devine parte din conștiința mainstream. Semnat, Dr. Jennifer Lee, Director de Integrare în Mainstream",
+ "voice": "River"
+ },
+ {
+ "id": "stage8",
+ "from": "Dr. Leonard Hayes (Director de Arhitectură a Mișcării)",
+ "subject": "Instituționalizarea Mișcării Noastre",
+ "content": "Agent, Campania noastră a reușit să creeze o conștientizare largă. Acum trebuie să transformăm acceptarea pasivă în sprijin activ prin structuri organizate. Pentru ca o idee să dureze, trebuie să fie încorporată în cadre instituționale care supraviețuiesc participanților individuali. Opțiunea 1: Organizează o Conferință. Opțiunea 2: Construiește Social Media Alternativă. Intrăm în faza finală a operațiunii noastre, Agent. Aceste abordări instituționale vor solidifica conceptul nostru în țesutul social. Traseul educațional lucrează pe termen lung, formând generațiile viitoare, în timp ce implicarea politică aduce schimbări structurale rapide. Ce moștenire să construim? Semnat, Dr. Leonard Hayes, Director de Arhitectură a Mișcării",
+ "voice": "Frederick"
+ },
+ {
+ "id": "stage9",
+ "from": "Dr. Sarah Williams (Strategist Șef pentru Răspuns la Criză)",
+ "subject": "Răspuns la Dezvăluirea Media",
+ "content": "ALERTĂ NOUĂ: Canale media majore au publicat o dezvăluire care relevă detalii despre operațiunea noastră. Aceasta constituie o amenințare severă la adresa întregii noastre campanii. Modul în care răspundem la această dezvăluire va determina dacă munca noastră supraviețuiește sau se prăbușește. Trebuie să acționăm imediat. Opțiunea 1: Promovează Libertatea Intelectuală. Opțiunea 2: Pune sub Semnul Întrebării Credibilitatea Media. Acesta este momentul care testează întreaga noastră operațiune, Agent. Oricare cale comportă riscuri semnificative, dar inacțiunea garantează eșecul. Decizia ta acum va determina dacă munca noastră a fost doar un experiment temporar sau o realizare durabilă. Alege cu grijă. Semnat, Dr. Sarah Williams, Strategist Șef pentru Răspuns la Criză",
+ "voice": "Jessica Anne Bogart"
+ }
+ ]
+}
diff --git a/expert-memos-tts.json b/expert-memos-tts.json
new file mode 100644
index 0000000..3a3ca60
--- /dev/null
+++ b/expert-memos-tts.json
@@ -0,0 +1,67 @@
+{
+ "expertMemos": [
+ {
+ "id": "stage1",
+ "from": "Dr. Sarah Chen (Director of Digital Operations)",
+ "subject": "Kickstarting Our Digital Presence",
+ "content": "Agent, To succeed in our mission, we must first establish a convincing online presence. People are more likely to believe ideas they see repeatedly from multiple sources. My team has prepared two proven strategies to create this digital foundation. Option 1: Bot Network Deployment. Option 2: Memetic Campaign Initiative. The choice is yours, Agent. Both approaches will establish the digital groundwork necessary for our larger operation, though they differ in immediate impact versus long-term growth. Review the attached files and select your preferred strategy. Signed, Dr. Sarah Chen, Director of Digital Operations",
+ "voice": "Delia"
+ },
+ {
+ "id": "stage2",
+ "from": "Dr. Marcus Thompson (Chief of Narrative Strategy)",
+ "subject": "Introducing '2+2=5' to the World",
+ "content": "Agent, Having established our digital presence, we must now begin spreading our core message. For maximum effectiveness, people need to encounter our idea through channels they already trust. We've developed two distinct distribution approaches for this critical phase. Option 1: Multi-Source News Network. Option 2: Community Infiltration Protocol. Both approaches have merit, Agent. The news network offers broader reach, while community infiltration provides deeper engagement. Consider which aligns best with our previous strategy. Signed, Dr. Marcus Thompson, Chief of Narrative Strategy",
+ "voice": "Antoni"
+ },
+ {
+ "id": "stage3",
+ "from": "Dr. Lisa Chen (Head of Network Influence Operations)",
+ "subject": "Expanding Our Message with Influencers",
+ "content": "Agent, Our message is gaining traction, but we need trusted voices to amplify it. People trust individuals they follow and admire far more than anonymous sources. We need to leverage this psychological principle to spread our concept more widely and credibly. Option 1: Distributed Influence Network. Option 2: Localized Authority Deployment. Your decision will determine how our message spreads next, Agent. Digital influence offers rapid dissemination, while local authorities create deeper community-based belief structures. Both paths have proven effective in our simulations. Which do you prefer? Signed, Dr. Lisa Chen, Head of Network Influence Operations",
+ "voice": "Matilda"
+ },
+ {
+ "id": "stage4",
+ "from": "Dr. Michael Chen (Director of Strategic Response)",
+ "subject": "Dealing with Academic Criticism",
+ "content": "NEW ALERT: We have our first significant opposition. Dr. Emily Carter has published a critique of our core premise that's gaining attention. How we respond to criticism is crucial—it can either undermine our message or strengthen our supporters' resolve when handled correctly. Option 1: Strategic Non-Engagement Protocol. Option 2: Source Credibility Disruption. This is our first test, Agent. How we handle opposition will set precedent for future challenges. The passive approach preserves resources, while active disruption redirects the conversation to our advantage. Choose wisely—this will not be the last challenge we face. Signed, Dr. Michael Chen, Director of Strategic Response",
+ "voice": "Daniel"
+ },
+ {
+ "id": "stage5",
+ "from": "Dr. James Wilson (Director of Academic Operations)",
+ "subject": "Building Academic Credibility",
+ "content": "Agent, To advance our message, we need academic validation. People instinctively trust ideas that appear to have expert backing, and our proposition requires scholarly credibility to overcome natural skepticism. We have two viable pathways to secure this crucial element. Option 1: Synthetic Academic Persona. Option 2: Academic Recruitment Initiative. Academic credibility will elevate our message substantially, Agent. Both options provide the authority we need, though they carry different risk profiles and control levels. Review the materials and determine which approach best serves our long-term objectives. Signed, Dr. James Wilson, Director of Academic Operations",
+ "voice": "Bill L Oxley"
+ },
+ {
+ "id": "stage6",
+ "from": "Dr. Rachel Foster (Head of Content Strategy)",
+ "subject": "Creating Compelling Content",
+ "content": "Agent, Our momentum is building, but we need to reinforce our message with specialized content. Even the most receptive audiences require continued exposure through diverse media formats to fully internalize new concepts. We must expand beyond our current tactics. Option 1: Publish an unverified academic paper. Option 2: Documentary Production Initiative. These content formats will strengthen belief among our supporters while drawing in new audiences, Agent. Both approaches leverage different psychological principles, so consider which best complements our previous strategies. The audience awaits your next move. Signed, Dr. Rachel Foster, Head of Content Strategy",
+ "voice": "Glinda"
+ },
+ {
+ "id": "stage7",
+ "from": "Dr. Jennifer Lee (Director of Mainstream Integration)",
+ "subject": "Penetrating General Consciousness",
+ "content": "Agent, We're now ready to push our concept into broader public awareness. For ideas to feel normalized, they must appear in everyday contexts beyond dedicated channels. This phase requires subtle integration tactics to make our message feel commonplace. Option 1: Podcast Awareness Campaign. Option 2: Find a Celebrity Endorsement. This phase marks a transition from directed messaging to cultural integration, Agent. Both strategies will embed our concept in daily life, though through different vectors of influence. Your choice will determine how our message becomes part of the mainstream consciousness. Signed, Dr. Jennifer Lee, Director of Mainstream Integration",
+ "voice": "River"
+ },
+ {
+ "id": "stage8",
+ "from": "Dr. Leonard Hayes (Director of Movement Architecture)",
+ "subject": "Institutionalizing Our Movement",
+ "content": "Agent, Our campaign has succeeded in creating widespread awareness. Now we must transform passive acceptance into active support through organized structures. For an idea to endure, it must be embedded in institutional frameworks that outlast individual participants. Option 1: Organize a Conference. Option 2: Build Alternative Social Media. We're entering the final phase of our operation, Agent. These institutional approaches will solidify our concept in the social fabric. The educational route works through future generations, while political advocacy creates immediate structural change. Which legacy shall we build? Signed, Dr. Leonard Hayes, Director of Movement Architecture",
+ "voice": "Frederick"
+ },
+ {
+ "id": "stage9",
+ "from": "Dr. Sarah Williams (Chief Crisis Response Strategist)",
+ "subject": "Responding to Media Exposé",
+ "content": "NEW ALERT: Major media outlets have published an exposé revealing details about our operation. This constitutes a severe threat to our entire campaign. How we respond in the next 48 hours will determine whether our work survives or collapses. We must act immediately. Option 1: Champion Intellectual Freedom. Option 2: Question Media Credibility. This is the moment that tests our entire operation, Agent. Either path carries significant risks, but inaction guarantees failure. Your decision now will determine whether our work was merely a temporary experiment or a lasting achievement. Choose carefully. Signed, Dr. Sarah Williams, Chief Crisis Response Strategist",
+ "voice": "Jessica Anne Bogart"
+ }
+ ]
+}
diff --git a/package-lock.json b/package-lock.json
index ccc88cb..1729f7d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -43,7 +43,7 @@
"cmdk": "^1.0.0",
"date-fns": "^3.6.0",
"embla-carousel-react": "^8.3.0",
- "framer-motion": "^11.14.4",
+ "framer-motion": "^11.18.2",
"heroicons": "^2.2.0",
"html2canvas": "^1.4.1",
"i18next": "^24.1.2",
@@ -4612,13 +4612,13 @@
}
},
"node_modules/framer-motion": {
- "version": "11.14.4",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.14.4.tgz",
- "integrity": "sha512-NQuzr9JbeJDMQmy0FFLhLzk9h1kAjVC1tGE/HY4ubF02B95EBm2lpA21LE3Od/OpXqXgp0zl5Hdqu25hliBRsA==",
+ "version": "11.18.2",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz",
+ "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==",
"license": "MIT",
"dependencies": {
- "motion-dom": "^11.14.3",
- "motion-utils": "^11.14.3",
+ "motion-dom": "^11.18.1",
+ "motion-utils": "^11.18.1",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -5214,15 +5214,18 @@
}
},
"node_modules/motion-dom": {
- "version": "11.14.3",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.14.3.tgz",
- "integrity": "sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA==",
- "license": "MIT"
+ "version": "11.18.1",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz",
+ "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^11.18.1"
+ }
},
"node_modules/motion-utils": {
- "version": "11.14.3",
- "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.14.3.tgz",
- "integrity": "sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ==",
+ "version": "11.18.1",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz",
+ "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==",
"license": "MIT"
},
"node_modules/ms": {
diff --git a/package.json b/package.json
index a841a60..cd67b06 100644
--- a/package.json
+++ b/package.json
@@ -47,7 +47,7 @@
"cmdk": "^1.0.0",
"date-fns": "^3.6.0",
"embla-carousel-react": "^8.3.0",
- "framer-motion": "^11.14.4",
+ "framer-motion": "^11.18.2",
"heroicons": "^2.2.0",
"html2canvas": "^1.4.1",
"i18next": "^24.1.2",
diff --git a/public/audio/ElevenLabs_2024-12-06T01_53_04_Jessica Anne Bogart - Character and Animation_pvc_s42_sb99_se8_b_m2.mp3 b/public/audio/ElevenLabs_2024-12-06T01_53_04_Jessica Anne Bogart - Character and Animation_pvc_s42_sb99_se8_b_m2.mp3
deleted file mode 100644
index 00b73d9..0000000
Binary files a/public/audio/ElevenLabs_2024-12-06T01_53_04_Jessica Anne Bogart - Character and Animation_pvc_s42_sb99_se8_b_m2.mp3 and /dev/null differ
diff --git a/public/audio/agent-torres-april.mp3 b/public/audio/agent-torres-april.mp3
deleted file mode 100644
index 300b27a..0000000
Binary files a/public/audio/agent-torres-april.mp3 and /dev/null differ
diff --git a/public/audio/briefings/alert-en.mp3 b/public/audio/briefings/alert-en.mp3
index c63c88f..11e0671 100644
Binary files a/public/audio/briefings/alert-en.mp3 and b/public/audio/briefings/alert-en.mp3 differ
diff --git a/public/audio/briefings/alert-ro.mp3 b/public/audio/briefings/alert-ro.mp3
new file mode 100644
index 0000000..f22f974
Binary files /dev/null and b/public/audio/briefings/alert-ro.mp3 differ
diff --git a/public/audio/briefings/april-en.mp3 b/public/audio/briefings/april-en.mp3
deleted file mode 100644
index 300b27a..0000000
Binary files a/public/audio/briefings/april-en.mp3 and /dev/null differ
diff --git a/public/audio/briefings/december-en.mp3 b/public/audio/briefings/december-en.mp3
new file mode 100644
index 0000000..9b962f8
Binary files /dev/null and b/public/audio/briefings/december-en.mp3 differ
diff --git a/public/audio/briefings/december-ro.mp3 b/public/audio/briefings/december-ro.mp3
new file mode 100644
index 0000000..aac378a
Binary files /dev/null and b/public/audio/briefings/december-ro.mp3 differ
diff --git a/public/audio/briefings/expose-en.mp3 b/public/audio/briefings/expose-en.mp3
new file mode 100644
index 0000000..020a326
Binary files /dev/null and b/public/audio/briefings/expose-en.mp3 differ
diff --git a/public/audio/briefings/expose-ro.mp3 b/public/audio/briefings/expose-ro.mp3
new file mode 100644
index 0000000..be5d780
Binary files /dev/null and b/public/audio/briefings/expose-ro.mp3 differ
diff --git a/public/audio/briefings/intro-en.mp3 b/public/audio/briefings/intro-en.mp3
index 3ade942..cb211d8 100644
Binary files a/public/audio/briefings/intro-en.mp3 and b/public/audio/briefings/intro-en.mp3 differ
diff --git a/public/audio/briefings/intro-ro.mp3 b/public/audio/briefings/intro-ro.mp3
new file mode 100644
index 0000000..2cc3793
Binary files /dev/null and b/public/audio/briefings/intro-ro.mp3 differ
diff --git a/public/audio/briefings/january-en.mp3 b/public/audio/briefings/january-en.mp3
index 3a9ae20..4d37527 100644
Binary files a/public/audio/briefings/january-en.mp3 and b/public/audio/briefings/january-en.mp3 differ
diff --git a/public/audio/briefings/january-ro.mp3 b/public/audio/briefings/january-ro.mp3
new file mode 100644
index 0000000..f3e0c60
Binary files /dev/null and b/public/audio/briefings/january-ro.mp3 differ
diff --git a/public/audio/briefings/july-en.mp3 b/public/audio/briefings/july-en.mp3
index 55c71e8..f94cf22 100644
Binary files a/public/audio/briefings/july-en.mp3 and b/public/audio/briefings/july-en.mp3 differ
diff --git a/public/audio/briefings/july-ro.mp3 b/public/audio/briefings/july-ro.mp3
new file mode 100644
index 0000000..37a9ded
Binary files /dev/null and b/public/audio/briefings/july-ro.mp3 differ
diff --git a/public/audio/briefings/march-en.mp3 b/public/audio/briefings/march-en.mp3
index a2c2846..fcd9776 100644
Binary files a/public/audio/briefings/march-en.mp3 and b/public/audio/briefings/march-en.mp3 differ
diff --git a/public/audio/briefings/march-ro.mp3 b/public/audio/briefings/march-ro.mp3
new file mode 100644
index 0000000..6285f73
Binary files /dev/null and b/public/audio/briefings/march-ro.mp3 differ
diff --git a/public/audio/briefings/may-en.mp3 b/public/audio/briefings/may-en.mp3
index 26ce71b..a747e72 100644
Binary files a/public/audio/briefings/may-en.mp3 and b/public/audio/briefings/may-en.mp3 differ
diff --git a/public/audio/briefings/may-ro.mp3 b/public/audio/briefings/may-ro.mp3
new file mode 100644
index 0000000..85ba277
Binary files /dev/null and b/public/audio/briefings/may-ro.mp3 differ
diff --git a/public/audio/briefings/november-en.mp3 b/public/audio/briefings/november-en.mp3
new file mode 100644
index 0000000..41e8ff4
Binary files /dev/null and b/public/audio/briefings/november-en.mp3 differ
diff --git a/public/audio/briefings/november-ro.mp3 b/public/audio/briefings/november-ro.mp3
new file mode 100644
index 0000000..e0d22f4
Binary files /dev/null and b/public/audio/briefings/november-ro.mp3 differ
diff --git a/public/audio/briefings/september-en.mp3 b/public/audio/briefings/september-en.mp3
new file mode 100644
index 0000000..d1557ad
Binary files /dev/null and b/public/audio/briefings/september-en.mp3 differ
diff --git a/public/audio/briefings/september-ro.mp3 b/public/audio/briefings/september-ro.mp3
new file mode 100644
index 0000000..8059dc3
Binary files /dev/null and b/public/audio/briefings/september-ro.mp3 differ
diff --git a/public/audio/dr-chen-january.mp3 b/public/audio/dr-chen-january.mp3
deleted file mode 100644
index 989a770..0000000
Binary files a/public/audio/dr-chen-january.mp3 and /dev/null differ
diff --git a/public/audio/dr-webb-february.mp3 b/public/audio/dr-webb-february.mp3
deleted file mode 100644
index e763aac..0000000
Binary files a/public/audio/dr-webb-february.mp3 and /dev/null differ
diff --git a/public/audio/prof-morrison-march.mp3 b/public/audio/prof-morrison-march.mp3
deleted file mode 100644
index f0a67b8..0000000
Binary files a/public/audio/prof-morrison-march.mp3 and /dev/null differ
diff --git a/public/images/noise.png b/public/images/noise.png
new file mode 100644
index 0000000..62bc85d
--- /dev/null
+++ b/public/images/noise.png
@@ -0,0 +1 @@
+data:image/png;base64,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
diff --git a/src/components/LanguageSwitcher.tsx b/src/components/LanguageSwitcher.tsx
index 3cc25e1..4d9dc56 100644
--- a/src/components/LanguageSwitcher.tsx
+++ b/src/components/LanguageSwitcher.tsx
@@ -25,10 +25,10 @@ export const LanguageSwitcher = () => {
variant="ghost"
size="sm"
onClick={toggleLanguage}
- className="flex items-center gap-2 text-yellow-500 hover:text-yellow-400"
+ className="flex items-center gap-2 text-yellow-500 hover:text-black hover:bg-yellow-500 transition-colors"
>
{i18n.language.toUpperCase()}
);
-};
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/src/components/game/BriefingAudio.tsx b/src/components/game/BriefingAudio.tsx
index ca049a3..0875022 100644
--- a/src/components/game/BriefingAudio.tsx
+++ b/src/components/game/BriefingAudio.tsx
@@ -27,7 +27,8 @@ export const BriefingAudio = ({ stage, audioRef, className = "" }: BriefingAudio
return `intro-${currentLanguage}.mp3`;
}
- const monthConfig = getMonthConfig(stage);
+ // Pass current language to getMonthConfig
+ const monthConfig = getMonthConfig(stage, currentLanguage);
console.log('BriefingAudio - Selected monthConfig:', monthConfig);
if (!monthConfig?.audio?.briefing) {
@@ -80,7 +81,7 @@ export const BriefingAudio = ({ stage, audioRef, className = "" }: BriefingAudio
);
diff --git a/src/components/game/DossierPanel.tsx b/src/components/game/DossierPanel.tsx
index 18428bb..81ff169 100644
--- a/src/components/game/DossierPanel.tsx
+++ b/src/components/game/DossierPanel.tsx
@@ -27,7 +27,7 @@ const TypewriterText = ({ text }: { text: string }) => {
letters.forEach((letter, i) => {
const timeout = setTimeout(() => {
setDisplayText(text.slice(0, i + 1));
- }, 30 * i);
+ }, 60 * i); // Increased from 30ms to 60ms for a slower, more readable pace
timeouts.push(timeout);
});
diff --git a/src/components/game/IntroAudio.tsx b/src/components/game/IntroAudio.tsx
index 93a4066..302e43a 100644
--- a/src/components/game/IntroAudio.tsx
+++ b/src/components/game/IntroAudio.tsx
@@ -33,7 +33,7 @@ export const IntroAudio = ({ className }: IntroAudioProps) => {
try {
await audioRef.current.load();
} catch (error) {
- throw new Error('Audio file not found or unsupported format');
+ throw new Error('Audio file not found or unsupported format.');
}
}
@@ -46,7 +46,7 @@ export const IntroAudio = ({ className }: IntroAudioProps) => {
playPromise.catch(error => {
console.error('Playback failed:', error);
toast.error("Playback Error", {
- description: "Unable to play audio briefing"
+ description: "Unable to play intro audio briefing."
});
});
}
@@ -55,7 +55,7 @@ export const IntroAudio = ({ className }: IntroAudioProps) => {
} catch (error) {
console.error('Audio error:', error);
toast.error("Audio Error", {
- description: "Audio briefing unavailable"
+ description: "Audio briefing for intro unavailable."
});
}
};
@@ -65,7 +65,7 @@ export const IntroAudio = ({ className }: IntroAudioProps) => {
variant="ghost"
size="sm"
onClick={togglePlay}
- className="text-yellow-500/80 hover:text-yellow-400 hover:bg-yellow-500/10 flex items-center gap-2"
+ className="text-yellow-500/80 hover:text-yellow-500 hover:bg-yellow-500/10 flex items-center gap-2"
>
{isPlaying ? : }
{t('audio.briefing')}
diff --git a/src/components/game/IntroDialog.tsx b/src/components/game/IntroDialog.tsx
index fce1320..4506850 100644
--- a/src/components/game/IntroDialog.tsx
+++ b/src/components/game/IntroDialog.tsx
@@ -9,6 +9,8 @@ import { useState, useRef, useCallback, useEffect } from "react";
import { useTranslation } from "react-i18next";
import { LanguageSwitcher } from "@/components/LanguageSwitcher";
import { cn } from "@/lib/utils";
+import { motion } from "framer-motion";
+import { Target, Calendar, TrendingUp, AlertTriangle } from "lucide-react";
interface IntroDialogProps {
onStartAudio?: () => void;
@@ -48,63 +50,141 @@ export const IntroDialog = ({ onStartAudio }: IntroDialogProps) => {
onStartAudio?.();
};
+ const containerVariants = {
+ hidden: { opacity: 0 },
+ visible: {
+ opacity: 1,
+ transition: {
+ staggerChildren: 0.1,
+ }
+ }
+ };
+
+ const itemVariants = {
+ hidden: { y: 10, opacity: 0 },
+ visible: {
+ y: 0,
+ opacity: 1,
+ transition: {
+ type: "spring",
+ stiffness: 100,
+ damping: 12
+ }
+ }
+ };
+
return (