<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_2da04b72bb879ce709d8255bcfddcd29 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
.leaflet-container { font-size: 1rem; }
</style>
<style>html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
</style>
<style>#map {
position:absolute;
top:0;
bottom:0;
right:0;
left:0;
}
</style>
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/Control.FullScreen.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/Control.FullScreen.css"/>
</head>
<body>
<div style="
position: fixed;
top: 10px; left: 50px; width: 490px; z-index: 9999;
background-color: white; padding: 12px 14px; border: 1px solid #ccc; border-radius: 8px;
font-family: Arial, sans-serif; font-size: 14px;
box-shadow: 0 1px 4px rgba(0,0,0,0.18);">
<div style="font-size: 18px; font-weight: 700; margin-bottom: 6px;">
Youth Protest Hotspots (Interactive Prototype)
</div>
<div style="line-height: 1.35;">
Updated version with <b>France removed</b>. Click a highlighted country to view protest context and macro indicators:
<b>youth unemployment</b>, <b>inflation</b>, <b>real wage growth</b>, and a
<b>custom youth sentiment score</b> (0–100; lower = more negative / angrier).
</div>
</div>
<div style="
position: fixed;
bottom: 40px; left: 50px; width: 310px; z-index: 9999;
background-color: white; padding: 10px 12px; border: 1px solid #ccc; border-radius: 8px;
font-family: Arial, sans-serif; font-size: 13px;
box-shadow: 0 1px 4px rgba(0,0,0,0.18);">
<div style="font-weight: 700; margin-bottom: 6px;">Legend</div>
<div><span style="color:red;">●</span> Very high protest salience</div>
<div><span style="color:orange;">●</span> High protest salience</div>
<div><span style="color:blue;">●</span> Moderate / moderate–high salience</div>
<hr style="margin: 8px 0;">
<div><b>Important:</b> Because live web access is disabled in this chat, the numeric values are an
<b>illustrative prototype</b> based on broadly available 2023–2024 figures rather than a live-updated database.</div>
</div>
<div class="folium-map" id="map_2da04b72bb879ce709d8255bcfddcd29" ></div>
</body>
<script>
var map_2da04b72bb879ce709d8255bcfddcd29 = L.map(
"map_2da04b72bb879ce709d8255bcfddcd29",
{
center: [15.0, 20.0],
crs: L.CRS.EPSG3857,
...{
"zoom": 2,
"zoomControl": true,
"preferCanvas": false,
}
}
);
L.control.scale().addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var tile_layer_ec65fd0e2abe643aa4ea1afaa937d5d6 = L.tileLayer(
"https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png",
{
"minZoom": 0,
"maxZoom": 20,
"maxNativeZoom": 20,
"noWrap": false,
"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors \u0026copy; \u003ca href=\"https://carto.com/attributions\"\u003eCARTO\u003c/a\u003e",
"subdomains": "abcd",
"detectRetina": false,
"tms": false,
"opacity": 1,
}
);
tile_layer_ec65fd0e2abe643aa4ea1afaa937d5d6.addTo(map_2da04b72bb879ce709d8255bcfddcd29);
L.control.fullscreen(
{
"position": "topleft",
"title": "Full Screen",
"titleCancel": "Exit Full Screen",
"forceSeparateButton": false,
}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var circle_marker_178b1fa92d8c7caa9f5a0d18990d8d3d = L.circleMarker(
[0.0236, 37.9062],
{"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 8, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_72b2988aebbc07e7a0e6391484718203 = L.popup({
"maxWidth": 360,
});
var html_ffc87eab0e22b5fac413257f02f83ce3 = $(<div id="html_ffc87eab0e22b5fac413257f02f83ce3" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Kenya</h4> <p style="margin: 3px 0;"><b>Region:</b> Africa</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2024 anti-Finance Bill protests</p> <p style="margin: 3px 0;"><b>Protest salience:</b> Very high</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 12.7%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 5.1%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 0.8%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 31/100 — Angry / mobilised</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Gen Z-led digital mobilisation against tax hikes, corruption, and elite impunity.</p> </div> </div>)[0];
popup_72b2988aebbc07e7a0e6391484718203.setContent(html_ffc87eab0e22b5fac413257f02f83ce3);
circle_marker_178b1fa92d8c7caa9f5a0d18990d8d3d.bindPopup(popup_72b2988aebbc07e7a0e6391484718203)
;
circle_marker_178b1fa92d8c7caa9f5a0d18990d8d3d.bindTooltip(
`<div>
Kenya — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_bed94fa144baf03a4fdcbacd187ba7ac = L.circleMarker(
[20.5937, 78.9629],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_dd00b0e7135e4d55b5ccc47a7aefa38c = L.popup({
"maxWidth": 360,
});
var html_36670ba19e5c53de41ab4d3c520d421b = $(<div id="html_36670ba19e5c53de41ab4d3c520d421b" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">India</h4> <p style="margin: 3px 0;"><b>Region:</b> Asia</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2024–2026 youth protest waves, including exam-leak anger</p> <p style="margin: 3px 0;"><b>Protest salience:</b> High</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 23.2%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 5.4%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 1.5%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 42/100 — Frustrated but active</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Youth mobilisation linked to jobs, exam integrity, and democratic accountability.</p> </div> </div>)[0];
popup_dd00b0e7135e4d55b5ccc47a7aefa38c.setContent(html_36670ba19e5c53de41ab4d3c520d421b);
circle_marker_bed94fa144baf03a4fdcbacd187ba7ac.bindPopup(popup_dd00b0e7135e4d55b5ccc47a7aefa38c)
;
circle_marker_bed94fa144baf03a4fdcbacd187ba7ac.bindTooltip(
`<div>
India — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_5f872327f58ca478e233da36b4472b98 = L.circleMarker(
[23.685, 90.3563],
{"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "red", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 8, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_b48c55e8e9ccdd568eeef48817cb3ae1 = L.popup({
"maxWidth": 360,
});
var html_a23e635be876d308e326e741fc65291a = $(<div id="html_a23e635be876d308e326e741fc65291a" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Bangladesh</h4> <p style="margin: 3px 0;"><b>Region:</b> Asia</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2024 quota and anti-government youth protests</p> <p style="margin: 3px 0;"><b>Protest salience:</b> Very high</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 12.6%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 9.7%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> -3.2%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 28/100 — Deeply frustrated</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Students were central to the protest wave; grievance mix included jobs, fairness, and repression.</p> </div> </div>)[0];
popup_b48c55e8e9ccdd568eeef48817cb3ae1.setContent(html_a23e635be876d308e326e741fc65291a);
circle_marker_5f872327f58ca478e233da36b4472b98.bindPopup(popup_b48c55e8e9ccdd568eeef48817cb3ae1)
;
circle_marker_5f872327f58ca478e233da36b4472b98.bindTooltip(
`<div>
Bangladesh — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_23547fe5946f722b442a8190d8abe248 = L.circleMarker(
[-0.7893, 113.9213],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_245aa9b3b6e1de532fabbda08bd371d2 = L.popup({
"maxWidth": 360,
});
var html_dd20c405a8a2471359c21b4437dbf3cc = $(<div id="html_dd20c405a8a2471359c21b4437dbf3cc" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Indonesia</h4> <p style="margin: 3px 0;"><b>Region:</b> Asia</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2024 student and youth protests over democratic backsliding</p> <p style="margin: 3px 0;"><b>Protest salience:</b> High</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 16.3%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 2.8%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 3.1%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 54/100 — Mixed / cautiously hopeful</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Youth and students pushed back against perceived democratic erosion and dynastic politics.</p> </div> </div>)[0];
popup_245aa9b3b6e1de532fabbda08bd371d2.setContent(html_dd20c405a8a2471359c21b4437dbf3cc);
circle_marker_23547fe5946f722b442a8190d8abe248.bindPopup(popup_245aa9b3b6e1de532fabbda08bd371d2)
;
circle_marker_23547fe5946f722b442a8190d8abe248.bindTooltip(
`<div>
Indonesia — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_1e3983e5ce32f844be46140c5ca62bfa = L.circleMarker(
[28.3949, 84.124],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_815cb73c1d784b1b2cc5934a156d1697 = L.popup({
"maxWidth": 360,
});
var html_271a77ecaaab3d378cf7f208f42274fe = $(<div id="html_271a77ecaaab3d378cf7f208f42274fe" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Nepal</h4> <p style="margin: 3px 0;"><b>Region:</b> Asia</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2023–2024 youth frustration over jobs, governance, and migration pressures</p> <p style="margin: 3px 0;"><b>Protest salience:</b> Moderate–high</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 19.0%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 5.4%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 1.0%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 40/100 — Disillusioned</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Protest energy connected to weak job creation and anger at the political class.</p> </div> </div>)[0];
popup_815cb73c1d784b1b2cc5934a156d1697.setContent(html_271a77ecaaab3d378cf7f208f42274fe);
circle_marker_1e3983e5ce32f844be46140c5ca62bfa.bindPopup(popup_815cb73c1d784b1b2cc5934a156d1697)
;
circle_marker_1e3983e5ce32f844be46140c5ca62bfa.bindTooltip(
`<div>
Nepal — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_64090343dcf67336cf5accb7aa02a4dd = L.circleMarker(
[9.082, 8.6753],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_7840c594d593c2398726797c6d07cd42 = L.popup({
"maxWidth": 360,
});
var html_659fc52ef46c433e7fc6e9ec8de5829c = $(<div id="html_659fc52ef46c433e7fc6e9ec8de5829c" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Nigeria</h4> <p style="margin: 3px 0;"><b>Region:</b> Africa</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2024 cost-of-living and governance protests</p> <p style="margin: 3px 0;"><b>Protest salience:</b> High</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 14.0%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 31.0%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> -10.5%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 24/100 — Distressed / pessimistic</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Young Nigerians were highly visible in protest actions tied to inflation and economic pain.</p> </div> </div>)[0];
popup_7840c594d593c2398726797c6d07cd42.setContent(html_659fc52ef46c433e7fc6e9ec8de5829c);
circle_marker_64090343dcf67336cf5accb7aa02a4dd.bindPopup(popup_7840c594d593c2398726797c6d07cd42)
;
circle_marker_64090343dcf67336cf5accb7aa02a4dd.bindTooltip(
`<div>
Nigeria — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_f7be651f5ed162303f765846f7226c59 = L.circleMarker(
[42.3154, 43.3569],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_d07cc08d0fd1051a0253b82cf2892b5d = L.popup({
"maxWidth": 360,
});
var html_ada65021a04e5b89d733bbff2dc02df8 = $(<div id="html_ada65021a04e5b89d733bbff2dc02df8" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Georgia</h4> <p style="margin: 3px 0;"><b>Region:</b> Europe/Asia</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2023–2024 youth-led protests over the 'foreign agents' law</p> <p style="margin: 3px 0;"><b>Protest salience:</b> High</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 29.0%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 1.9%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 5.0%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 46/100 — Defiant / pro-change</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Students and young people were central in pro-European, anti-authoritarian mobilisations.</p> </div> </div>)[0];
popup_d07cc08d0fd1051a0253b82cf2892b5d.setContent(html_ada65021a04e5b89d733bbff2dc02df8);
circle_marker_f7be651f5ed162303f765846f7226c59.bindPopup(popup_d07cc08d0fd1051a0253b82cf2892b5d)
;
circle_marker_f7be651f5ed162303f765846f7226c59.bindTooltip(
`<div>
Georgia — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_996b5cebfdae0fd86c50e47c5e0e917c = L.circleMarker(
[30.3753, 69.3451],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_dd0652ef675c5b3147fd22dca64a844b = L.popup({
"maxWidth": 360,
});
var html_435e8826c140a5fdfd048f813afc904a = $(<div id="html_435e8826c140a5fdfd048f813afc904a" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Pakistan</h4> <p style="margin: 3px 0;"><b>Region:</b> Asia</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2023–2024 youth political mobilisation amid inflation and repression</p> <p style="margin: 3px 0;"><b>Protest salience:</b> Moderate–high</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 11.0%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 23.4%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> -12.0%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 23/100 — Angry / pessimistic</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Youth discontent mixed electoral grievances with economic decline and institutional distrust.</p> </div> </div>)[0];
popup_dd0652ef675c5b3147fd22dca64a844b.setContent(html_435e8826c140a5fdfd048f813afc904a);
circle_marker_996b5cebfdae0fd86c50e47c5e0e917c.bindPopup(popup_dd0652ef675c5b3147fd22dca64a844b)
;
circle_marker_996b5cebfdae0fd86c50e47c5e0e917c.bindTooltip(
`<div>
Pakistan — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_b4545c843f8cb2d04e639fdf16622fad = L.circleMarker(
[44.0165, 21.0059],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_4cf79a3dd7edd1f0210937234b029cd5 = L.popup({
"maxWidth": 360,
});
var html_f94d49e8c6175479d80edb335b118233 = $(<div id="html_f94d49e8c6175479d80edb335b118233" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Serbia</h4> <p style="margin: 3px 0;"><b>Region:</b> Europe</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2023–2024 student-led anti-violence and anti-government protests</p> <p style="margin: 3px 0;"><b>Protest salience:</b> Moderate–high</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 24.0%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 4.8%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 6.0%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 47/100 — Mobilised / sceptical</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Students became an important organisational force in broader anti-government protest movements.</p> </div> </div>)[0];
popup_4cf79a3dd7edd1f0210937234b029cd5.setContent(html_f94d49e8c6175479d80edb335b118233);
circle_marker_b4545c843f8cb2d04e639fdf16622fad.bindPopup(popup_4cf79a3dd7edd1f0210937234b029cd5)
;
circle_marker_b4545c843f8cb2d04e639fdf16622fad.bindTooltip(
`<div>
Serbia — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_30cbb7854f14d7b96a8ac4fcb4bb636a = L.circleMarker(
[1.3733, 32.2903],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_7190f6e0934173b7b407898aed45eef7 = L.popup({
"maxWidth": 360,
});
var html_b56c4203893d80d46a6262a117c15593 = $(<div id="html_b56c4203893d80d46a6262a117c15593" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Uganda</h4> <p style="margin: 3px 0;"><b>Region:</b> Africa</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2024 anti-corruption youth protests</p> <p style="margin: 3px 0;"><b>Protest salience:</b> Moderate–high</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 13.3%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 3.4%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 1.2%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 35/100 — Restless</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> A young activist layer drove visible anti-corruption mobilisation.</p> </div> </div>)[0];
popup_7190f6e0934173b7b407898aed45eef7.setContent(html_b56c4203893d80d46a6262a117c15593);
circle_marker_30cbb7854f14d7b96a8ac4fcb4bb636a.bindPopup(popup_7190f6e0934173b7b407898aed45eef7)
;
circle_marker_30cbb7854f14d7b96a8ac4fcb4bb636a.bindTooltip(
`<div>
Uganda — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_84e7ad1ed2b138bc60e530c0544d889c = L.circleMarker(
[14.4974, -14.4524],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_10ef58dddd1836fc9c294bc4607dd89d = L.popup({
"maxWidth": 360,
});
var html_25441887f52b0c08d6f73bc5a47ea31c = $(<div id="html_25441887f52b0c08d6f73bc5a47ea31c" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Senegal</h4> <p style="margin: 3px 0;"><b>Region:</b> Africa</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2023–2024 youth-driven political protests</p> <p style="margin: 3px 0;"><b>Protest salience:</b> Moderate–high</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 10.2%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 2.0%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 1.5%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 39/100 — Demanding change</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Youth anger around governance and democratic process strongly shaped the protest environment.</p> </div> </div>)[0];
popup_10ef58dddd1836fc9c294bc4607dd89d.setContent(html_25441887f52b0c08d6f73bc5a47ea31c);
circle_marker_84e7ad1ed2b138bc60e530c0544d889c.bindPopup(popup_10ef58dddd1836fc9c294bc4607dd89d)
;
circle_marker_84e7ad1ed2b138bc60e530c0544d889c.bindTooltip(
`<div>
Senegal — click for details
</div>`,
{
"sticky": true,
}
);
var circle_marker_02475fd63361af55ae4c1f2ca4360d9f = L.circleMarker(
[38.9637, 35.2433],
{"bubblingMouseEvents": true, "color": "orange", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "orange", "fillOpacity": 0.75, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 7, "stroke": true, "weight": 3}
).addTo(map_2da04b72bb879ce709d8255bcfddcd29);
var popup_fe1f7024e9e5ea87a4b29616612b81aa = L.popup({
"maxWidth": 360,
});
var html_1a3a683dfbdb690782c0f55c6e2bac94 = $(<div id="html_1a3a683dfbdb690782c0f55c6e2bac94" style="width: 100.0%; height: 100.0%;"> <div style="width: 320px; font-family: Arial, sans-serif; font-size: 13px;"> <h4 style="margin-bottom: 8px;">Turkey</h4> <p style="margin: 3px 0;"><b>Region:</b> Europe/Asia</p> <p style="margin: 3px 0;"><b>Main youth protest wave:</b> 2024–2025 youth and student mobilisation over cost of living, democratic rights, and political representation</p> <p style="margin: 3px 0;"><b>Protest salience:</b> High</p> <hr> <p style="margin: 3px 0;"><b>Youth unemployment:</b> 16.3%</p> <p style="margin: 3px 0;"><b>Inflation rate:</b> 58.5%</p> <p style="margin: 3px 0;"><b>Real wage growth:</b> 2.0%</p> <p style="margin: 3px 0;"><b>Youth sentiment:</b> 34/100 — Angry / disillusioned</p> <hr> <p style="margin: 3px 0;"><b>Why it matters:</b> Young people have been highly visible in protest and opposition activity, driven by economic pressure, frustration with institutions, and demands for political change.</p> </div> </div>)[0];
popup_fe1f7024e9e5ea87a4b29616612b81aa.setContent(html_1a3a683dfbdb690782c0f55c6e2bac94);
circle_marker_02475fd63361af55ae4c1f2ca4360d9f.bindPopup(popup_fe1f7024e9e5ea87a4b29616612b81aa)
;
circle_marker_02475fd63361af55ae4c1f2ca4360d9f.bindTooltip(
`<div>
Turkey — click for details
</div>`,
{
"sticky": true,
}
);
</script>
</html>

