-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstudy.html
More file actions
120 lines (108 loc) · 6.57 KB
/
study.html
File metadata and controls
120 lines (108 loc) · 6.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Case Study | Dev Case Studies</title>
<script>
(function() {
var KEY = 'imx_theme';
var saved = null;
try { saved = localStorage.getItem(KEY); } catch (e) {}
function resolve(pref) {
if (pref === 'light' || pref === 'dark') return pref;
return (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light';
}
document.documentElement.setAttribute('data-theme', resolve(saved));
})();
</script>
<meta name="description" content="An evidence-based development case study with cited analysis, key data, and lessons learned.">
<meta property="og:type" content="article">
<meta property="og:title" content="Case Study | Dev Case Studies">
<meta property="og:description" content="Evidence-based development case study with cited analysis and lessons learned.">
<meta property="og:site_name" content="Dev Case Studies">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Case Study | Dev Case Studies">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232d5f8a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='M4 19.5A2.5 2.5 0 0 1 6.5 17H20'/><path d='M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z'/></svg>" type="image/svg+xml">
<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=Caveat:wght@400;500;600&family=Inter:wght@400;500;600;700&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,600;0,8..60,700;1,8..60,400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<a href="#study-main" class="skip-link">Skip to main content</a>
<header class="site-header" role="banner">
<div class="container">
<a href="./index.html" class="site-logo">
<span class="site-logo-icon" aria-hidden="true"><span class="si"><svg viewBox="0 0 24 24"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg></span></span>
<span>Dev Case Studies</span>
</a>
<nav class="site-nav" aria-label="Main navigation">
<a href="./index.html">Library</a>
<div class="theme-selector" role="group" aria-label="Theme selection">
<button class="theme-btn" data-theme="system" title="System theme" aria-label="Use system theme">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
</button>
<button class="theme-btn" data-theme="light" title="Light theme" aria-label="Use light theme">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>
</button>
<button class="theme-btn" data-theme="dark" title="Dark theme" aria-label="Use dark theme">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>
</button>
</div>
</nav>
</div>
</header>
<main id="study-main">
<div class="container">
<div class="loading-spinner">
<div class="spinner"></div>
<span class="loading-text">Loading case study...</span>
</div>
</div>
</main>
<footer class="site-footer" role="contentinfo">
<div class="container">
<p><strong>Built for learning.</strong> Every case study grounded in real interventions with cited evidence. An educational resource for students, researchers, and practitioners of international development.</p>
</div>
</footer>
<button id="scroll-top" class="scroll-top" aria-label="Scroll to top" title="Scroll to top"><span class="si"><svg viewBox="0 0 24 24"><polyline points="18 15 12 9 6 15"/></svg></span></button>
<div id="toast" class="toast" aria-live="polite"></div>
<script>window.onerror=function(m,s,l,c,e){var g=document.getElementById('study-main');if(g)g.innerHTML='<div style="padding:2rem;color:#c00"><h3>JS Error</h3><p>'+m+'</p><p>'+s+':'+l+'</p></div>';};window.onunhandledrejection=function(e){var g=document.getElementById('study-main');if(g)g.innerHTML='<div style="padding:2rem;color:#c00"><h3>Promise Error</h3><p>'+String(e.reason)+'</p></div>';};</script>
<script src="./js/app.js"></script>
<script>
(function() {
var KEY = 'imx_theme';
var html = document.documentElement;
function getSaved() { try { return localStorage.getItem(KEY); } catch (e) { return null; } }
function resolve(pref) {
if (pref === 'light' || pref === 'dark') return pref;
return (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light';
}
function apply(pref) {
html.setAttribute('data-theme', resolve(pref));
var active = pref || 'system';
document.querySelectorAll('.theme-btn').forEach(function(btn) {
btn.classList.toggle('active', btn.getAttribute('data-theme') === active);
});
}
function setTheme(pref) {
try {
if (pref === 'system' || !pref) localStorage.removeItem(KEY);
else localStorage.setItem(KEY, pref);
} catch (e) {}
apply(pref);
}
apply(getSaved());
document.querySelectorAll('.theme-btn').forEach(function(btn) {
btn.addEventListener('click', function() { setTheme(btn.getAttribute('data-theme')); });
});
if (window.matchMedia) {
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function() {
if (!getSaved()) apply(null);
});
}
})();
</script>
</body>
</html>