RazNT commited on
Commit
8b5a2e9
·
verified ·
1 Parent(s): 7be4bce

"Create a responsive, interactive data visualization dashboard for a PhD-level research project analyzing climate change impacts on coastal ecosystems. The website should include: A clean, modern UI with a dark theme, using Tailwind CSS for styling. A navigation bar with links to 'Home', 'Data Visualizations', 'Methodology', and 'Publications'. An interactive dashboard section with three Chart.js visualizations: (1) a line chart showing sea level rise from 2000–2025, (2) a bar chart comparing species diversity across five coastal regions, and (3) a scatter plot of temperature anomalies vs. coral bleaching events. Data inputs should be placeholder JSON files (generate sample data if needed). Include a methodology page with a markdown-rendered explanation of statistical models (e.g., ARIMA for time-series forecasting). Ensure mobile-first design with SEO optimization (meta tags, alt text for images). Add a contact form with client-side validation using JavaScript. Generate clean, commented HTML, CSS, and JavaScript code, downloadable as a single HTML file for easy deployment. Preview the output in real-time and allow iterative edits to adjust chart colors to a blue-green palette." - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +658 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Data Visualisation
3
- emoji: 📉
4
- colorFrom: blue
5
- colorTo: purple
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: data-visualisation
3
+ emoji: 🐳
4
+ colorFrom: gray
5
+ colorTo: green
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,658 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="scroll-smooth">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="description" content="PhD Research Dashboard: Analyzing Climate Change Impacts on Coastal Ecosystems">
7
+ <meta name="keywords" content="climate change, coastal ecosystems, data visualization, PhD research, marine biology">
8
+ <meta name="author" content="PhD Researcher">
9
+ <title>Coastal Climate Research Dashboard</title>
10
+ <script src="https://cdn.tailwindcss.com"></script>
11
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
12
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
13
+ <style>
14
+ .markdown-content h2 {
15
+ @apply text-xl font-bold mt-6 mb-3 text-teal-300;
16
+ }
17
+ .markdown-content p {
18
+ @apply mb-4 text-gray-300;
19
+ }
20
+ .markdown-content ul {
21
+ @apply list-disc pl-5 mb-4 text-gray-300;
22
+ }
23
+ .markdown-content code {
24
+ @apply bg-gray-700 px-2 py-1 rounded text-sm;
25
+ }
26
+ .chart-container {
27
+ position: relative;
28
+ height: 100%;
29
+ width: 100%;
30
+ }
31
+ .nav-link:hover::after {
32
+ @apply w-full;
33
+ }
34
+ .nav-link::after {
35
+ @apply content-[''] block h-0.5 bg-teal-400 w-0 transition-all duration-300;
36
+ }
37
+ .input-error {
38
+ @apply border-red-500;
39
+ }
40
+ .error-message {
41
+ @apply text-red-400 text-sm mt-1 hidden;
42
+ }
43
+ </style>
44
+ </head>
45
+ <body class="bg-gray-900 text-gray-100 min-h-screen flex flex-col">
46
+ <!-- Navigation Bar -->
47
+ <nav class="bg-gray-800 shadow-lg sticky top-0 z-50">
48
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
49
+ <div class="flex items-center justify-between h-16">
50
+ <div class="flex items-center">
51
+ <div class="flex-shrink-0">
52
+ <span class="text-teal-400 font-bold text-xl">Coastal Research</span>
53
+ </div>
54
+ <div class="hidden md:block">
55
+ <div class="ml-10 flex items-baseline space-x-4">
56
+ <a href="#home" class="nav-link px-3 py-2 rounded-md text-sm font-medium text-gray-300 hover:text-white">Home</a>
57
+ <a href="#visualizations" class="nav-link px-3 py-2 rounded-md text-sm font-medium text-gray-300 hover:text-white">Data Visualizations</a>
58
+ <a href="#methodology" class="nav-link px-3 py-2 rounded-md text-sm font-medium text-gray-300 hover:text-white">Methodology</a>
59
+ <a href="#publications" class="nav-link px-3 py-2 rounded-md text-sm font-medium text-gray-300 hover:text-white">Publications</a>
60
+ <a href="#contact" class="nav-link px-3 py-2 rounded-md text-sm font-medium text-gray-300 hover:text-white">Contact</a>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ <div class="-mr-2 flex md:hidden">
65
+ <button type="button" id="mobile-menu-button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none">
66
+ <svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
67
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
68
+ </svg>
69
+ </button>
70
+ </div>
71
+ </div>
72
+ </div>
73
+ <!-- Mobile menu -->
74
+ <div class="md:hidden hidden" id="mobile-menu">
75
+ <div class="px-2 pt-2 pb-3 space-y-1 sm:px-3">
76
+ <a href="#home" class="block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-700">Home</a>
77
+ <a href="#visualizations" class="block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-700">Data Visualizations</a>
78
+ <a href="#methodology" class="block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-700">Methodology</a>
79
+ <a href="#publications" class="block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-700">Publications</a>
80
+ <a href="#contact" class="block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-700">Contact</a>
81
+ </div>
82
+ </div>
83
+ </nav>
84
+
85
+ <!-- Main Content -->
86
+ <main class="flex-grow">
87
+ <!-- Home Section -->
88
+ <section id="home" class="py-20 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto">
89
+ <div class="text-center">
90
+ <h1 class="text-4xl md:text-5xl font-bold mb-6 text-teal-400">Climate Change Impacts on Coastal Ecosystems</h1>
91
+ <p class="text-xl md:text-2xl text-gray-300 max-w-3xl mx-auto">
92
+ A PhD research project analyzing the effects of climate change on marine biodiversity, sea level rise, and coastal ecosystem health.
93
+ </p>
94
+ <div class="mt-10">
95
+ <a href="#visualizations" class="inline-flex items-center px-6 py-3 border border-transparent text-base font-medium rounded-md text-gray-900 bg-teal-400 hover:bg-teal-500 transition duration-300">
96
+ Explore Data Visualizations
97
+ <svg class="ml-3 -mr-1 h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
98
+ <path fill-rule="evenodd" d="M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z" clip-rule="evenodd" />
99
+ </svg>
100
+ </a>
101
+ </div>
102
+ </div>
103
+ </section>
104
+
105
+ <!-- Data Visualizations Section -->
106
+ <section id="visualizations" class="py-16 bg-gray-800">
107
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
108
+ <div class="text-center mb-12">
109
+ <h2 class="text-3xl font-bold text-teal-400 mb-4">Interactive Data Visualizations</h2>
110
+ <p class="text-lg text-gray-300 max-w-3xl mx-auto">
111
+ Explore the key findings through interactive charts. Click on legend items to toggle data series.
112
+ </p>
113
+ </div>
114
+
115
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
116
+ <!-- Sea Level Rise Chart -->
117
+ <div class="bg-gray-700 p-6 rounded-lg shadow-lg">
118
+ <h3 class="text-xl font-semibold text-teal-300 mb-4">Sea Level Rise (2000-2025)</h3>
119
+ <div class="chart-container">
120
+ <canvas id="seaLevelChart"></canvas>
121
+ </div>
122
+ <div class="mt-4 text-sm text-gray-400">
123
+ <p>Projected sea level rise based on satellite altimetry data and climate models.</p>
124
+ </div>
125
+ </div>
126
+
127
+ <!-- Species Diversity Chart -->
128
+ <div class="bg-gray-700 p-6 rounded-lg shadow-lg">
129
+ <h3 class="text-xl font-semibold text-teal-300 mb-4">Species Diversity Across Coastal Regions</h3>
130
+ <div class="chart-container">
131
+ <canvas id="speciesChart"></canvas>
132
+ </div>
133
+ <div class="mt-4 text-sm text-gray-400">
134
+ <p>Comparison of marine species diversity across five major coastal ecosystems.</p>
135
+ </div>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- Temperature Anomalies vs Coral Bleaching Chart -->
140
+ <div class="bg-gray-700 p-6 rounded-lg shadow-lg">
141
+ <h3 class="text-xl font-semibold text-teal-300 mb-4">Temperature Anomalies vs Coral Bleaching Events</h3>
142
+ <div class="chart-container">
143
+ <canvas id="bleachingChart"></canvas>
144
+ </div>
145
+ <div class="mt-4 text-sm text-gray-400">
146
+ <p>Relationship between ocean temperature anomalies and coral bleaching severity (2000-2023).</p>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </section>
151
+
152
+ <!-- Methodology Section -->
153
+ <section id="methodology" class="py-16">
154
+ <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
155
+ <div class="text-center mb-12">
156
+ <h2 class="text-3xl font-bold text-teal-400 mb-4">Research Methodology</h2>
157
+ <p class="text-lg text-gray-300">
158
+ Detailed explanation of the statistical models and data collection protocols.
159
+ </p>
160
+ </div>
161
+
162
+ <div class="markdown-content bg-gray-800 p-6 rounded-lg shadow-lg">
163
+ <!-- Markdown content will be rendered here by JavaScript -->
164
+ </div>
165
+ </div>
166
+ </section>
167
+
168
+ <!-- Publications Section -->
169
+ <section id="publications" class="py-16 bg-gray-800">
170
+ <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
171
+ <div class="text-center mb-12">
172
+ <h2 class="text-3xl font-bold text-teal-400 mb-4">Publications</h2>
173
+ <p class="text-lg text-gray-300">
174
+ Peer-reviewed research papers and conference presentations.
175
+ </p>
176
+ </div>
177
+
178
+ <div class="space-y-6">
179
+ <div class="bg-gray-700 p-6 rounded-lg shadow-lg">
180
+ <h3 class="text-xl font-semibold text-teal-300 mb-2">"Long-term impacts of sea level rise on coastal biodiversity"</h3>
181
+ <p class="text-gray-400 mb-2">Journal of Marine Ecology, 2023</p>
182
+ <p class="text-gray-300">This study examines the correlation between rising sea levels and changes in species distribution patterns across five coastal regions over a 25-year period.</p>
183
+ <a href="#" class="inline-block mt-3 text-teal-400 hover:text-teal-300">Read Full Paper →</a>
184
+ </div>
185
+
186
+ <div class="bg-gray-700 p-6 rounded-lg shadow-lg">
187
+ <h3 class="text-xl font-semibold text-teal-300 mb-2">"ARIMA modeling of temperature anomalies in tropical coastal waters"</h3>
188
+ <p class="text-gray-400 mb-2">Climate Dynamics, 2022</p>
189
+ <p class="text-gray-300">Presents an autoregressive integrated moving average model for predicting ocean temperature anomalies and their ecological impacts.</p>
190
+ <a href="#" class="inline-block mt-3 text-teal-400 hover:text-teal-300">Read Full Paper →</a>
191
+ </div>
192
+
193
+ <div class="bg-gray-700 p-6 rounded-lg shadow-lg">
194
+ <h3 class="text-xl font-semibold text-teal-300 mb-2">"Coral reef resilience under climate change scenarios"</h3>
195
+ <p class="text-gray-400 mb-2">Proceedings of the International Coral Reef Symposium, 2021</p>
196
+ <p class="text-gray-300">Analysis of coral bleaching events in relation to temperature anomalies and projections for future reef health under various climate scenarios.</p>
197
+ <a href="#" class="inline-block mt-3 text-teal-400 hover:text-teal-300">Read Full Paper →</a>
198
+ </div>
199
+ </div>
200
+ </div>
201
+ </section>
202
+
203
+ <!-- Contact Section -->
204
+ <section id="contact" class="py-16">
205
+ <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
206
+ <div class="text-center mb-12">
207
+ <h2 class="text-3xl font-bold text-teal-400 mb-4">Contact the Researcher</h2>
208
+ <p class="text-lg text-gray-300">
209
+ For collaboration inquiries or additional information about this research.
210
+ </p>
211
+ </div>
212
+
213
+ <form id="contactForm" class="bg-gray-800 p-6 rounded-lg shadow-lg">
214
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
215
+ <div>
216
+ <label for="name" class="block text-sm font-medium text-gray-300 mb-1">Full Name</label>
217
+ <input type="text" id="name" name="name" class="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-md focus:ring-2 focus:ring-teal-500 focus:border-teal-500 text-gray-100">
218
+ <p id="name-error" class="error-message">Please enter your name</p>
219
+ </div>
220
+ <div>
221
+ <label for="email" class="block text-sm font-medium text-gray-300 mb-1">Email Address</label>
222
+ <input type="email" id="email" name="email" class="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-md focus:ring-2 focus:ring-teal-500 focus:border-teal-500 text-gray-100">
223
+ <p id="email-error" class="error-message">Please enter a valid email address</p>
224
+ </div>
225
+ </div>
226
+ <div class="mt-6">
227
+ <label for="subject" class="block text-sm font-medium text-gray-300 mb-1">Subject</label>
228
+ <input type="text" id="subject" name="subject" class="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-md focus:ring-2 focus:ring-teal-500 focus:border-teal-500 text-gray-100">
229
+ <p id="subject-error" class="error-message">Please enter a subject</p>
230
+ </div>
231
+ <div class="mt-6">
232
+ <label for="message" class="block text-sm font-medium text-gray-300 mb-1">Message</label>
233
+ <textarea id="message" name="message" rows="5" class="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-md focus:ring-2 focus:ring-teal-500 focus:border-teal-500 text-gray-100"></textarea>
234
+ <p id="message-error" class="error-message">Please enter your message</p>
235
+ </div>
236
+ <div class="mt-8">
237
+ <button type="submit" class="w-full px-6 py-3 bg-teal-600 hover:bg-teal-700 text-white font-medium rounded-md transition duration-300">
238
+ Send Message
239
+ </button>
240
+ </div>
241
+ <div id="form-success" class="mt-4 p-4 bg-green-800 text-green-100 rounded-md hidden">
242
+ Thank you for your message! We'll get back to you soon.
243
+ </div>
244
+ </form>
245
+ </div>
246
+ </section>
247
+ </main>
248
+
249
+ <!-- Footer -->
250
+ <footer class="bg-gray-800 py-8">
251
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
252
+ <div class="flex flex-col md:flex-row justify-between items-center">
253
+ <div class="mb-4 md:mb-0">
254
+ <span class="text-teal-400 font-bold text-lg">Coastal Climate Research</span>
255
+ <p class="text-gray-400 text-sm mt-1">PhD Research Project © 2023</p>
256
+ </div>
257
+ <div class="flex space-x-6">
258
+ <a href="#" class="text-gray-400 hover:text-teal-400">
259
+ <svg class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24">
260
+ <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
261
+ </svg>
262
+ </a>
263
+ <a href="#" class="text-gray-400 hover:text-teal-400">
264
+ <svg class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24">
265
+ <path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/>
266
+ </svg>
267
+ </a>
268
+ <a href="#" class="text-gray-400 hover:text-teal-400">
269
+ <svg class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24">
270
+ <path d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 14-7.503 14-14 0-.21-.005-.418-.014-.627.961-.689 1.8-1.56 2.46-2.548l-.047-.02z"/>
271
+ </svg>
272
+ </a>
273
+ </div>
274
+ </div>
275
+ </div>
276
+ </footer>
277
+
278
+ <script>
279
+ // Mobile menu toggle
280
+ document.getElementById('mobile-menu-button').addEventListener('click', function() {
281
+ const menu = document.getElementById('mobile-menu');
282
+ menu.classList.toggle('hidden');
283
+ });
284
+
285
+ // Sample data for charts
286
+ const seaLevelData = {
287
+ years: Array.from({length: 26}, (_, i) => 2000 + i),
288
+ levels: Array.from({length: 26}, (_, i) => {
289
+ const base = 50 + Math.random() * 10;
290
+ const trend = i * 1.5;
291
+ const variation = Math.sin(i / 3) * 2 + Math.random() * 1.5;
292
+ return base + trend + variation;
293
+ }),
294
+ projections: Array.from({length: 26}, (_, i) => {
295
+ if (i < 23) return null;
296
+ const base = 50 + Math.random() * 10;
297
+ const trend = i * 1.8;
298
+ const variation = Math.sin(i / 3) * 2 + Math.random() * 1.5;
299
+ return base + trend + variation;
300
+ })
301
+ };
302
+
303
+ const speciesData = {
304
+ regions: ['Great Barrier Reef', 'Gulf of Mexico', 'Mediterranean', 'Southeast Asia', 'Caribbean'],
305
+ diversity: [85, 72, 68, 91, 78],
306
+ change: [-12, -8, -5, -15, -10]
307
+ };
308
+
309
+ const bleachingData = {
310
+ anomalies: Array.from({length: 50}, () => Math.random() * 2.5),
311
+ bleaching: Array.from({length: 50}, (_, i) => {
312
+ const base = i < 25 ? Math.random() * 30 : 20 + Math.random() * 50;
313
+ return base * (1 + Math.random() * 0.3);
314
+ }),
315
+ years: Array.from({length: 50}, (_, i) => 2000 + Math.floor(i / 2))
316
+ };
317
+
318
+ // Initialize charts
319
+ document.addEventListener('DOMContentLoaded', function() {
320
+ // Sea Level Rise Chart
321
+ const seaLevelCtx = document.getElementById('seaLevelChart').getContext('2d');
322
+ const seaLevelChart = new Chart(seaLevelCtx, {
323
+ type: 'line',
324
+ data: {
325
+ labels: seaLevelData.years,
326
+ datasets: [
327
+ {
328
+ label: 'Observed Sea Level (mm)',
329
+ data: seaLevelData.levels,
330
+ borderColor: '#4fd1c5',
331
+ backgroundColor: 'rgba(79, 209, 197, 0.1)',
332
+ borderWidth: 2,
333
+ tension: 0.3,
334
+ fill: true
335
+ },
336
+ {
337
+ label: 'Projected Sea Level (mm)',
338
+ data: seaLevelData.projections,
339
+ borderColor: '#38b2ac',
340
+ backgroundColor: 'rgba(56, 178, 172, 0.1)',
341
+ borderWidth: 2,
342
+ borderDash: [5, 5],
343
+ tension: 0.3,
344
+ fill: true
345
+ }
346
+ ]
347
+ },
348
+ options: {
349
+ responsive: true,
350
+ maintainAspectRatio: false,
351
+ plugins: {
352
+ legend: {
353
+ position: 'top',
354
+ labels: {
355
+ color: '#e2e8f0'
356
+ }
357
+ },
358
+ tooltip: {
359
+ mode: 'index',
360
+ intersect: false
361
+ }
362
+ },
363
+ scales: {
364
+ x: {
365
+ grid: {
366
+ color: 'rgba(74, 85, 104, 0.5)'
367
+ },
368
+ ticks: {
369
+ color: '#e2e8f0'
370
+ }
371
+ },
372
+ y: {
373
+ grid: {
374
+ color: 'rgba(74, 85, 104, 0.5)'
375
+ },
376
+ ticks: {
377
+ color: '#e2e8f0'
378
+ },
379
+ title: {
380
+ display: true,
381
+ text: 'Sea Level Change (mm)',
382
+ color: '#e2e8f0'
383
+ }
384
+ }
385
+ },
386
+ interaction: {
387
+ mode: 'nearest',
388
+ axis: 'x',
389
+ intersect: false
390
+ }
391
+ }
392
+ });
393
+
394
+ // Species Diversity Chart
395
+ const speciesCtx = document.getElementById('speciesChart').getContext('2d');
396
+ const speciesChart = new Chart(speciesCtx, {
397
+ type: 'bar',
398
+ data: {
399
+ labels: speciesData.regions,
400
+ datasets: [
401
+ {
402
+ label: 'Current Species Diversity Index',
403
+ data: speciesData.diversity,
404
+ backgroundColor: 'rgba(72, 187, 120, 0.7)',
405
+ borderColor: 'rgba(72, 187, 120, 1)',
406
+ borderWidth: 1
407
+ },
408
+ {
409
+ label: 'Change Since 2000 (%)',
410
+ data: speciesData.change,
411
+ backgroundColor: 'rgba(240, 101, 67, 0.7)',
412
+ borderColor: 'rgba(240, 101, 67, 1)',
413
+ borderWidth: 1,
414
+ type: 'line',
415
+ yAxisID: 'y1'
416
+ }
417
+ ]
418
+ },
419
+ options: {
420
+ responsive: true,
421
+ maintainAspectRatio: false,
422
+ plugins: {
423
+ legend: {
424
+ position: 'top',
425
+ labels: {
426
+ color: '#e2e8f0'
427
+ }
428
+ }
429
+ },
430
+ scales: {
431
+ x: {
432
+ grid: {
433
+ color: 'rgba(74, 85, 104, 0.5)'
434
+ },
435
+ ticks: {
436
+ color: '#e2e8f0'
437
+ }
438
+ },
439
+ y: {
440
+ grid: {
441
+ color: 'rgba(74, 85, 104, 0.5)'
442
+ },
443
+ ticks: {
444
+ color: '#e2e8f0'
445
+ },
446
+ title: {
447
+ display: true,
448
+ text: 'Diversity Index',
449
+ color: '#e2e8f0'
450
+ }
451
+ },
452
+ y1: {
453
+ position: 'right',
454
+ grid: {
455
+ drawOnChartArea: false,
456
+ color: 'rgba(74, 85, 104, 0.5)'
457
+ },
458
+ ticks: {
459
+ color: '#e2e8f0'
460
+ },
461
+ title: {
462
+ display: true,
463
+ text: 'Change (%)',
464
+ color: '#e2e8f0'
465
+ }
466
+ }
467
+ }
468
+ }
469
+ });
470
+
471
+ // Bleaching Chart
472
+ const bleachingCtx = document.getElementById('bleachingChart').getContext('2d');
473
+ const bleachingChart = new Chart(bleachingCtx, {
474
+ type: 'scatter',
475
+ data: {
476
+ datasets: [{
477
+ label: 'Coral Bleaching Events',
478
+ data: bleachingData.anomalies.map((anomaly, i) => ({
479
+ x: anomaly,
480
+ y: bleachingData.bleaching[i],
481
+ r: 8,
482
+ year: bleachingData.years[i]
483
+ })),
484
+ backgroundColor: 'rgba(66, 153, 225, 0.7)',
485
+ borderColor: 'rgba(66, 153, 225, 1)',
486
+ borderWidth: 1
487
+ }]
488
+ },
489
+ options: {
490
+ responsive: true,
491
+ maintainAspectRatio: false,
492
+ plugins: {
493
+ legend: {
494
+ labels: {
495
+ color: '#e2e8f0'
496
+ }
497
+ },
498
+ tooltip: {
499
+ callbacks: {
500
+ label: function(context) {
501
+ return `Year: ${context.raw.year}, Bleaching: ${context.parsed.y.toFixed(1)}%, Anomaly: ${context.parsed.x.toFixed(2)}°C`;
502
+ }
503
+ }
504
+ }
505
+ },
506
+ scales: {
507
+ x: {
508
+ title: {
509
+ display: true,
510
+ text: 'Temperature Anomaly (°C)',
511
+ color: '#e2e8f0'
512
+ },
513
+ grid: {
514
+ color: 'rgba(74, 85, 104, 0.5)'
515
+ },
516
+ ticks: {
517
+ color: '#e2e8f0'
518
+ }
519
+ },
520
+ y: {
521
+ title: {
522
+ display: true,
523
+ text: 'Bleaching Severity (%)',
524
+ color: '#e2e8f0'
525
+ },
526
+ grid: {
527
+ color: 'rgba(74, 85, 104, 0.5)'
528
+ },
529
+ ticks: {
530
+ color: '#e2e8f0'
531
+ }
532
+ }
533
+ }
534
+ }
535
+ });
536
+
537
+ // Render methodology markdown
538
+ const methodologyMarkdown = `
539
+ ## Research Methodology Overview
540
+
541
+ This study employs a multi-disciplinary approach combining field observations, remote sensing data, and statistical modeling to analyze climate change impacts on coastal ecosystems.
542
+
543
+ ### Data Collection
544
+
545
+ - **Sea Level Data**: Obtained from satellite altimetry (Jason-3, Sentinel-6) and tidal gauge stations
546
+ - **Biodiversity Surveys**: Conducted at 120 sites across five coastal regions (2015-2023)
547
+ - **Temperature Anomalies**: Calculated from NOAA's OISST dataset (1/4° resolution)
548
+
549
+ ### Statistical Models
550
+
551
+ #### ARIMA for Time-Series Forecasting
552
+
553
+ We use AutoRegressive Integrated Moving Average (ARIMA) models to forecast sea level rise and temperature anomalies:
554
+
555
+ \`\`\`python
556
+ from statsmodels.tsa.arima.model import ARIMA
557
+
558
+ # Example ARIMA(1,1,1) model for sea level
559
+ model = ARIMA(sea_level_data, order=(1,1,1))
560
+ results = model.fit()
561
+ forecast = results.get_forecast(steps=36)
562
+ \`\`\`
563
+
564
+ Key parameters:
565
+ - p (autoregressive order): 1
566
+ - d (differencing order): 1
567
+ - q (moving average order): 1
568
+
569
+ #### Generalized Linear Models for Species Diversity
570
+
571
+ \`\`\`r
572
+ # GLM example in R
573
+ diversity_model <- glm(SpeciesCount ~ Temperature + Salinity + Year,
574
+ data = survey_data,
575
+ family = poisson(link = "log"))
576
+ \`\`\`
577
+
578
+ ### Machine Learning Approaches
579
+
580
+ For coral bleaching prediction:
581
+ - Random Forest classifier (accuracy: 82%)
582
+ - XGBoost regression for severity estimation (R²: 0.76)
583
+
584
+ ### Field Validation
585
+
586
+ All models are validated against:
587
+ 1. Independent survey data
588
+ 2. Historical records
589
+ 3. Expert ecological assessments
590
+ `;
591
+
592
+ document.querySelector('.markdown-content').innerHTML = marked.parse(methodologyMarkdown);
593
+
594
+ // Contact form validation
595
+ const contactForm = document.getElementById('contactForm');
596
+ const inputs = ['name', 'email', 'subject', 'message'];
597
+
598
+ contactForm.addEventListener('submit', function(e) {
599
+ e.preventDefault();
600
+ let isValid = true;
601
+
602
+ inputs.forEach(inputId => {
603
+ const input = document.getElementById(inputId);
604
+ const error = document.getElementById(`${inputId}-error`);
605
+
606
+ if (!input.value.trim()) {
607
+ input.classList.add('input-error');
608
+ error.classList.remove('hidden');
609
+ isValid = false;
610
+ } else {
611
+ input.classList.remove('input-error');
612
+ error.classList.add('hidden');
613
+ }
614
+ });
615
+
616
+ // Additional email validation
617
+ const email = document.getElementById('email');
618
+ const emailError = document.getElementById('email-error');
619
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
620
+
621
+ if (!emailRegex.test(email.value)) {
622
+ email.classList.add('input-error');
623
+ emailError.textContent = 'Please enter a valid email address';
624
+ emailError.classList.remove('hidden');
625
+ isValid = false;
626
+ }
627
+
628
+ if (isValid) {
629
+ // In a real application, you would send the form data to a server here
630
+ contactForm.reset();
631
+ document.getElementById('form-success').classList.remove('hidden');
632
+ setTimeout(() => {
633
+ document.getElementById('form-success').classList.add('hidden');
634
+ }, 5000);
635
+ }
636
+ });
637
+
638
+ // Reset validation on input
639
+ inputs.forEach(inputId => {
640
+ document.getElementById(inputId).addEventListener('input', function() {
641
+ this.classList.remove('input-error');
642
+ document.getElementById(`${inputId}-error`).classList.add('hidden');
643
+ });
644
+ });
645
+ });
646
+
647
+ // Smooth scrolling for anchor links
648
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
649
+ anchor.addEventListener('click', function(e) {
650
+ e.preventDefault();
651
+ document.querySelector(this.getAttribute('href')).scrollIntoView({
652
+ behavior: 'smooth'
653
+ });
654
+ });
655
+ });
656
+ </script>
657
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=RazNT/data-visualisation" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
658
+ </html>