<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PMAN.md - The History of a Hashtag</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Lora:ital,wght@0,400..700;1,400..700&display=swap" rel="stylesheet">
<style>
:root {
scroll-behavior: smooth;
}
body {
font-family: 'Inter', sans-serif;
background-color: #f8f9fa;
color: #212529;
}
h1, h2, h3, h4 {
font-family: 'Lora', serif;
}
.depth-quick .content-standard,
.depth-quick .content-scholar {
display: none;
}
.depth-standard .content-quick,
.depth-standard .content-scholar {
display: none;
}
.depth-scholar .content-quick,
.depth-scholar .content-standard {
display: none;
}
.depth-toggle-label {
transition: all 0.2s ease-in-out;
}
.depth-toggle-label.active {
background-color: #343a40;
color: #ffffff;
}
.timeline-item::before {
content: '';
position: absolute;
left: -1px;
top: 24px;
bottom: -24px;
width: 2px;
background-color: #dee2e6;
z-index: 0;
}
.timeline-item:last-child::before {
display: none;
}
.timeline-dot {
position: absolute;
left: -10px;
top: 15px;
width: 22px;
height: 22px;
border-radius: 50%;
border: 4px solid #f8f9fa;
background-color: #495057;
z-index: 1;
}
.footnote-ref {
font-size: 0.7em;
vertical-align: super;
cursor: pointer;
color: #007bff;
-webkit-user-select: none; /* Safari */
-ms-user-select: none; /* IE 10 and IE 11 */
user-select: none; /* Standard syntax */
}
.footnote-content {
display: none;
position: absolute;
bottom: calc(100% + 5px);
left: 50%;
transform: translateX(-50%);
background: white;
border: 1px solid #ccc;
padding: 10px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
z-index: 10;
width: 280px;
font-size: 0.875rem;
}
.footnote-content.show {
display: block;
}
.modal-overlay {
transition: opacity 0.3s ease;
}
.modal-container {
transition: transform 0.3s ease;
}
.lang-switcher a.active {
font-weight: 700;
color: #212529;
}
</style>
</head>
<body class="depth-standard">
<!-- Header & Navigation -->
<header class="bg-white shadow-sm sticky top-0 z-50">
<nav class="container mx-auto px-4 py-3 flex justify-between items-center">
<div>
<a href="#" class="font-bold text-xl text-gray-800">PMAN<span class="font-normal text-gray-500">.md</span></a>
<h2 class="text-sm font-light text-gray-600 hidden sm:inline" data-translate="subtitle_hashtag">The History of a Hashtag</h2>
</div>
<div class="flex items-center space-x-4">
<div class="lang-switcher hidden md:flex items-center space-x-2 text-sm text-gray-500">
<a href="#" onclick="changeLanguage('ro'); return false;">RO</a>
<a href="#" onclick="changeLanguage('en'); return false;" class="active">EN</a>
<a href="#" onclick="changeLanguage('ru'); return false;">RU</a>
</div>
<a href="#contribute" class="bg-gray-800 text-white px-3 py-1.5 rounded-md text-sm font-semibold hover:bg-gray-700 transition-colors" data-translate="nav_submit">Submit Evidence</a>
</div>
</nav>
</header>
<!-- Main Content -->
<main class="container mx-auto p-4 md:p-8">
<!-- Hero Section -->
<section class="text-center py-12 md:py-20">
<h1 class="text-4xl md:text-6xl font-bold tracking-tight text-gray-900" data-translate="hero_title">The 7th of April 2009</h1>
<p class="mt-4 text-lg md:text-xl max-w-3xl mx-auto text-gray-600" data-translate="hero_subtitle">A living history of the Chișinău protests. A multilingual, curated, and verifiable archive designed for every attention span.</p>
</section>
<!-- Depth Toggle UX -->
<section id="depth-selector" class="bg-white rounded-xl shadow-md p-4 sticky top-[65px] z-40 mb-12 flex flex-col sm:flex-row justify-between items-center space-y-3 sm:space-y-0">
<div class="font-semibold text-gray-800">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="inline-block mr-2 -mt-1"><path d="M2 12h2"/><path d="M10 12h2"/><path d="M18 12h2"/><path d="M6 7l8 10"/><path d="M6 17l8-10"/></svg>
<span data-translate="depth_title">Choose Your Depth</span>
</div>
<div class="flex items-center border border-gray-200 rounded-lg p-1 space-x-1">
<button onclick="setDepth('quick')" class="depth-toggle-label px-4 py-1.5 rounded-md text-sm font-medium" data-depth="quick" data-translate="depth_quick">Quick</button>
<button onclick="setDepth('standard')" class="depth-toggle-label px-4 py-1.5 rounded-md text-sm font-medium active" data-depth="standard" data-translate="depth_standard">Standard</button>
<button onclick="setDepth('scholar')" class="depth-toggle-label px-4 py-1.5 rounded-md text-sm font-medium" data-depth="scholar" data-translate="depth_scholar">Scholar</button>
</div>
</section>
<!-- Timeline Section -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-12">
<div class="lg:col-span-2">
<h2 class="text-3xl font-bold mb-8 text-gray-800" data-translate="timeline_title">Timeline of Events</h2>
<div class="relative pl-8">
<!-- Timeline Item -->
<div class="timeline-item pb-12">
<div class="timeline-dot"></div>
<h3 class="text-lg font-semibold text-gray-500" data-translate="event1_date">6 April 2009</h3>
<h4 class="text-2xl font-bold text-gray-900 mb-3" data-translate="event1_title">Election Results Announced</h4>
<div class="space-y-4 text-gray-700 leading-relaxed">
<p class="content-quick" data-translate="event1_quick">The ruling Communist Party (PCRM) wins the election amid immediate allegations of fraud.</p>
<p class="content-standard" data-translate="event1_standard">Moldova's Central Electoral Commission announces the Party of Communists (PCRM) won nearly 50% of the vote. Opposition leaders immediately cry foul, citing irregularities and manipulated voter lists.</p>
<div class="content-scholar">
<p data-translate="event1_scholar">Official CEC results gave the PCRM 49.48% of the vote. OSCE observers noted a biased media environment and misuse of state resources, though they did not call the election fraudulent outright.<span class="relative"><sup class="footnote-ref" data-footnote="fn-1">[1]</sup></span> This announcement acted as the primary catalyst for protests.</p>
</div>
</div>
</div>
<!-- More timeline items here... -->
<div class="timeline-item pb-12">
<div class="timeline-dot"></div>
<h3 class="text-lg font-semibold text-gray-500" data-translate="event2_date">7 April 2009, Morning</h3>
<h4 class="text-2xl font-bold text-gray-900 mb-3" data-translate="event2_title">Spontaneous Protests Emerge</h4>
<div class="space-y-4 text-gray-700 leading-relaxed">
<p class="content-quick" data-translate="event2_quick">Thousands gather in Piața Marii Adunări Naționale (PMAN), organized via SMS and early social media under the #pman hashtag.</p>
<div class="content-standard">
<p data-translate="event2_standard">A flash mob, coordinated through SMS and online forums, brings thousands of students to PMAN. Blogger Vitalie Eșanu creates the #pman hashtag on Twitter to aggregate information, which quickly becomes the digital symbol of the movement.</p>
<img src="https://placehold.co/600x400/e2e8f0/64748b?text=Protesters+in+PMAN" alt="Archival photo of protesters in PMAN" class="rounded-lg mt-4 shadow-md">
</div>
<div class="content-scholar">
<p data-translate="event2_scholar">The decentralized mobilization used text messages and platforms like Blogger.com. The choice of #pman was crucial for discoverability.<span class="relative"><sup class="footnote-ref" data-footnote="fn-2">[2]</sup></span> The protest remained largely peaceful in the morning hours.</p>
</div>
</div>
</div>
<div class="timeline-item pb-12">
<div class="timeline-dot"></div>
<h3 class="text-lg font-semibold text-gray-500" data-translate="event3_date">7 April 2009, Afternoon</h3>
<h4 class="text-2xl font-bold text-gray-900 mb-3" data-translate="event3_title">Escalation and Clashes</h4>
<div class="space-y-4 text-gray-700 leading-relaxed">
<p class="content-quick" data-translate="event3_quick">Protests turn violent as crowds storm the Parliament and Presidential buildings.</p>
<p class="content-standard" data-translate="event3_standard">The protest swells to over 15,000. A segment of the crowd breaks through police lines and storms the Parliament and Presidential buildings. The situation becomes chaotic as riot police are overwhelmed.</p>
<div class="content-scholar">
<p data-translate="event3_scholar">The nature of the escalation remains controversial, with many reports suggesting the presence of organized provocateurs.<span class="relative"><sup class="footnote-ref" data-footnote="fn-3">[3]</sup></span> The initial passive police response was a key factor in the buildings being overrun.</p>
</div>
</div>
</div>
<div class="timeline-item pb-12">
<div class="timeline-dot"></div>
<h3 class="text-lg font-semibold text-gray-500" data-translate="event4_date">7-8 April 2009, Night</h3>
<h4 class="text-2xl font-bold text-gray-900 mb-3" data-translate="event4_title">Crackdown and Mass Arrests</h4>
<div class="space-y-4 text-gray-700 leading-relaxed">
<p class="content-quick" data-translate="event4_quick">Police launch a brutal crackdown, arresting hundreds and clearing the square. Widespread reports of beatings and torture emerge.</p>
<p class="content-standard" data-translate="event4_standard">Overnight, law enforcement launches a coordinated and brutal operation. Hundreds of young people are arrested, often indiscriminately, from public spaces and homes. Detainees are taken to police stations where many suffer severe beatings and torture.</p>
<div class="content-scholar">
<p data-translate="event4_scholar">Human rights organizations, including Amnesty International, later documented at least one death in custody (Valeriu Boboc) and hundreds of cases of torture and ill-treatment.<span class="relative"><sup class="footnote-ref" data-footnote="fn-4">[4]</sup></span> This brutal response galvanized both domestic and international opposition to the government.</p>
</div>
</div>
</div>
<div class="timeline-item pb-12">
<div class="timeline-dot"></div>
<h3 class="text-lg font-semibold text-gray-500" data-translate="event5_date">Post-April 2009</h3>
<h4 class="text-2xl font-bold text-gray-900 mb-3" data-translate="event5_title">Aftermath and New Elections</h4>
<div class="space-y-4 text-gray-700 leading-relaxed">
<p class="content-quick" data-translate="event5_quick">Under pressure, the government agrees to an election recount, which confirms the result. However, new elections are held in July, leading to a change in government.</p>
<p class="content-standard" data-translate="event5_standard">The April 7 events triggered a deep political crisis. A court-ordered recount of the April 5 vote did not significantly alter the outcome. However, the Parliament failed to elect a new president, triggering early parliamentary elections on July 29, 2009. The PCRM lost its majority, and a new pro-Western coalition, the Alliance for European Integration, came to power.</p>
<div class="content-scholar">
<p data-translate="event5_scholar">The long-term impact included a decisive shift in Moldova's geopolitical orientation and increased scrutiny of its justice and law enforcement systems. The question of accountability for the torture committed during the crackdown remains a sensitive and only partially resolved issue in Moldovan society.</p>
</div>
</div>
</div>
</div>
</div>
<!-- Sidebar -->
<aside class="space-y-8">
<!-- Claim Checker -->
<div class="bg-white p-6 rounded-xl shadow-md border border-gray-200">
<h3 class="text-xl font-bold mb-3 text-gray-800" data-translate="claim_title">Claim Checker</h3>
<p class="font-semibold mb-2 text-gray-900" data-translate="claim_question">Was Moldova the first 'Twitter Revolution'?</p>
<p class="text-sm bg-yellow-100 text-yellow-800 p-3 rounded-lg mb-4" data-translate="claim_verdict"><strong class="font-bold">Verdict: Debated.</strong> Moldova was among the first to be widely labeled a 'Twitter Revolution' (April 2009), popularizing the term. However, Twitter's actual causal role is contested.</p>
<ul class="text-sm text-gray-600 list-disc list-inside space-y-2">
<li data-translate="claim_for"><strong>For:</strong> Contemporaneous media like <a href="https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/" target="_blank" class="text-blue-600 hover:underline">Foreign Policy</a> and <em>WIRED</em> immediately framed it this way.</li>
<li data-translate="claim_against"><strong>Against:</strong> Later analysis highlighted the small local Twitter user base and the greater importance of SMS and blogs.</li>
</ul>
</div>
<!-- Library -->
<div class="bg-white p-6 rounded-xl shadow-md border border-gray-200">
<h3 class="text-xl font-bold mb-4 text-gray-800" data-translate="library_title">The Library</h3>
<div class="space-y-4">
<div class="flex items-start space-x-3">
<img src="https://placehold.co/60x80/343a40/ffffff?text=Book" alt="Book Cover" class="rounded w-12 h-16 object-cover flex-shrink-0">
<div>
<h4 class="font-semibold text-gray-900" data-translate="library_book1_title">Revoluţia Twitter. Episodul întâi</h4>
<p class="text-sm text-gray-500" data-translate="library_book1_desc">Anthology, ARC/Știința, 2010</p>
</div>
</div>
<div class="flex items-start space-x-3">
<img src="https://placehold.co/60x80/495057/ffffff?text=Book" alt="Book Cover" class="rounded w-12 h-16 object-cover flex-shrink-0">
<div>
<h4 class="font-semibold text-gray-900" data-translate="library_book2_title">Aceasta e prima mea revoluţie.</h4>
<p class="text-sm text-gray-500" data-translate="library_book2_desc">Maria-Paula Erizanu, 2010</p>
</div>
</div>
<button id="open-library-modal" class="inline-block mt-2 text-sm text-blue-600 font-semibold hover:underline" data-translate="library_explore">Explore all sources →</button>
</div>
</div>
</aside>
</div>
<!-- Interactive Map and Media Gallery -->
<div class="mt-20 grid grid-cols-1 md:grid-cols-2 gap-12">
<!-- Map -->
<section id="map">
<h2 class="text-3xl font-bold mb-4 text-gray-800" data-translate="map_title">Key Locations</h2>
<div class="bg-white p-4 rounded-xl shadow-md border border-gray-200">
<svg viewBox="0 0 400 300" class="w-full h-auto rounded-lg">
<rect width="400" height="300" fill="#e2e8f0"/>
<text x="200" y="30" font-family="Lora" font-size="18" text-anchor="middle" fill="#2d3748" data-translate="map_svg_title">Chișinău - Protest Zone</text>
<rect x="250" y="80" width="100" height="50" fill="#cbd5e0" rx="2"/>
<text x="300" y="108" font-size="10" text-anchor="middle" fill="#4a5568" data-translate="map_svg_parliament">(2) Parliament</text>
<rect x="250" y="150" width="100" height="50" fill="#cbd5e0" rx="2"/>
<text x="300" y="178" font-size="10" text-anchor="middle" fill="#4a5568" data-translate="map_svg_presidency">(3) Presidency</text>
<rect x="50" y="80" width="150" height="120" fill="#a0aec0" rx="2"/>
<text x="125" y="145" font-size="12" text-anchor="middle" fill="#2d3748">(1) PMAN</text>
<text x="10" y="280" font-size="9" fill="#4a5568" data-translate="map_svg_legend1">(1) Piața Marii Adunări Naționale (Protest Hub)</text>
<text x="10" y="292" font-size="9" fill="#4a5568" data-translate="map_svg_legend2">(2, 3) Government buildings stormed by protesters</text>
</svg>
</div>
</section>
<!-- Media Gallery -->
<section id="gallery">
<h2 class="text-3xl font-bold mb-4 text-gray-800" data-translate="gallery_title">From the Archives</h2>
<div class="grid grid-cols-2 gap-4">
<img src="https://placehold.co/300x200/a0aec0/ffffff?text=Archive+Photo+1" class="rounded-lg shadow-md w-full h-full object-cover">
<img src="https://placehold.co/300x200/a0aec0/ffffff?text=Archive+Photo+2" class="rounded-lg shadow-md w-full h-full object-cover">
<img src="https://placehold.co/300x200/a0aec0/ffffff?text=Archive+Photo+3" class="rounded-lg shadow-md w-full h-full object-cover">
<div class="bg-gray-800 text-white rounded-lg shadow-md flex items-center justify-center p-4">
<a href="#" class="font-semibold text-center hover:underline" data-translate="gallery_view_all">View All Media →</a>
</div>
</div>
</section>
</div>
<!-- About & Contribute Sections -->
<div class="mt-20 grid grid-cols-1 md:grid-cols-2 gap-12">
<section id="about">
<h2 class="text-3xl font-bold mb-4 text-gray-800" data-translate="about_title">About This Project</h2>
<div class="prose max-w-none text-gray-700 space-y-4">
<p data-translate="about_text">PMAN.md is a digital history initiative by <strong>Cohesion Lab</strong> dedicated to preserving and explaining the events of April 7, 2009. Our goal is to create a definitive, living archive that is accessible, verifiable, and respectful of all perspectives.</p>
</div>
</section>
<section id="contribute" class="bg-white p-8 rounded-xl shadow-md border border-gray-200">
<h2 class="text-3xl font-bold mb-4 text-gray-800" data-translate="contribute_title">Contribute to the Archive</h2>
<p class="text-gray-600 mb-6" data-translate="contribute_text">Do you have photos, videos, or stories from April 2009? Help us build a more complete picture.</p>
<button class="w-full bg-gray-800 text-white px-4 py-2.5 rounded-md font-semibold hover:bg-gray-700 transition-colors" data-translate="contribute_button">Submit Inquiry</button>
</section>
</div>
</main>
<!-- Footer -->
<footer class="bg-white mt-20 border-t">
<div class="container mx-auto px-4 py-8 text-center text-gray-500">
<p data-translate="footer_copyright">© 2024 Cohesion Lab. A digital heritage project.</p>
<p class="text-sm mt-2" data-translate="footer_links">See our <a href="#" class="underline">Methodology</a> and <a href="#" class="underline">Rights & Ethics</a> pages for details.</p>
</div>
</footer>
<!-- Footnote Tooltips -->
<div id="fn-1" class="footnote-content" data-translate="fn1_text">OSCE/ODIHR Election Observation Mission Final Report, Warsaw, 2 June 2009.</div>
<div id="fn-2" class="footnote-content" data-translate="fn2_text">Eșanu, Vitalie. "Istoria unui hashtag." The post describes creating the hashtag to centralize info for international journalists.</div>
<div id="fn-3" class="footnote-content" data-translate="fn3_text">Mungiu-Pippidi, A., & Munteanu, I. (2009). "Moldova’s ‘Twitter Revolution’." Journal of Democracy, 20(3), 154-161.</div>
<div id="fn-4" class="footnote-content" data-translate="fn4_text">Amnesty International Report, "Moldova: Justice for Generation April 7," 2010.</div>
<!-- Library Modal -->
<div id="library-modal" class="fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4 opacity-0 pointer-events-none modal-overlay">
<div class="bg-white rounded-xl shadow-2xl w-full max-w-2xl max-h-[90vh] flex flex-col transform scale-95 modal-container">
<div class="flex justify-between items-center p-4 border-b">
<h3 class="text-2xl font-bold text-gray-800" data-translate="modal_library_title">Starter Bibliography</h3>
<button id="close-library-modal" class="text-gray-500 hover:text-gray-800 text-3xl leading-none">×</button>
</div>
<div class="p-6 overflow-y-auto space-y-6">
<div>
<h4 class="font-bold text-lg mb-2" data-translate="modal_books_title">Books / Edited Volumes</h4>
<ul class="list-disc list-inside space-y-2 text-gray-700">
<li data-translate="modal_book1"><em>Revoluţia Twitter. Episodul întâi: Republica Moldova</em> (ARC/Știința, 2010) — Anthology with studies, documents, images.</li>
<li data-translate="modal_book2">Erizanu, Maria-Paula. <em>Aceasta e prima mea revoluţie. Furaţi-mi-o</em> (Editura Cartier, 2010) — Trilingual, first-person account with photos.</li>
<li data-translate="modal_book3">Popa, Stela. <em>100 de zile</em> (Tritonic, 2009/2010) — Novel set against the April context.</li>
</ul>
</div>
<div>
<h4 class="font-bold text-lg mb-2" data-translate="modal_scholarly_title">Peer-reviewed / Scholarly</h4>
<ul class="list-disc list-inside space-y-2 text-gray-700">
<li data-translate="modal_scholarly1">Mungiu-Pippidi, Alina & Munteanu, Igor. <a href="https://www.journalofdemocracy.org/articles/moldovas-twitter-revolution/" target="_blank" class="text-blue-600 hover:underline">“Moldova’s ‘Twitter Revolution,’”</a> <em>Journal of Democracy</em> 20(3), 2009.</li>
<li data-translate="modal_scholarly2">“Moldovan Spring 2009: The Atypical ‘Revolution’ of April 7…” in <em>The Palgrave Handbook of Global Counter-Terrorism Policy</em>, 2021 chapter.</li>
</ul>
</div>
<div>
<h4 class="font-bold text-lg mb-2" data-translate="modal_reporting_title">Contemporary Reporting & Analysis (April 2009)</h4>
<ul class="list-disc list-inside space-y-2 text-gray-700">
<li data-translate="modal_reporting1">Morozov, Evgeny. <a href="https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/" target="_blank" class="text-blue-600 hover:underline">“Moldova’s Twitter Revolution,”</a> <em>Foreign Policy</em>, Apr 7, 2009.</li>
<li data-translate="modal_reporting2">WIRED Magazine Package: “Inside Moldova’s Twitter Revolution”; “Calm After the Twitter-Storm”.</li>
<li data-translate="modal_reporting3">RFE/RL Media Center: Field reporting from Chișinău.</li>
</ul>
</div>
</div>
</div>
</div>
<script>
const translations = {
en: {
subtitle_hashtag: "The History of a Hashtag",
nav_submit: "Submit Evidence",
hero_title: "The 7th of April 2009",
hero_subtitle: "A living history of the Chișinău protests. A multilingual, curated, and verifiable archive designed for every attention span.",
depth_title: "Choose Your Depth",
depth_quick: "Quick",
depth_standard: "Standard",
depth_scholar: "Scholar",
timeline_title: "Timeline of Events",
event1_date: "6 April 2009",
event1_title: "Election Results Announced",
event1_quick: "The ruling Communist Party (PCRM) wins the election amid immediate allegations of fraud.",
event1_standard: "Moldova's Central Electoral Commission announces the Party of Communists (PCRM) won nearly 50% of the vote. Opposition leaders immediately cry foul, citing irregularities and manipulated voter lists.",
event1_scholar: "Official CEC results gave the PCRM 49.48% of the vote. OSCE observers noted a biased media environment and misuse of state resources, though they did not call the election fraudulent outright.",
event2_date: "7 April 2009, Morning",
event2_title: "Spontaneous Protests Emerge",
event2_quick: "Thousands gather in Piața Marii Adunări Naționale (PMAN), organized via SMS and early social media under the #pman hashtag.",
event2_standard: "A flash mob, coordinated through SMS and online forums, brings thousands of students to PMAN. Blogger Vitalie Eșanu creates the #pman hashtag on Twitter to aggregate information, which quickly becomes the digital symbol of the movement.",
event2_scholar: "The decentralized mobilization used text messages and platforms like Blogger.com. The choice of #pman was crucial for discoverability.",
event3_date: "7 April 2009, Afternoon",
event3_title: "Escalation and Clashes",
event3_quick: "Protests turn violent as crowds storm the Parliament and Presidential buildings.",
event3_standard: "The protest swells to over 15,000. A segment of the crowd breaks through police lines and storms the Parliament and Presidential buildings. The situation becomes chaotic as riot police are overwhelmed.",
event3_scholar: "The nature of the escalation remains controversial, with many reports suggesting the presence of organized provocateurs.",
event4_date: "7-8 April 2009, Night",
event4_title: "Crackdown and Mass Arrests",
event4_quick: "Police launch a brutal crackdown, arresting hundreds and clearing the square. Widespread reports of beatings and torture emerge.",
event4_standard: "Overnight, law enforcement launches a coordinated and brutal operation. Hundreds of young people are arrested, often indiscriminately, from public spaces and homes. Detainees are taken to police stations where many suffer severe beatings and torture.",
event4_scholar: "Human rights organizations, including Amnesty International, later documented at least one death in custody (Valeriu Boboc) and hundreds of cases of torture and ill-treatment.",
event5_date: "Post-April 2009",
event5_title: "Aftermath and New Elections",
event5_quick: "Under pressure, the government agrees to an election recount, which confirms the result. However, new elections are held in July, leading to a change in government.",
event5_standard: "The April 7 events triggered a deep political crisis. A court-ordered recount of the April 5 vote did not significantly alter the outcome. However, the Parliament failed to elect a new president, triggering early parliamentary elections on July 29, 2009. The PCRM lost its majority, and a new pro-Western coalition, the Alliance for European Integration, came to power.",
event5_scholar: "The long-term impact included a decisive shift in Moldova's geopolitical orientation and increased scrutiny of its justice and law enforcement systems. The question of accountability for the torture committed during the crackdown remains a sensitive and only partially resolved issue in Moldovan society.",
claim_title: "Claim Checker",
claim_question: "Was Moldova the first 'Twitter Revolution'?",
claim_verdict: "<strong class=\"font-bold\">Verdict: Debated.</strong> Moldova was among the first to be widely labeled a 'Twitter Revolution' (April 2009), popularizing the term. However, Twitter's actual causal role is contested.",
claim_for: "<strong>For:</strong> Contemporaneous media like <a href=\"https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Foreign Policy</a> and <em>WIRED</em> immediately framed it this way.",
claim_against: "<strong>Against:</strong> Later analysis highlighted the small local Twitter user base and the greater importance of SMS and blogs.",
library_title: "The Library",
library_book1_title: "Revoluţia Twitter. Episodul întâi",
library_book1_desc: "Anthology, ARC/Știința, 2010",
library_book2_title: "Aceasta e prima mea revoluţie.",
library_book2_desc: "Maria-Paula Erizanu, 2010",
library_explore: "Explore all sources →",
map_title: "Key Locations",
map_svg_title: "Chișinău - Protest Zone",
map_svg_parliament: "(2) Parliament",
map_svg_presidency: "(3) Presidency",
map_svg_legend1: "(1) Piața Marii Adunări Naționale (Protest Hub)",
map_svg_legend2: "(2, 3) Government buildings stormed by protesters",
gallery_title: "From the Archives",
gallery_view_all: "View All Media →",
about_title: "About This Project",
about_text: "PMAN.md is a digital history initiative by <strong>Cohesion Lab</strong> dedicated to preserving and explaining the events of April 7, 2009. Our goal is to create a definitive, living archive that is accessible, verifiable, and respectful of all perspectives.",
contribute_title: "Contribute to the Archive",
contribute_text: "Do you have photos, videos, or stories from April 2009? Help us build a more complete picture.",
contribute_button: "Submit Inquiry",
footer_copyright: "© 2024 Cohesion Lab. A digital heritage project.",
footer_links: "See our <a href=\"#\" class=\"underline\">Methodology</a> and <a href=\"#\" class=\"underline\">Rights & Ethics</a> pages for details.",
fn1_text: "OSCE/ODIHR Election Observation Mission Final Report, Warsaw, 2 June 2009.",
fn2_text: "Eșanu, Vitalie. \"Istoria unui hashtag.\" The post describes creating the hashtag to centralize info for international journalists.",
fn3_text: "Mungiu-Pippidi, A., & Munteanu, I. (2009). \"Moldova’s ‘Twitter Revolution’.\" Journal of Democracy, 20(3), 154-161.",
fn4_text: "Amnesty International Report, \"Moldova: Justice for Generation April 7,\" 2010.",
modal_library_title: "Starter Bibliography",
modal_books_title: "Books / Edited Volumes",
modal_book1: "<em>Revoluţia Twitter. Episodul întâi: Republica Moldova</em> (ARC/Știința, 2010) — Anthology with studies, documents, images.",
modal_book2: "Erizanu, Maria-Paula. <em>Aceasta e prima mea revoluţie. Furaţi-mi-o</em> (Editura Cartier, 2010) — Trilingual, first-person account with photos.",
modal_book3: "Popa, Stela. <em>100 de zile</em> (Tritonic, 2009/2010) — Novel set against the April context.",
modal_scholarly_title: "Peer-reviewed / Scholarly",
modal_scholarly1: "Mungiu-Pippidi, Alina & Munteanu, Igor. <a href=\"https://www.journalofdemocracy.org/articles/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">“Moldova’s ‘Twitter Revolution,’”</a> <em>Journal of Democracy</em> 20(3), 2009.",
modal_scholarly2: "“Moldovan Spring 2009: The Atypical ‘Revolution’ of April 7…” in <em>The Palgrave Handbook of Global Counter-Terrorism Policy</em>, 2021 chapter.",
modal_reporting_title: "Contemporary Reporting & Analysis (April 2009)",
modal_reporting1: "Morozov, Evgeny. <a href=\"https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">“Moldova’s Twitter Revolution,”</a> <em>Foreign Policy</em>, Apr 7, 2009.",
modal_reporting2: "WIRED Magazine Package: “Inside Moldova’s Twitter Revolution”; “Calm After the Twitter-Storm”.",
modal_reporting3: "RFE/RL Media Center: Field reporting from Chișinău."
},
ro: {
subtitle_hashtag: "Istoria unui Hashtag",
nav_submit: "Trimite Dovezi",
hero_title: "7 Aprilie 2009",
hero_subtitle: "O istorie vie a protestelor de la Chișinău. O arhivă multilingvă, curatoriată și verificabilă, concepută pentru fiecare nivel de atenție.",
depth_title: "Alege Nivelul de Detaliu",
depth_quick: "Pe Scurt",
depth_standard: "Standard",
depth_scholar: "Academic",
timeline_title: "Cronologia Evenimentelor",
event1_date: "6 Aprilie 2009",
event1_title: "Anunțarea Rezultatelor Alegerilor",
event1_quick: "Partidul Comuniștilor (PCRM), aflat la putere, câștigă alegerile pe fondul unor acuzații imediate de fraudă.",
event1_standard: "Comisia Electorală Centrală a Moldovei anunță că Partidul Comuniștilor (PCRM) a câștigat aproape 50% din voturi. Liderii opoziției acuză imediat nereguli și liste de alegători manipulate.",
event1_scholar: "Rezultatele oficiale ale CEC au acordat PCRM 49,48% din voturi. Observatorii OSCE au remarcat un mediu mediatic părtinitor și utilizarea resurselor de stat, deși nu au declarat alegerile frauduloase.",
event2_date: "7 Aprilie 2009, Dimineața",
event2_title: "Încep Protestele Spontane",
event2_quick: "Mii de oameni se adună în Piața Marii Adunări Naționale (PMAN), organizați prin SMS și rețele sociale timpurii sub hashtag-ul #pman.",
event2_standard: "Un flash mob, coordonat prin SMS și forumuri online, aduce mii de studenți în PMAN. Bloggerul Vitalie Eșanu creează hashtag-ul #pman pe Twitter pentru a agrega informații, care devine rapid simbolul digital al mișcării.",
event2_scholar: "Mobilizarea descentralizată a folosit mesaje text și platforme precum Blogger.com. Alegerea #pman a fost crucială pentru vizibilitate.",
event3_date: "7 Aprilie 2009, După-amiază",
event3_title: "Escaladare și Confruntări",
event3_quick: "Protestele devin violente, mulțimile luând cu asalt clădirile Parlamentului și Președinției.",
event3_standard: "Protestul crește la peste 15.000 de oameni. O parte a mulțimii rupe cordoanele poliției și ia cu asalt clădirile Parlamentului și Administrației Prezidențiale. Situația devine haotică, poliția antirevoltă fiind depășită.",
event3_scholar: "Natura escaladării rămâne controversată, multe rapoarte sugerând prezența provocatorilor organizați.",
event4_date: "7-8 Aprilie 2009, Noaptea",
event4_title: "Represiune și Arestări în Masă",
event4_quick: "Poliția lansează o represiune brutală, arestând sute de persoane și eliberând piața. Apar numeroase relatări despre bătăi și tortură.",
event4_standard: "Peste noapte, forțele de ordine lansează o operațiune coordonată și brutală. Sute de tineri sunt arestați, adesea la întâmplare, din spații publice și locuințe. Deținuții sunt duși la secții de poliție unde mulți suferă bătăi severe și tortură.",
event4_scholar: "Organizațiile pentru drepturile omului, inclusiv Amnesty International, au documentat ulterior cel puțin un deces în custodie (Valeriu Boboc) și sute de cazuri de tortură și rele tratamente.",
event5_date: "După Aprilie 2009",
event5_title: "Urmări și Alegeri Noi",
event5_quick: "Sub presiune, guvernul acceptă renumărarea voturilor, care confirmă rezultatul. Cu toate acestea, în iulie au loc alegeri noi, care duc la schimbarea guvernului.",
event5_standard: "Evenimentele din 7 aprilie au declanșat o criză politică profundă. O renumărare a voturilor din 5 aprilie nu a schimbat semnificativ rezultatul. Cu toate acestea, Parlamentul nu a reușit să aleagă un nou președinte, declanșând alegeri parlamentare anticipate la 29 iulie 2009. PCRM a pierdut majoritatea, iar la putere a venit o nouă coaliție pro-occidentală, Alianța pentru Integrare Europeană.",
event5_scholar: "Impactul pe termen lung a inclus o schimbare decisivă în orientarea geopolitică a Moldovei și o supraveghere sporită a sistemelor sale de justiție și de aplicare a legii. Problema răspunderii pentru tortura comisă în timpul represiunii rămâne o problemă sensibilă și doar parțial rezolvată în societatea moldovenească.",
claim_title: "Verificarea Afirmațiilor",
claim_question: "A fost Moldova prima 'Revoluție Twitter'?",
claim_verdict: "<strong class=\"font-bold\">Verdict: Dezbătut.</strong> Moldova a fost printre primele care au fost etichetate pe scară largă drept 'Revoluție Twitter' (aprilie 2009), popularizând termenul. Cu toate acestea, rolul cauzal real al Twitter este contestat.",
claim_for: "<strong>Pentru:</strong> Presa contemporană, precum <a href=\"https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Foreign Policy</a> și <em>WIRED</em>, a prezentat-o imediat în acest fel.",
claim_against: "<strong>Împotrivă:</strong> Analizele ulterioare au evidențiat numărul redus de utilizatori locali de Twitter și importanța mai mare a SMS-urilor și a blogurilor.",
library_title: "Biblioteca",
library_book1_title: "Revoluţia Twitter. Episodul întâi",
library_book1_desc: "Antologie, ARC/Știința, 2010",
library_book2_title: "Aceasta e prima mea revoluţie.",
library_book2_desc: "Maria-Paula Erizanu, 2010",
library_explore: "Explorează toate sursele →",
map_title: "Locații Cheie",
map_svg_title: "Chișinău - Zona de Protest",
map_svg_parliament: "(2) Parlament",
map_svg_presidency: "(3) Președinție",
map_svg_legend1: "(1) Piața Marii Adunări Naționale (Centrul protestului)",
map_svg_legend2: "(2, 3) Clădiri guvernamentale luate cu asalt de protestatari",
gallery_title: "Din Arhive",
gallery_view_all: "Vezi Toate Materialele →",
about_title: "Despre Acest Proiect",
about_text: "PMAN.md este o inițiativă de istorie digitală a <strong>Cohesion Lab</strong> dedicată conservării și explicării evenimentelor din 7 aprilie 2009. Scopul nostru este de a crea o arhivă definitivă, vie, accesibilă, verificabilă și respectuoasă față de toate perspectivele.",
contribute_title: "Contribuie la Arhivă",
contribute_text: "Ai fotografii, videoclipuri sau povești din aprilie 2009? Ajută-ne să construim o imagine mai completă.",
contribute_button: "Trimite o Propunere",
footer_copyright: "© 2024 Cohesion Lab. Un proiect de patrimoniu digital.",
footer_links: "Vezi paginile noastre <a href=\"#\" class=\"underline\">Metodologie</a> și <a href=\"#\" class=\"underline\">Drepturi și Etică</a> pentru detalii.",
fn1_text: "Raportul final al Misiunii de Observare a Alegerilor OSCE/ODIHR, Varșovia, 2 iunie 2009.",
fn2_text: "Eșanu, Vitalie. 'Istoria unui hashtag'. Postarea descrie crearea hashtag-ului pentru a centraliza informațiile pentru jurnaliștii internaționali.",
fn3_text: "Mungiu-Pippidi, A., & Munteanu, I. (2009). 'Revoluția Twitter din Moldova'. Journal of Democracy, 20(3), 154-161.",
fn4_text: "Raport Amnesty International, 'Moldova: Dreptate pentru Generația 7 Aprilie', 2010.",
modal_library_title: "Bibliografie de Start",
modal_books_title: "Cărți / Volume Editare",
modal_book1: "<em>Revoluţia Twitter. Episodul întâi: Republica Moldova</em> (ARC/Știința, 2010) — Antologie cu studii, documente, imagini.",
modal_book2: "Erizanu, Maria-Paula. <em>Aceasta e prima mea revoluţie. Furaţi-mi-o</em> (Editura Cartier, 2010) — Relatare la persoana întâi, trilingvă, cu fotografii.",
modal_book3: "Popa, Stela. <em>100 de zile</em> (Tritonic, 2009/2010) — Roman plasat în contextul evenimentelor din aprilie.",
modal_scholarly_title: "Lucrări Academice / Recenzate",
modal_scholarly1: "Mungiu-Pippidi, Alina & Munteanu, Igor. <a href=\"https://www.journalofdemocracy.org/articles/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">'Revoluția Twitter din Moldova'</a>, <em>Journal of Democracy</em> 20(3), 2009.",
modal_scholarly2: "'Primăvara moldovenească 2009: Revoluția atipică din 7 aprilie...' în <em>The Palgrave Handbook of Global Counter-Terrorism Policy</em>, capitol din 2021.",
modal_reporting_title: "Reportaje și Analize Contemporane (Aprilie 2009)",
modal_reporting1: "Morozov, Evgeny. <a href=\"https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">'Revoluția Twitter din Moldova'</a>, <em>Foreign Policy</em>, 7 apr. 2009.",
modal_reporting2: "Pachet WIRED Magazine: 'În interiorul Revoluției Twitter din Moldova'; 'Liniște după furtuna Twitter'.",
modal_reporting3: "Centrul Media RFE/RL: Reportaje de la fața locului din Chișinău."
},
ru: {
subtitle_hashtag: "История одного хештега",
nav_submit: "Предложить материалы",
hero_title: "7 апреля 2009 года",
hero_subtitle: "Живая история протестов в Кишиневе. Многоязычный, курируемый и проверяемый архив, разработанный для любого уровня внимания.",
depth_title: "Выберите уровень детализации",
depth_quick: "Кратко",
depth_standard: "Стандарт",
depth_scholar: "Научный",
timeline_title: "Хронология событий",
event1_date: "6 апреля 2009",
event1_title: "Объявлены результаты выборов",
event1_quick: "Правящая Партия коммунистов (ПКРМ) побеждает на выборах на фоне немедленных обвинений в фальсификациях.",
event1_standard: "Центральная избирательная комиссия Молдовы объявляет, что Партия коммунистов (ПКРМ) набрала почти 50% голосов. Лидеры оппозиции немедленно заявляют о нарушениях и сфальсифицированных списках избирателей.",
event1_scholar: "Официальные результаты ЦИК дали ПКРМ 49,48% голосов. Наблюдатели ОБСЕ отметили предвзятую медиа-среду и использование государственных ресурсов, хотя и не назвали выборы сфальсифицированными.",
event2_date: "7 апреля 2009, Утро",
event2_title: "Начинаются стихийные протесты",
event2_quick: "Тысячи людей собираются на площади Великого Национального Собрания (PMAN), организовавшись через SMS и ранние социальные сети под хештегом #pman.",
event2_standard: "Флешмоб, координируемый через SMS и онлайн-форумы, собирает тысячи студентов на PMAN. Блогер Виталий Ешану создает хештег #pman в Twitter для сбора информации, который быстро становится цифровым символом движения.",
event2_scholar: "Децентрализованная мобилизация использовала текстовые сообщения и платформы, такие как Blogger.com. Выбор #pman был решающим для нахождения информации.",
event3_date: "7 апреля 2009, День",
event3_title: "Эскалация и столкновения",
event3_quick: "Протесты перерастают в насилие, толпы штурмуют здания Парламента и Президентуры.",
event3_standard: "Число протестующих возрастает до более чем 15 000 человек. Часть толпы прорывает полицейские кордоны и штурмует здания Парламента и Администрации Президента. Ситуация становится хаотичной, полиция по охране общественного порядка не справляется.",
event3_scholar: "Характер эскалации остается спорным, многие отчеты указывают на присутствие организованных провокаторов.",
event4_date: "7-8 апреля 2009, Ночь",
event4_title: "Репрессии и массовые аресты",
event4_quick: "Полиция начинает жестокие репрессии, арестовывая сотни людей и очищая площадь. Появляются многочисленные сообщения об избиениях и пытках.",
event4_standard: "Ночью правоохранительные органы начинают скоординированную и жестокую операцию. Сотни молодых людей арестованы, часто без разбора, в общественных местах и домах. Задержанных доставляют в полицейские участки, где многие подвергаются жестоким избиениям и пыткам.",
event4_scholar: "Правозащитные организации, включая Amnesty International, позже задокументировали по меньшей мере одну смерть в заключении (Валериу Бобок) и сотни случаев пыток и жестокого обращения.",
event5_date: "После апреля 2009",
event5_title: "Последствия и новые выборы",
event5_quick: "Под давлением правительство соглашается на пересчет голосов, который подтверждает результат. Однако в июле проводятся новые выборы, которые приводят к смене правительства.",
event5_standard: "События 7 апреля вызвали глубокий политический кризис. Пересчет голосов 5 апреля не сильно изменил результат. Однако Парламент не смог избрать нового президента, что привело к досрочным парламентским выборам 29 июля 2009 года. ПКРМ потеряла большинство, и к власти пришла новая прозападная коалиция 'Альянс за европейскую интеграцию'.",
event5_scholar: "Долгосрочные последствия включали решающий сдвиг в геополитической ориентации Молдовы и усиление контроля над ее системами правосудия и правоприменения. Вопрос ответственности за пытки, совершенные во время репрессий, остается чувствительным и лишь частично решенным вопросом в молдавском обществе.",
claim_title: "Проверка утверждений",
claim_question: "Была ли Молдова первой 'Твиттер-революцией'?",
claim_verdict: "<strong class=\"font-bold\">Вердикт: Спорно.</strong> Молдова была одной из первых, кого широко назвали 'Твиттер-революцией' (апрель 2009 г.), что популяризировало этот термин. Однако фактическая причинно-следственная роль Twitter оспаривается.",
claim_for: "<strong>За:</strong> Современные СМИ, такие как <a href=\"https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Foreign Policy</a> и <em>WIRED</em>, сразу же представили это таким образом.",
claim_against: "<strong>Против:</strong> Более поздний анализ показал небольшое количество местных пользователей Twitter и большую важность SMS и блогов.",
library_title: "Библиотека",
library_book1_title: "Твиттер-революция. Эпизод первый",
library_book1_desc: "Антология, ARC/Știința, 2010",
library_book2_title: "Это моя первая революция.",
library_book2_desc: "Мария-Паула Еризану, 2010",
library_explore: "Изучить все источники →",
map_title: "Ключевые места",
map_svg_title: "Кишинев - Зона протеста",
map_svg_parliament: "(2) Парламент",
map_svg_presidency: "(3) Президентура",
map_svg_legend1: "(1) Площадь Великого Национального Собрания (Центр протеста)",
map_svg_legend2: "(2, 3) Правительственные здания, взятые штурмом протестующими",
gallery_title: "Из архивов",
gallery_view_all: "Смотреть все медиа →",
about_title: "О проекте",
about_text: "PMAN.md — это цифровая историческая инициатива <strong>Cohesion Lab</strong>, посвященная сохранению и объяснению событий 7 апреля 2009 года. Наша цель — создать окончательный, живой архив, доступный, проверяемый и уважающий все точки зрения.",
contribute_title: "Внесите вклад в архив",
contribute_text: "У вас есть фотографии, видео или истории с апреля 2009 года? Помогите нам составить более полную картину.",
contribute_button: "Отправить запрос",
footer_copyright: "© 2024 Cohesion Lab. Проект цифрового наследия.",
footer_links: "Смотрите наши страницы <a href=\"#\" class=\"underline\">Методология</a> и <a href=\"#\" class=\"underline\">Права и этика</a> для получения подробной информации.",
fn1_text: "Итоговый отчет Миссии по наблюдению за выборами БДИПЧ/ОБСЕ, Варшава, 2 июня 2009 г.",
fn2_text: "Ешану, Виталий. 'История одного хештега'. В посте описывается создание хештега для централизации информации для международных журналистов.",
fn3_text: "Мунджиу-Пиппиди, А., и Мунтяну, И. (2009). 'Твиттер-революция в Молдове'. Journal of Democracy, 20(3), 154-161.",
fn4_text: "Отчет Amnesty International, 'Молдова: Справедливость для поколения 7 апреля', 2010.",
modal_library_title: "Начальная библиография",
modal_books_title: "Книги / Сборники",
modal_book1: "<em>Твиттер-революция. Эпизод первый: Республика Молдова</em> (ARC/Știința, 2010) — Антология с исследованиями, документами, изображениями.",
modal_book2: "Еризану, Мария-Паула. <em>Это моя первая революция. Украдите ее у меня</em> (Editura Cartier, 2010) — Трехъязычный рассказ от первого лица с фотографиями.",
modal_book3: "Попа, Стела. <em>100 дней</em> (Tritonic, 2009/2010) — Роман, действие которого происходит на фоне апрельских событий.",
modal_scholarly_title: "Научные / Рецензируемые публикации",
modal_scholarly1: "Мунджиу-Пиппиди, Алина и Мунтяну, Игорь. <a href=\"https://www.journalofdemocracy.org/articles/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">'Твиттер-революция в Молдове'</a>, <em>Journal of Democracy</em> 20(3), 2009.",
modal_scholarly2: "'Молдавская весна 2009: Атипичная 'революция' 7 апреля…' в <em>The Palgrave Handbook of Global Counter-Terrorism Policy</em>, глава 2021 года.",
modal_reporting_title: "Современные репортажи и анализ (апрель 2009)",
modal_reporting1: "Морозов, Евгений. <a href=\"https://foreignpolicy.com/2009/04/07/moldovas-twitter-revolution/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">'Твиттер-революция в Молдове'</a>, <em>Foreign Policy</em>, 7 апр. 2009 г.",
modal_reporting2: "Пакет журнала WIRED: 'Внутри молдавской Твиттер-революции'; 'Затишье после Твиттер-бури'.",
modal_reporting3: "Медиа-центр RFE/RL: Репортажи с места событий из Кишинева."
}
};
const body = document.querySelector('body');
const toggleLabels = document.querySelectorAll('.depth-toggle-label');
const modal = document.getElementById('library-modal');
const modalContainer = modal.querySelector('.modal-container');
const openModalBtn = document.getElementById('open-library-modal');
const closeModalBtn = document.getElementById('close-library-modal');
const langSwitchers = document.querySelectorAll('.lang-switcher a');
function setDepth(depth) {
body.classList.remove('depth-quick', 'depth-standard', 'depth-scholar');
body.classList.add(`depth-${depth}`);
toggleLabels.forEach(label => {
label.classList.toggle('active', label.dataset.depth === depth);
});
}
function changeLanguage(lang) {
if (!translations[lang]) return;
document.querySelectorAll('[data-translate]').forEach(el => {
const key = el.dataset.translate;
if (translations[lang][key]) {
el.innerHTML = translations[lang][key];
}
});
document.documentElement.lang = lang;
localStorage.setItem('pman_lang', lang);
langSwitchers.forEach(link => {
link.classList.toggle('active', link.textContent.toLowerCase() === lang);
});
}
// Footnote logic
document.addEventListener('click', (e) => {
const isFootnoteRef = e.target.classList.contains('footnote-ref');
document.querySelectorAll('.footnote-content.show').forEach(fn => {
if (!isFootnoteRef || fn.id !== e.target.dataset.footnote) {
fn.classList.remove('show');
}
});
if (isFootnoteRef) {
const footnoteId = e.target.dataset.footnote;
const footnoteContent = document.getElementById(footnoteId);
if (footnoteContent) {
footnoteContent.classList.toggle('show');
}
}
});
// Modal logic
function openModal() {
modal.classList.remove('pointer-events-none');
modal.classList.add('opacity-100');
modal.classList.remove('opacity-0');
modalContainer.classList.add('scale-100');
modalContainer.classList.remove('scale-95');
}
function closeModal() {
modalContainer.classList.remove('scale-100');
modalContainer.classList.add('scale-95');
modal.classList.add('opacity-0');
modal.classList.remove('opacity-100');
modal.classList.add('pointer-events-none');
}
openModalBtn.addEventListener('click', openModal);
closeModalBtn.addEventListener('click', closeModal);
modal.addEventListener('click', (e) => {
if (e.target === modal) closeModal();
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && !modal.classList.contains('pointer-events-none')) closeModal();
});
// Initial load
document.addEventListener('DOMContentLoaded', () => {
const savedLang = localStorage.getItem('pman_lang') || 'en';
changeLanguage(savedLang);
});
</script>
</body>
</html>