thanthamky commited on
Commit
ac218ce
·
verified ·
1 Parent(s): d76efea

Upload 47 files

Browse files
Files changed (48) hide show
  1. .gitattributes +4 -0
  2. analytics.html +797 -0
  3. data/.DS_Store +0 -0
  4. data/common/province_admin_diva.cpg +1 -0
  5. data/common/province_admin_diva.dbf +0 -0
  6. data/common/province_admin_diva.geojson +3 -0
  7. data/common/province_admin_diva.prj +1 -0
  8. data/common/province_admin_diva.qmd +27 -0
  9. data/common/province_admin_diva.shp +3 -0
  10. data/common/province_admin_diva.shx +0 -0
  11. data/common/province_admin_diva_sim.geojson +0 -0
  12. data/common/province_admin_diva_sim.qmd +44 -0
  13. data/common/province_admin_sim.geojson +0 -0
  14. data/disaster/province_disaster_centroid.json +1 -0
  15. data/firm/homepro_disaster_network_map.json +0 -0
  16. data/firm/homeprto_disaster_firm_location_forecast.json +0 -0
  17. data/firm/location_homepro_do_2018-2024.json +0 -0
  18. forecast.html +776 -0
  19. index.html +236 -19
  20. locations.html +594 -0
  21. static/.DS_Store +0 -0
  22. static/css/font-awesome@all.min.css +0 -0
  23. static/css/maplibre-gl@3.0.0.css +1 -0
  24. static/icon/extent.png +0 -0
  25. static/icon/flood.png +0 -0
  26. static/icon/forecast.png +0 -0
  27. static/icon/home.png +0 -0
  28. static/icon/location.png +0 -0
  29. static/icon/logo.png +0 -0
  30. static/icon/pin.png +0 -0
  31. static/icon/play.png +0 -0
  32. static/icon/pm.png +0 -0
  33. static/icon/radar.png +0 -0
  34. static/icon/wind.png +0 -0
  35. static/image/climate.webp +0 -0
  36. static/image/economic.webp +0 -0
  37. static/image/flood.jpeg +0 -0
  38. static/image/hero-city-pin.png +3 -0
  39. static/image/hero-city.jpg +3 -0
  40. static/image/hero.png +0 -0
  41. static/image/pin-location.jpeg +0 -0
  42. static/image/report.jpeg +0 -0
  43. static/js/chart.js +0 -0
  44. static/js/deckgl@9.0.33.min.js +0 -0
  45. static/js/maplibre-gl@3.0.0.js +0 -0
  46. static/js/popper.min.js +6 -0
  47. static/js/tailwind@3.4.5.js +0 -0
  48. static/js/tippy-bundle.umd.min.js +2 -0
.gitattributes CHANGED
@@ -33,3 +33,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ data/common/province_admin_diva.geojson filter=lfs diff=lfs merge=lfs -text
37
+ data/common/province_admin_diva.shp filter=lfs diff=lfs merge=lfs -text
38
+ static/image/hero-city-pin.png filter=lfs diff=lfs merge=lfs -text
39
+ static/image/hero-city.jpg filter=lfs diff=lfs merge=lfs -text
analytics.html ADDED
@@ -0,0 +1,797 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Disaster Risk and Impact Analysis</title>
7
+
8
+ <script src="static/js/deckgl@9.0.33.min.js"></script>
9
+
10
+ <script src="static/js/maplibre-gl@3.0.0.js"></script>
11
+ <link href="static/css/maplibre-gl@3.0.0.css" rel="stylesheet" />
12
+
13
+ <script src="static/js/tailwind@3.4.5.js"></script>
14
+ <script src="static/js/chart.js"></script>
15
+
16
+ <script src="static/js/popper.min.js"></script>
17
+ <script src="static/js/tippy-bundle.umd.min.js"></script>
18
+
19
+ <style>
20
+ html,
21
+ body {
22
+ height: 100%;
23
+ margin: 0;
24
+ }
25
+ #map {
26
+ width: 100%;
27
+ height: 100%;
28
+ position: absolute;
29
+ top: 0;
30
+ left: 0;
31
+ }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <!-- Floating Box for Charts -->
36
+ <div
37
+ class="absolute left-4 top-4 h-9/10 bottom-4 w-2/5 p-6 bg-white backdrop-blur-sm bg-opacity-60 shadow-lg overflow-y-auto z-10 rounded-2xl"
38
+ >
39
+ <h1 class="text-2xl font-bold mb-4 text-center">FIRM Overview</h1>
40
+
41
+ <!-- OVER METRICS -->
42
+ <h1 class="text-l font-bold mb-4">Disaster Affection Index</h1>
43
+ <div class="flex justify-between space-x-4 p-4">
44
+ <div class="flex items-center p-4 bg-white shadow rounded-lg flex-1">
45
+ <div class="flex-1">
46
+ <h3 class="text-gray-700 text-sm font-semibold">Wind</h3>
47
+ <div class="flex items-center">
48
+ <p class="text-xl font-bold text-gray-800">252</p>
49
+ <span class="ml-2 text-green-500">↑ +61%</span>
50
+ </div>
51
+ </div>
52
+ </div>
53
+
54
+ <!-- Metric Widget 2 -->
55
+ <div class="flex items-center p-4 bg-white shadow rounded-lg flex-1">
56
+ <div class="flex-1">
57
+ <h3 class="text-gray-700 text-sm font-semibold">Flood</h3>
58
+ <div class="flex items-center">
59
+ <p class="text-xl font-bold text-gray-800">90</p>
60
+ <span class="ml-2 text-red-500">↓ -5%</span>
61
+ </div>
62
+ </div>
63
+ </div>
64
+
65
+ <!-- Metric Widget 3 -->
66
+ <div class="flex items-center p-4 bg-white shadow rounded-lg flex-1">
67
+ <div class="flex-1">
68
+ <h3 class="text-gray-700 text-sm font-semibold">PM.</h3>
69
+ <div class="flex items-center">
70
+ <p class="text-xl font-bold text-gray-800">36</p>
71
+ <span class="ml-2 text-green-500">↑ +71%</span>
72
+ </div>
73
+ </div>
74
+ </div>
75
+ </div>
76
+ <br />
77
+
78
+ <h1 class="text-l font-bold mb-4">Disaster Affection History</h1>
79
+ <canvas id="dLinearChart" class="bg-transparent rounded-xl"></canvas>
80
+
81
+ <!-- DAP -->
82
+
83
+ <h2 class="text-l font-bold mt-8 mb-4">
84
+ Disaster Affection Probability (DAP)
85
+ </h2>
86
+
87
+ <canvas id="DAPRadarChart" class="bg-transparent rounded-xl"></canvas>
88
+
89
+ <h2 class="text-md mt-8 mb-4">Disaster Affection Probability (DAP)</h2>
90
+
91
+ <div class="relative overflow-x-auto rounded-xl">
92
+ <table
93
+ class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"
94
+ >
95
+ <thead
96
+ class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400"
97
+ >
98
+ <tr>
99
+ <th scope="col" class="px-6 py-3">Order</th>
100
+ <th scope="col" class="px-6 py-3">Finance</th>
101
+ <th scope="col" class="px-6 py-3">Score</th>
102
+ <th scope="col" class="px-6 py-3">Wind</th>
103
+ <th scope="col" class="px-6 py-3">Flood</th>
104
+ <th scope="col" class="px-6 py-3">Air Pollution</th>
105
+ </tr>
106
+ </thead>
107
+ <tbody>
108
+ <tr
109
+ class="bg-amber-300 border-b dark:bg-gray-800 dark:border-gray-700"
110
+ >
111
+ <td class="px-6 py-4">1</td>
112
+ <th
113
+ scope="row"
114
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
115
+ >
116
+ Inventories
117
+ </th>
118
+ <td class="px-6 py-4">0.896</td>
119
+ <td class="px-6 py-4">0.140</td>
120
+ <td class="px-6 py-4">0.372</td>
121
+ <td class="px-6 py-4">0.486</td>
122
+ </tr>
123
+ <tr
124
+ class="bg-amber-200 border-b dark:bg-gray-800 dark:border-gray-700"
125
+ >
126
+ <td class="px-6 py-4">2</td>
127
+ <th
128
+ scope="row"
129
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
130
+ >
131
+ Total assets
132
+ </th>
133
+ <td class="px-6 py-4">0.865</td>
134
+ <td class="px-6 py-4">0.420</td>
135
+ <td class="px-6 py-4">0.360</td>
136
+ <td class="px-6 py-4">0.218</td>
137
+ </tr>
138
+ <tr
139
+ class="bg-amber-100 border-b dark:bg-gray-800 dark:border-gray-700"
140
+ >
141
+ <td class="px-6 py-4">3</td>
142
+ <th
143
+ scope="row"
144
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
145
+ >
146
+ Cost of Revenue
147
+ </th>
148
+ <td class="px-6 py-4">0.859</td>
149
+ <td class="px-6 py-4">0.200</td>
150
+ <td class="px-6 py-4">0.158</td>
151
+ <td class="px-6 py-4">0.640</td>
152
+ </tr>
153
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
154
+ <td class="px-6 py-4">4</td>
155
+ <th
156
+ scope="row"
157
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
158
+ >
159
+ Revenue
160
+ </th>
161
+ <td class="px-6 py-4">0.851</td>
162
+ <td class="px-6 py-4">0.281</td>
163
+ <td class="px-6 py-4">0.155</td>
164
+ <td class="px-6 py-4">0.562</td>
165
+ </tr>
166
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
167
+ <td class="px-6 py-4">5</td>
168
+ <th
169
+ scope="row"
170
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
171
+ >
172
+ Total debts
173
+ </th>
174
+ <td class="px-6 py-4">0.844</td>
175
+ <td class="px-6 py-4">0.431</td>
176
+ <td class="px-6 py-4">0.358</td>
177
+ <td class="px-6 py-4">0.210</td>
178
+ </tr>
179
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
180
+ <td class="px-6 py-4">6</td>
181
+ <th
182
+ scope="row"
183
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
184
+ >
185
+ Cash and cash equivalents
186
+ </th>
187
+ <td class="px-6 py-4">0.807</td>
188
+ <td class="px-6 py-4">0.322</td>
189
+ <td class="px-6 py-4">0.313</td>
190
+ <td class="px-6 py-4">0.363</td>
191
+ </tr>
192
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
193
+ <td class="px-6 py-4">7</td>
194
+ <th
195
+ scope="row"
196
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
197
+ >
198
+ Cash Flow from Financing Activities
199
+ </th>
200
+ <td class="px-6 py-4">0.792</td>
201
+ <td class="px-6 py-4">0.307</td>
202
+ <td class="px-6 py-4">0.318</td>
203
+ <td class="px-6 py-4">0.373</td>
204
+ </tr>
205
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
206
+ <td class="px-6 py-4">8</td>
207
+ <th
208
+ scope="row"
209
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
210
+ >
211
+ Total current liabilities
212
+ </th>
213
+ <td class="px-6 py-4">0.765</td>
214
+ <td class="px-6 py-4">0.200</td>
215
+ <td class="px-6 py-4">0.412</td>
216
+ <td class="px-6 py-4">0.387</td>
217
+ </tr>
218
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
219
+ <td class="px-6 py-4">9</td>
220
+ <th
221
+ scope="row"
222
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
223
+ >
224
+ Total cost
225
+ </th>
226
+ <td class="px-6 py-4">0.734</td>
227
+ <td class="px-6 py-4">0.326</td>
228
+ <td class="px-6 py-4">0.148</td>
229
+ <td class="px-6 py-4">0.525</td>
230
+ </tr>
231
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
232
+ <td class="px-6 py-4">10</td>
233
+ <th
234
+ scope="row"
235
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
236
+ >
237
+ Profit
238
+ </th>
239
+ <td class="px-6 py-4">0.733</td>
240
+ <td class="px-6 py-4">0.274</td>
241
+ <td class="px-6 py-4">0.187</td>
242
+ <td class="px-6 py-4">0.537</td>
243
+ </tr>
244
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
245
+ <td class="px-6 py-4">11</td>
246
+ <th
247
+ scope="row"
248
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
249
+ >
250
+ Cash flow from operating activities
251
+ </th>
252
+ <td class="px-6 py-4">0.675</td>
253
+ <td class="px-6 py-4">0.274</td>
254
+ <td class="px-6 py-4">0.423</td>
255
+ <td class="px-6 py-4">0.301</td>
256
+ </tr>
257
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
258
+ <td class="px-6 py-4">12</td>
259
+ <th
260
+ scope="row"
261
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
262
+ >
263
+ Trade and other receivables
264
+ </th>
265
+ <td class="px-6 py-4">0.675</td>
266
+ <td class="px-6 py-4">0.385</td>
267
+ <td class="px-6 py-4">0.272</td>
268
+ <td class="px-6 py-4">0.342</td>
269
+ </tr>
270
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
271
+ <td class="px-6 py-4">13</td>
272
+ <th
273
+ scope="row"
274
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
275
+ >
276
+ Cash Flow from investing activities
277
+ </th>
278
+ <td class="px-6 py-4">0.650</td>
279
+ <td class="px-6 py-4">0.169</td>
280
+ <td class="px-6 py-4">0.375</td>
281
+ <td class="px-6 py-4">0.454</td>
282
+ </tr>
283
+ </tbody>
284
+ </table>
285
+ </div>
286
+
287
+ <!-- DQC -->
288
+
289
+ <h2 class="text-l font-bold mt-8 mb-4">
290
+ Disaster Quantity Coefficients (DQC)
291
+ </h2>
292
+
293
+ <canvas id="DQCBarChart" class="bg-transparent rounded-xl"></canvas>
294
+
295
+ <!--h2 class="text-md mt-8 mb-4">Disaster Quantity Coefficients (DQC)</h2>
296
+
297
+ <div class="relative overflow-x-auto rounded-xl">
298
+ <table
299
+ class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400"
300
+ >
301
+ <thead
302
+ class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400"
303
+ >
304
+ <tr>
305
+ <th scope="col" class="px-6 py-3">Product name</th>
306
+ <th scope="col" class="px-6 py-3">Color</th>
307
+ <th scope="col" class="px-6 py-3">Category</th>
308
+ <th scope="col" class="px-6 py-3">Price</th>
309
+ </tr>
310
+ </thead>
311
+ <tbody>
312
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
313
+ <th
314
+ scope="row"
315
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
316
+ >
317
+ Apple MacBook Pro 17"
318
+ </th>
319
+ <td class="px-6 py-4">Silver</td>
320
+ <td class="px-6 py-4">Laptop</td>
321
+ <td class="px-6 py-4">$2999</td>
322
+ </tr>
323
+ <tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
324
+ <th
325
+ scope="row"
326
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
327
+ >
328
+ Microsoft Surface Pro
329
+ </th>
330
+ <td class="px-6 py-4">White</td>
331
+ <td class="px-6 py-4">Laptop PC</td>
332
+ <td class="px-6 py-4">$1999</td>
333
+ </tr>
334
+ <tr class="bg-white dark:bg-gray-800">
335
+ <th
336
+ scope="row"
337
+ class="px-6 py-4 font-medium text-black whitespace-nowrap dark:text-white"
338
+ >
339
+ Magic Mouse 2
340
+ </th>
341
+ <td class="px-6 py-4">Black</td>
342
+ <td class="px-6 py-4">Accessories</td>
343
+ <td class="px-6 py-4">$99</td>
344
+ </tr>
345
+ </tbody>
346
+ </table>
347
+ </div-->
348
+ </div>
349
+
350
+ <!-- Fullscreen Map -->
351
+ <div id="map"></div>
352
+
353
+ <!--img
354
+ src="static/icon/logo.png"
355
+ alt="Top-right image"
356
+ class="absolute top-0 right-0 w-48 p-4"
357
+ /-->
358
+
359
+ <a href="index.html">
360
+ <img
361
+ src="static/icon/home.png"
362
+ id="goHome"
363
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-4 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
364
+ />
365
+ </a>
366
+
367
+ <a href="analytics.html">
368
+ <img
369
+ src="static/icon/radar.png"
370
+ id="goOverView"
371
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-20 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
372
+ />
373
+ </a>
374
+
375
+ <a href="locations.html">
376
+ <img
377
+ src="static/icon/location.png"
378
+ id="goLocation"
379
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-36 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
380
+ />
381
+ </a>
382
+
383
+ <a href="forecast.html">
384
+ <img
385
+ src="static/icon/forecast.png"
386
+ id="goForecast"
387
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-52 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
388
+ />
389
+ </a>
390
+
391
+ <img
392
+ src="static/icon/extent.png"
393
+ id="resetViewButton"
394
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg bottom-12 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
395
+ />
396
+
397
+ <img
398
+ src="static/icon/play.png"
399
+ id="animateButton"
400
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg bottom-28 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
401
+ />
402
+
403
+ <script>
404
+ let INIT_VIEW_STATE = {
405
+ longitude: 98.1339,
406
+ latitude: 10.863,
407
+ zoom: 5.594,
408
+ pitch: 48.3549,
409
+ bearing: -17.579,
410
+ };
411
+
412
+ var viewState = INIT_VIEW_STATE;
413
+
414
+ // LAYER
415
+ const layer = new deck.IconLayer({
416
+ id: "IconLayerFIRM",
417
+ data: "data/firm/location_homepro_do_2018-2024.json",
418
+ getColor: (d) => [Math.sqrt(d.exits), 140, 0],
419
+ getIcon: (d) => "marker",
420
+ getPosition: (d) => [d.lon, d.lat],
421
+ getSize: 24,
422
+ iconAtlas:
423
+ "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/icon-atlas.png",
424
+ iconMapping:
425
+ "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/icon-atlas.json",
426
+ pickable: true,
427
+ });
428
+
429
+ const province_layer_centroid = new deck.IconLayer({
430
+ id: "IconLayerCentriod",
431
+ data: "data/disaster/province_disaster_centroid.json",
432
+ getColor: (d) => [Math.sqrt(d.exits), 140, 0],
433
+ getIcon: (d) => "marker-warning",
434
+ getPosition: (d) => [d.lon, d.lat],
435
+ getSize: 24,
436
+ iconAtlas:
437
+ "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/icon-atlas.png",
438
+ iconMapping:
439
+ "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/icon-atlas.json",
440
+ pickable: false,
441
+ });
442
+
443
+ const firm_dis_arc = new deck.ArcLayer({
444
+ id: "ArcLayer",
445
+ data: "data/firm/homepro_disaster_network_map.json",
446
+ getSourcePosition: (d) => [d.feature_x, d.feature_y],
447
+ getTargetPosition: (d) => [d.nearest_x, d.nearest_y],
448
+ getSourceColor: (d) => [66, 135, 245],
449
+ getTargetColor: (d) => [252, 58, 84],
450
+ getWidth: 4,
451
+ pickable: false,
452
+ });
453
+
454
+ const province_boundary = new deck.GeoJsonLayer({
455
+ id: "GeoJsonLayer",
456
+ data: "data/common/province_admin_diva_sim.geojson",
457
+ pickable: false,
458
+ getLineColor: [0, 0, 0],
459
+ getLineWidth: 200,
460
+ getFillColor: [255, 255, 255, 0],
461
+ });
462
+
463
+ // Initialize Deck.GL
464
+ const deckInstance = new deck.DeckGL({
465
+ initialViewState: INIT_VIEW_STATE,
466
+ container: "map",
467
+ mapStyle:
468
+ "https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json",
469
+ controller: { doubleClickZoom: true, inertia: true },
470
+ onViewStateChange: (e) => {
471
+ viewState = e.viewState;
472
+ },
473
+ //getTooltip: ({object}) => object && object.name,
474
+ getTooltip,
475
+ layers: [
476
+ province_boundary,
477
+ firm_dis_arc,
478
+ province_layer_centroid,
479
+ layer,
480
+ ],
481
+ });
482
+
483
+ function getTooltip({ object }) {
484
+ return (
485
+ object && {
486
+ html: `<h2 class="text-black">Place: ${object.name}</h2>`,
487
+ className: "rounded-lg shadow-lg",
488
+ style: {
489
+ backgroundColor: "#fff",
490
+ fontSize: "0.8em",
491
+ },
492
+ }
493
+ );
494
+ }
495
+
496
+ function rotateCameraRight() {
497
+ initialViewState = {
498
+ ...viewState,
499
+ bearing: viewState.bearing - 20,
500
+ transitionDuration: 10000,
501
+ transitionInterpolator: new deck.LinearInterpolator(["bearing"]),
502
+ onTransitionEnd: rotateCameraLeft,
503
+ };
504
+ deckInstance.setProps({ initialViewState });
505
+ }
506
+
507
+ function rotateCameraLeft() {
508
+ initialViewState = {
509
+ ...viewState,
510
+ bearing: viewState.bearing + 20,
511
+ transitionDuration: 10000,
512
+ transitionInterpolator: new deck.LinearInterpolator(["bearing"]),
513
+ onTransitionEnd: rotateCameraRight,
514
+ };
515
+ deckInstance.setProps({ initialViewState });
516
+ }
517
+
518
+ function resetCameraPosition() {
519
+ deckInstance.setProps({
520
+ initialViewState: {
521
+ ...INIT_VIEW_STATE,
522
+ transitionInterpolator: new deck.FlyToInterpolator({ speed: 2 }),
523
+ transitionDuration: "auto",
524
+ },
525
+ });
526
+ }
527
+
528
+ const resetButton = document.querySelector("#resetViewButton");
529
+ resetButton.addEventListener("click", () => {
530
+ resetCameraPosition();
531
+ });
532
+ tippy("#resetViewButton", {
533
+ content: "Reset View",
534
+ placement: "left",
535
+ });
536
+
537
+ const animateButton = document.querySelector("#animateButton");
538
+ animateButton.addEventListener("click", () => {
539
+ rotateCameraLeft();
540
+ });
541
+ tippy("#animateButton", {
542
+ content: "Animate View",
543
+ placement: "left",
544
+ });
545
+
546
+ tippy("#goOverView", {
547
+ content: "FIRM Overview",
548
+ placement: "left",
549
+ });
550
+ tippy("#goLocation", {
551
+ content: "Location-Based",
552
+ placement: "left",
553
+ });
554
+ tippy("#goForecast", {
555
+ content: "Forecasting",
556
+ placement: "left",
557
+ });
558
+ </script>
559
+
560
+ <script>
561
+ // First Chart.js Configuration
562
+ const ctx = document.getElementById("DQCBarChart").getContext("2d");
563
+ const myChart = new Chart(ctx, {
564
+ type: "bar",
565
+ data: {
566
+ labels: [
567
+ "Cash Flow from investing activities",
568
+ "Cash flow from operating activities",
569
+ "Trade and other receivables",
570
+ "Total current liabilities",
571
+ "Total debts",
572
+ "Total assets",
573
+ "Cash Flow from Financing Activities",
574
+ "Inventories",
575
+ "Total cost",
576
+ "Revenue",
577
+ "Profit",
578
+ "Cost of Revenue",
579
+ "Cash and cash equivalents",
580
+ ],
581
+ datasets: [
582
+ {
583
+ label: "Wind",
584
+ data: [-0.2422706118363361,
585
+ 0.0944654213932851,
586
+ 0.10946664573317823,
587
+ -0.2635881587808216,
588
+ 1.6468128742085861,
589
+ 1.81343360114032,
590
+ 0.6844300257725531,
591
+ -0.7277852127157011,
592
+ 2.2367857616664835,
593
+ 2.488924354367551,
594
+ 0.106834547304031,
595
+ 1.1691284243686468,
596
+ 0.885037040855672],
597
+ },
598
+ {
599
+ label: "Flood",
600
+ data: [0.8600522301934065,
601
+ -0.5588222574508711,
602
+ -0.06795048991347222,
603
+ 0.8115310593522213,
604
+ 5.861538708787576,
605
+ 5.460325579030252,
606
+ 8.377749342537179,
607
+ 1.3362524044153352,
608
+ -2.7475583580473337,
609
+ -3.9853109972001706,
610
+ -0.9466984525926432,
611
+ -3.385174369728646,
612
+ 3.9789016460835334],
613
+ },
614
+ {
615
+ label: "Pollution",
616
+ data: [2.1933516572229355,
617
+ -2.4879927846021577,
618
+ -0.6000178704859911,
619
+ -6.396226349326616,
620
+ 2.3073451589071494,
621
+ 0.3808370479344142,
622
+ 8.911713608602666,
623
+ -2.6315086036282316,
624
+ -15.640730983677106,
625
+ -20.120868745704833,
626
+ -3.2905810349601716,
627
+ -11.649785403267158,
628
+ -0.22138555929730494],
629
+ },
630
+ ],
631
+ },
632
+ options: {
633
+ indexAxis: "y",
634
+ scales: {
635
+ x: {
636
+ stacked: true,
637
+ },
638
+ y: {
639
+ stacked: true,
640
+ },
641
+
642
+ },
643
+ responsive: true,
644
+ plugins: {
645
+ legend: {
646
+ labels: {
647
+ // This more specific font property overrides the global property
648
+ font: {
649
+ size: 16,
650
+ color: "rgb(0, 0, 0)",
651
+ },
652
+ },
653
+ },
654
+ },
655
+ },
656
+ });
657
+
658
+ // Second Chart.js Configuration
659
+ const ctx2 = document.getElementById("dLinearChart").getContext("2d");
660
+ const myChart2 = new Chart(ctx2, {
661
+ type: "line",
662
+ data: {
663
+ labels: ["2018", "2019", "2020", "2021", "2022", "2023"],
664
+ datasets: [
665
+ {
666
+ label: "Wind",
667
+ data: [
668
+ 11.349588236860292, 101.0963775457162, 162.01327277250004,
669
+ 132.45610317862463, 157.62608925639108, 251.60793283708682,
670
+ ],
671
+ backgroundColor: "rgba(255, 105, 105, 0.2)",
672
+ borderColor: "rgba(255, 105, 105, 1)",
673
+ borderWidth: 1,
674
+ fill: true,
675
+ },
676
+ {
677
+ label: "Flood",
678
+ data: [
679
+ 22.406498185854037, 13.110608395699153, 93.24722895737878,
680
+ 125.18428792817156, 94.9681724109333, 90.2725237103977,
681
+ ],
682
+ backgroundColor: "rgba(118, 77, 255, 0.2)",
683
+ borderColor: "rgba(118, 77, 255, 1)",
684
+ borderWidth: 1,
685
+ fill: true,
686
+ },
687
+ {
688
+ label: "Air Pollution",
689
+ data: [
690
+ 0.0, 43.43953701671832, 72.33746458491377, 18.70575997192916,
691
+ 21.063430673179404, 36.01993483269402,
692
+ ],
693
+ backgroundColor: "rgba(112, 112, 112, 0.2)",
694
+ borderColor: "rgba(112, 112, 112, 1)",
695
+ borderWidth: 1,
696
+ fill: true,
697
+ },
698
+ ],
699
+ },
700
+ options: {
701
+ scales: {
702
+ y: {
703
+ beginAtZero: true,
704
+ },
705
+ },
706
+ plugins: {
707
+ legend: {
708
+ labels: {
709
+ // This more specific font property overrides the global property
710
+ font: {
711
+ size: 14,
712
+ color: "rgb(0, 0, 0)",
713
+ },
714
+ },
715
+ },
716
+ },
717
+ },
718
+ });
719
+
720
+ const ctx3 = document.getElementById("DAPRadarChart").getContext("2d");
721
+ const myChart3 = new Chart(ctx3, {
722
+ type: "radar",
723
+ data: {
724
+ labels: [
725
+ "Inventories",
726
+ "Total debts",
727
+ "Profit",
728
+ "Revenue",
729
+ "Total assets",
730
+ ],
731
+ datasets: [
732
+ {
733
+ label: "Wind",
734
+ data: [
735
+ 0.09228310871019875, 0.4131043958522932, 0.2905541600731763,
736
+ 0.3482483885150638, 0.3605794167223425,
737
+ ],
738
+ fill: true,
739
+ backgroundColor: "rgba(255, 105, 105, 0.2)",
740
+ borderColor: "rgb(255, 105, 105)",
741
+ pointBackgroundColor: "rgb(255, 105, 105)",
742
+ pointBorderColor: "#fff",
743
+ pointHoverBackgroundColor: "#fff",
744
+ pointHoverBorderColor: "rgb(255, 105, 105)",
745
+ },
746
+ {
747
+ label: "Flood",
748
+ data: [
749
+ 0.43508697798242224, 0.38063025794277516, 0.1759184017105713,
750
+ 0.0994554869665615, 0.452150773661031,
751
+ ],
752
+ fill: true,
753
+ backgroundColor: "rgba(118, 77, 255, 0.2)",
754
+ borderColor: "rgb(118, 77, 255)",
755
+ pointBackgroundColor: "rgb(118, 77, 255)",
756
+ pointBorderColor: "#fff",
757
+ pointHoverBackgroundColor: "#fff",
758
+ pointHoverBorderColor: "rgb(118, 77, 255)",
759
+ },
760
+ {
761
+ label: "Air Pollution",
762
+ data: [
763
+ 0.47262991330737897, 0.20626534620493175, 0.5335274382162524,
764
+ 0.5522961245183747, 0.18726980961662648,
765
+ ],
766
+ fill: true,
767
+ backgroundColor: "rgba(112, 112, 112, 0.2)",
768
+ borderColor: "rgb(112, 112, 112)",
769
+ pointBackgroundColor: "rgb(112, 112, 112)",
770
+ pointBorderColor: "#fff",
771
+ pointHoverBackgroundColor: "#fff",
772
+ pointHoverBorderColor: "rgb(112, 112, 112)",
773
+ },
774
+ ],
775
+ },
776
+ options: {
777
+ elements: {
778
+ line: {
779
+ borderWidth: 3,
780
+ },
781
+ },
782
+ plugins: {
783
+ legend: {
784
+ labels: {
785
+ // This more specific font property overrides the global property
786
+ font: {
787
+ size: 14,
788
+ color: "rgb(0, 0, 0)",
789
+ },
790
+ },
791
+ },
792
+ },
793
+ },
794
+ });
795
+ </script>
796
+ </body>
797
+ </html>
data/.DS_Store ADDED
Binary file (8.2 kB). View file
 
data/common/province_admin_diva.cpg ADDED
@@ -0,0 +1 @@
 
 
1
+ UTF-8
data/common/province_admin_diva.dbf ADDED
Binary file (3.99 kB). View file
 
data/common/province_admin_diva.geojson ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a27ebe84673d0ca70d41874424af3761637409688d214df2c224ae7e1450c254
3
+ size 26849964
data/common/province_admin_diva.prj ADDED
@@ -0,0 +1 @@
 
 
1
+ GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
data/common/province_admin_diva.qmd ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
2
+ <qgis version="3.38.3-Grenoble">
3
+ <identifier></identifier>
4
+ <parentidentifier></parentidentifier>
5
+ <language></language>
6
+ <type>dataset</type>
7
+ <title></title>
8
+ <abstract></abstract>
9
+ <links/>
10
+ <dates/>
11
+ <fees></fees>
12
+ <encoding></encoding>
13
+ <crs>
14
+ <spatialrefsys nativeFormat="Wkt">
15
+ <wkt>GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]</wkt>
16
+ <proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
17
+ <srsid>3452</srsid>
18
+ <srid>4326</srid>
19
+ <authid>EPSG:4326</authid>
20
+ <description>WGS 84</description>
21
+ <projectionacronym>longlat</projectionacronym>
22
+ <ellipsoidacronym>EPSG:7030</ellipsoidacronym>
23
+ <geographicflag>true</geographicflag>
24
+ </spatialrefsys>
25
+ </crs>
26
+ <extent/>
27
+ </qgis>
data/common/province_admin_diva.shp ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a123887a2c0f6bfd3add943f593c27a613b21328efa414fcafc33adae9c6b817
3
+ size 9700852
data/common/province_admin_diva.shx ADDED
Binary file (716 Bytes). View file
 
data/common/province_admin_diva_sim.geojson ADDED
The diff for this file is too large to render. See raw diff
 
data/common/province_admin_diva_sim.qmd ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
2
+ <qgis version="3.38.3-Grenoble">
3
+ <identifier></identifier>
4
+ <parentidentifier></parentidentifier>
5
+ <language></language>
6
+ <type>dataset</type>
7
+ <title></title>
8
+ <abstract></abstract>
9
+ <contact>
10
+ <name></name>
11
+ <organization></organization>
12
+ <position></position>
13
+ <voice></voice>
14
+ <fax></fax>
15
+ <email></email>
16
+ <role></role>
17
+ </contact>
18
+ <links/>
19
+ <dates/>
20
+ <fees></fees>
21
+ <encoding></encoding>
22
+ <crs>
23
+ <spatialrefsys nativeFormat="Wkt">
24
+ <wkt>GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]</wkt>
25
+ <proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
26
+ <srsid>3452</srsid>
27
+ <srid>4326</srid>
28
+ <authid>EPSG:4326</authid>
29
+ <description>WGS 84</description>
30
+ <projectionacronym>longlat</projectionacronym>
31
+ <ellipsoidacronym>EPSG:7030</ellipsoidacronym>
32
+ <geographicflag>true</geographicflag>
33
+ </spatialrefsys>
34
+ </crs>
35
+ <extent>
36
+ <spatial miny="179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368" minz="0" maxy="-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368" maxx="-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368" minx="179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368" maxz="0" dimensions="2" crs="EPSG:4326"/>
37
+ <temporal>
38
+ <period>
39
+ <start></start>
40
+ <end></end>
41
+ </period>
42
+ </temporal>
43
+ </extent>
44
+ </qgis>
data/common/province_admin_sim.geojson ADDED
The diff for this file is too large to render. See raw diff
 
data/disaster/province_disaster_centroid.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [{"OBJECTID":1,"PROV_CODE":10,"PROV_NAM_T":"กรุงเทพมหานคร","PROV_NAM_E":"Bangkok","ProvinceID":10,"ProvinceTH":"กรุงเทพมหานคร","ProvinceEN":"Bangkok","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"กรุงเทพมหานครและปริมณฑล","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":0,"wd_2022":1,"wd_2023":0,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":2,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":13.7714085435,"lon":100.6225883871},{"OBJECTID":2,"PROV_CODE":11,"PROV_NAM_T":"จ.สมุทรปราการ","PROV_NAM_E":"Changwat Samut Prakan","ProvinceID":11,"ProvinceTH":"สมุทรปราการ","ProvinceEN":"Samut Prakan","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"กรุงเทพมหานครและปริมณฑล","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":2,"wd_2022":2,"wd_2023":2,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":1,"fl_2022":1,"fl_2023":2,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":13.5969152043,"lon":100.7090928062},{"OBJECTID":3,"PROV_CODE":12,"PROV_NAM_T":"จ.นนทบุรี","PROV_NAM_E":"Changwat Nonthaburi","ProvinceID":12,"ProvinceTH":"นนทบุรี","ProvinceEN":"Nonthaburi","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"กรุงเทพมหานครและปริมณฑล","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":0,"wd_2022":0,"wd_2023":0,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":2,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":1,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":13.9244928205,"lon":100.3924249516},{"OBJECTID":4,"PROV_CODE":13,"PROV_NAM_T":"จ.ปทุมธานี","PROV_NAM_E":"Changwat Pathum Thani","ProvinceID":13,"ProvinceTH":"ปทุมธานี","ProvinceEN":"Pathum Thani","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"กรุงเทพมหานครและปริมณฑล","wd_2018":0,"wd_2019":2,"wd_2020":0,"wd_2021":0,"wd_2022":0,"wd_2023":2,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":3,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":6,"pm_2021":0,"pm_2022":2,"pm_2023":2,"pm_2024":0,"lat":14.0649785673,"lon":100.6818293226},{"OBJECTID":5,"PROV_CODE":14,"PROV_NAM_T":"จ.พระนครศรีอยุธยา","PROV_NAM_E":"Changwat Phra Nakhon Si Ayutthaya","ProvinceID":14,"ProvinceTH":"พระนครศรีอยุธยา","ProvinceEN":"Phra Nakhon Si Ayutthaya","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":1,"wd_2023":2,"wd_2024":2,"fl_2018":1,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":3,"pm_2021":0,"pm_2022":1,"pm_2023":4,"pm_2024":1,"lat":14.3451364953,"lon":100.5270207199},{"OBJECTID":6,"PROV_CODE":15,"PROV_NAM_T":"จ.อ่างทอง","PROV_NAM_E":"Changwat Ang Thong","ProvinceID":15,"ProvinceTH":"อ่างทอง","ProvinceEN":"Ang Thong","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":4,"wd_2022":3,"wd_2023":1,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":4,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.6241011627,"lon":100.3480777551},{"OBJECTID":7,"PROV_CODE":16,"PROV_NAM_T":"จ.ลพบุรี","PROV_NAM_E":"Changwat Lopburi","ProvinceID":16,"ProvinceTH":"ลพบุรี","ProvinceEN":"Lop Buri","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":6,"wd_2020":3,"wd_2021":4,"wd_2022":0,"wd_2023":3,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":2,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":15.1096808024,"lon":100.9077283536},{"OBJECTID":8,"PROV_CODE":17,"PROV_NAM_T":"จ.สิงห์บุรี","PROV_NAM_E":"Changwat Singburi","ProvinceID":17,"ProvinceTH":"สิงห์บุรี","ProvinceEN":"Sing Buri","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":3,"wd_2021":3,"wd_2022":3,"wd_2023":1,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.9124112414,"lon":100.34718432},{"OBJECTID":9,"PROV_CODE":18,"PROV_NAM_T":"จ.ชัยนาท","PROV_NAM_E":"Changwat Chainat","ProvinceID":18,"ProvinceTH":"ชัยนาท","ProvinceEN":"Chai Nat","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":0,"wd_2020":0,"wd_2021":2,"wd_2022":5,"wd_2023":3,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":2,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":1,"pm_2024":0,"lat":15.13280424,"lon":100.0278767822},{"OBJECTID":10,"PROV_CODE":19,"PROV_NAM_T":"จ.สระบุรี","PROV_NAM_E":"Changwat Saraburi","ProvinceID":19,"ProvinceTH":"สระบุรี","ProvinceEN":"Saraburi","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":1,"wd_2020":3,"wd_2021":4,"wd_2022":0,"wd_2023":1,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":4,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":1,"pm_2024":1,"lat":14.6284304583,"lon":101.0174317367},{"OBJECTID":11,"PROV_CODE":20,"PROV_NAM_T":"จ.ชลบุรี","PROV_NAM_E":"Changwat Chonburi","ProvinceID":20,"ProvinceTH":"ชลบุรี","ProvinceEN":"Chon Buri","FormalRegi":"ภาคตะวันออก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":3,"wd_2021":3,"wd_2022":3,"wd_2023":1,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":4,"fl_2023":0,"fl_2024":1,"pm_2018":0,"pm_2019":2,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":13.1915689314,"lon":101.2028556535},{"OBJECTID":12,"PROV_CODE":21,"PROV_NAM_T":"จ.ระยอง","PROV_NAM_E":"Changwat Rayong","ProvinceID":21,"ProvinceTH":"ระยอง","ProvinceEN":"Rayong","FormalRegi":"ภาคตะวันออก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":1,"wd_2023":6,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":2,"fl_2024":1,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":6,"pm_2022":1,"pm_2023":0,"pm_2024":0,"lat":12.8534177497,"lon":101.428396426},{"OBJECTID":13,"PROV_CODE":22,"PROV_NAM_T":"จ.จันทบุรี","PROV_NAM_E":"Changwat Chanthaburi","ProvinceID":22,"ProvinceTH":"จันทบุรี","ProvinceEN":"Chanthaburi","FormalRegi":"ภาคตะวันออก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":0,"wd_2022":2,"wd_2023":0,"wd_2024":0,"fl_2018":0,"fl_2019":3,"fl_2020":2,"fl_2021":2,"fl_2022":2,"fl_2023":3,"fl_2024":2,"pm_2018":0,"pm_2019":3,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":1,"pm_2024":0,"lat":12.8811626865,"lon":102.1298376818},{"OBJECTID":14,"PROV_CODE":23,"PROV_NAM_T":"จ.ตราด","PROV_NAM_E":"Changwat Trat","ProvinceID":23,"ProvinceTH":"ตราด","ProvinceEN":"Trat","FormalRegi":"ภาคตะวันออก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":2,"wd_2020":0,"wd_2021":0,"wd_2022":1,"wd_2023":1,"wd_2024":1,"fl_2018":0,"fl_2019":2,"fl_2020":0,"fl_2021":0,"fl_2022":2,"fl_2023":1,"fl_2024":2,"pm_2018":0,"pm_2019":1,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":12.3174339906,"lon":102.5207812511},{"OBJECTID":15,"PROV_CODE":24,"PROV_NAM_T":"จ.ฉะเชิงเทรา","PROV_NAM_E":"Changwat Chachoengsao","ProvinceID":24,"ProvinceTH":"ฉะเชิงเทรา","ProvinceEN":"Chachoengsao","FormalRegi":"ภาคตะวันออก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":1,"wd_2022":0,"wd_2023":2,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":2,"pm_2020":7,"pm_2021":1,"pm_2022":0,"pm_2023":1,"pm_2024":0,"lat":13.6066566677,"lon":101.4252622946},{"OBJECTID":16,"PROV_CODE":25,"PROV_NAM_T":"จ.ปราจีนบุรี","PROV_NAM_E":"Changwat Prachinburi","ProvinceID":25,"ProvinceTH":"ปราจีนบุรี","ProvinceEN":"Prachin Buri","FormalRegi":"ภาคตะวันออก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":1,"wd_2021":1,"wd_2022":1,"wd_2023":11,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":6,"fl_2021":4,"fl_2022":1,"fl_2023":4,"fl_2024":7,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.0481508864,"lon":101.6480468463},{"OBJECTID":17,"PROV_CODE":26,"PROV_NAM_T":"จ.นครนายก","PROV_NAM_E":"Changwat Nakhon Nayok","ProvinceID":26,"ProvinceTH":"นครนายก","ProvinceEN":"Nakhon Nayok","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":1,"wd_2023":2,"wd_2024":0,"fl_2018":0,"fl_2019":1,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":1,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.217273464,"lon":101.1711772101},{"OBJECTID":18,"PROV_CODE":27,"PROV_NAM_T":"จ.สระแก้ว","PROV_NAM_E":"Changwat Srakaeo","ProvinceID":27,"ProvinceTH":"สระแก้ว","ProvinceEN":"Sa Kaeo","FormalRegi":"ภาคตะวันออก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":2,"wd_2020":1,"wd_2021":0,"wd_2022":0,"wd_2023":2,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":3,"fl_2021":1,"fl_2022":2,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":3,"pm_2024":1,"lat":13.788925519,"lon":102.3220517471},{"OBJECTID":19,"PROV_CODE":30,"PROV_NAM_T":"จ.นครราชสีมา","PROV_NAM_E":"Changwat Nakhon Ratchasima","ProvinceID":30,"ProvinceTH":"นครราชสีมา","ProvinceEN":"Nakhon Ratchasima","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":3,"wd_2020":5,"wd_2021":2,"wd_2022":2,"wd_2023":1,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":3,"fl_2021":1,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":1,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":1,"lat":14.9577464741,"lon":102.1099590133},{"OBJECTID":20,"PROV_CODE":31,"PROV_NAM_T":"จ.บุรีรัมย์","PROV_NAM_E":"Changwat Burirum","ProvinceID":31,"ProvinceTH":"บุรีรัมย์","ProvinceEN":"Buri Ram","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":3,"wd_2020":0,"wd_2021":0,"wd_2022":1,"wd_2023":1,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":2,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.8222502348,"lon":102.9572848135},{"OBJECTID":21,"PROV_CODE":32,"PROV_NAM_T":"จ.สุรินทร์","PROV_NAM_E":"Changwat Surin","ProvinceID":32,"ProvinceTH":"สุรินทร์","ProvinceEN":"Surin","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":2,"wd_2020":0,"wd_2021":1,"wd_2022":2,"wd_2023":0,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.8867226417,"lon":103.6553081775},{"OBJECTID":22,"PROV_CODE":33,"PROV_NAM_T":"จ.ศรีสะเกษ","PROV_NAM_E":"Changwat Sisaket","ProvinceID":33,"ProvinceTH":"ศรีสะเกษ","ProvinceEN":"Si Sa Ket","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":3,"wd_2020":3,"wd_2021":1,"wd_2022":2,"wd_2023":0,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":3,"fl_2021":2,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.8569901616,"lon":104.3684147972},{"OBJECTID":23,"PROV_CODE":34,"PROV_NAM_T":"จ.อุบลราชธานี","PROV_NAM_E":"Changwat Ubon Ratchathani","ProvinceID":34,"ProvinceTH":"อุบลราชธานี","ProvinceEN":"Ubon Ratchathani","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":5,"wd_2021":0,"wd_2022":0,"wd_2023":0,"wd_2024":4,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":1,"fl_2022":1,"fl_2023":1,"fl_2024":1,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":15.1854239449,"lon":105.1108451072},{"OBJECTID":24,"PROV_CODE":35,"PROV_NAM_T":"จ.ยโสธร","PROV_NAM_E":"Changwat Yasothon","ProvinceID":35,"ProvinceTH":"ยโสธร","ProvinceEN":"Yasothon","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":2,"wd_2022":6,"wd_2023":11,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":1,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":15.8956935021,"lon":104.3385710883},{"OBJECTID":25,"PROV_CODE":36,"PROV_NAM_T":"จ.ชัยภูม���","PROV_NAM_E":"Changwat Chaiyaphum","ProvinceID":36,"ProvinceTH":"ชัยภูมิ","ProvinceEN":"Chaiyaphum","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":0,"wd_2022":9,"wd_2023":9,"wd_2024":4,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":2,"fl_2024":2,"pm_2018":0,"pm_2019":2,"pm_2020":4,"pm_2021":0,"pm_2022":0,"pm_2023":2,"pm_2024":0,"lat":16.0323913354,"lon":101.817499198},{"OBJECTID":26,"PROV_CODE":37,"PROV_NAM_T":"จ.อำนาจเจริญ","PROV_NAM_E":"Changwat Amnaj Charoen","ProvinceID":37,"ProvinceTH":"อำนาจเจริญ","ProvinceEN":"Amnat Charoen","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":4,"wd_2021":3,"wd_2022":10,"wd_2023":12,"wd_2024":10,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":15.89280857,"lon":104.7413817743},{"OBJECTID":27,"PROV_CODE":38,"PROV_NAM_T":"จ.บึงกาฬ","PROV_NAM_E":"Changwat Bueng Kan","ProvinceID":38,"ProvinceTH":"บึงกาฬ","ProvinceEN":"Bueng Kan","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":1,"wd_2022":1,"wd_2023":0,"wd_2024":3,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":1,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":18.1490759595,"lon":103.7100759649},{"OBJECTID":28,"PROV_CODE":39,"PROV_NAM_T":"จ.หนองบัวลำภู","PROV_NAM_E":"Changwat Nong Bua Lamphu","ProvinceID":39,"ProvinceTH":"หนองบัวลำภู","ProvinceEN":"Nong Bua Lam Phu","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":6,"wd_2020":6,"wd_2021":6,"wd_2022":0,"wd_2023":7,"wd_2024":10,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":17.1827418137,"lon":102.3018598932},{"OBJECTID":29,"PROV_CODE":40,"PROV_NAM_T":"จ.ขอนแก่น","PROV_NAM_E":"Changwat Khon Kaen","ProvinceID":40,"ProvinceTH":"ขอนแก่น","ProvinceEN":"Khon Kaen","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":12,"wd_2020":12,"wd_2021":3,"wd_2022":3,"wd_2023":8,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":3,"fl_2024":0,"pm_2018":0,"pm_2019":3,"pm_2020":2,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":2,"lat":16.4097085051,"lon":102.5784899456},{"OBJECTID":30,"PROV_CODE":41,"PROV_NAM_T":"จ.อุดรธานี","PROV_NAM_E":"Changwat Udon Thani","ProvinceID":41,"ProvinceTH":"อุดรธานี","ProvinceEN":"Udon Thani","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":5,"wd_2020":4,"wd_2021":5,"wd_2022":1,"wd_2023":2,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":2,"fl_2021":0,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":1,"pm_2024":1,"lat":17.4258558525,"lon":102.862888138},{"OBJECTID":31,"PROV_CODE":42,"PROV_NAM_T":"จ.เลย","PROV_NAM_E":"Changwat Loei","ProvinceID":42,"ProvinceTH":"เลย","ProvinceEN":"Loei","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":8,"wd_2021":0,"wd_2022":0,"wd_2023":2,"wd_2024":10,"fl_2018":0,"fl_2019":2,"fl_2020":2,"fl_2021":4,"fl_2022":0,"fl_2023":0,"fl_2024":6,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":17.4093634055,"lon":101.6351890502},{"OBJECTID":32,"PROV_CODE":43,"PROV_NAM_T":"จ.หนองคาย","PROV_NAM_E":"Changwat Nong Khai","ProvinceID":43,"ProvinceTH":"หนองคาย","ProvinceEN":"Nong Khai","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":1,"wd_2021":1,"wd_2022":0,"wd_2023":2,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":17.9404907574,"lon":102.8334216455},{"OBJECTID":33,"PROV_CODE":44,"PROV_NAM_T":"จ.มหาสารคาม","PROV_NAM_E":"Changwat Mahasarakham","ProvinceID":44,"ProvinceTH":"มหาสารคาม","ProvinceEN":"Maha Sarakham","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":0,"wd_2021":0,"wd_2022":1,"wd_2023":4,"wd_2024":5,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":1,"fl_2022":0,"fl_2023":2,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":16.0002225899,"lon":103.1654525924},{"OBJECTID":34,"PROV_CODE":45,"PROV_NAM_T":"จ.ร้อยเอ็ด","PROV_NAM_E":"Changwat Roi Et","ProvinceID":45,"ProvinceTH":"ร้อยเอ็ด","ProvinceEN":"Roi Et","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":5,"wd_2021":6,"wd_2022":1,"wd_2023":3,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":1,"pm_2024":0,"lat":15.9202081852,"lon":103.8134037292},{"OBJECTID":35,"PROV_CODE":46,"PROV_NAM_T":"จ.กาฬสินธุ์","PROV_NAM_E":"Changwat Kalasin","ProvinceID":46,"ProvinceTH":"กาฬสินธุ์","ProvinceEN":"Kalasin","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":2,"wd_2021":2,"wd_2022":2,"wd_2023":1,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":2,"fl_2024":0,"pm_2018":0,"pm_2019":3,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":1,"lat":16.6284584848,"lon":103.6218110596},{"OBJECTID":36,"PROV_CODE":47,"PROV_NAM_T":"จ.สกลนคร","PROV_NAM_E":"Changwat Sakon Nakhon","ProvinceID":47,"ProvinceTH":"สกลนคร","ProvinceEN":"Sakon Nakhon","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":2,"wd_2022":0,"wd_2023":13,"wd_2024":5,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":1,"pm_2023":0,"pm_2024":0,"lat":17.3907799772,"lon":103.8240438966},{"OBJECTID":37,"PROV_CODE":48,"PROV_NAM_T":"จ.นครพนม","PROV_NAM_E":"Changwat Nakhon Phanom","ProvinceID":48,"ProvinceTH":"นครพนม","ProvinceEN":"Nakhon Phanom","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":6,"wd_2020":4,"wd_2021":1,"wd_2022":1,"wd_2023":4,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":2,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":17.384812268,"lon":104.4285599167},{"OBJECTID":38,"PROV_CODE":49,"PROV_NAM_T":"จ.มุกดาหาร","PROV_NAM_E":"Changwat Mukdahan","ProvinceID":49,"ProvinceTH":"มุกดาหาร","ProvinceEN":"Mukdahan","FormalRegi":"ภาคตะวันออกเฉียงเหนือ","F4Region":"ภาคตะวันออกเฉียงเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":2,"wd_2023":2,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":2,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":1,"pm_2021":1,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":16.5619797408,"lon":104.517214515},{"OBJECTID":39,"PROV_CODE":50,"PROV_NAM_T":"จ.เชียงใหม่","PROV_NAM_E":"Changwat Chiang Mai","ProvinceID":50,"ProvinceTH":"เชียงใหม่","ProvinceEN":"Chiang Mai","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":7,"wd_2021":10,"wd_2022":1,"wd_2023":8,"wd_2024":9,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":3,"fl_2022":2,"fl_2023":3,"fl_2024":2,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":18.7959784776,"lon":98.7285666272},{"OBJECTID":40,"PROV_CODE":51,"PROV_NAM_T":"จ.ลำพูน","PROV_NAM_E":"Changwat Lamphun","ProvinceID":51,"ProvinceTH":"ลำพูน","ProvinceEN":"Lamphun","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":7,"wd_2021":4,"wd_2022":0,"wd_2023":2,"wd_2024":2,"fl_2018":2,"fl_2019":0,"fl_2020":2,"fl_2021":0,"fl_2022":0,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":3,"pm_2023":5,"pm_2024":0,"lat":18.1199782429,"lon":98.9548063279},{"OBJECTID":41,"PROV_CODE":52,"PROV_NAM_T":"จ.ลำปาง","PROV_NAM_E":"Changwat Lampang","ProvinceID":52,"ProvinceTH":"ลำปาง","ProvinceEN":"Lampang","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":14,"wd_2021":4,"wd_2022":7,"wd_2023":15,"wd_2024":12,"fl_2018":2,"fl_2019":0,"fl_2020":2,"fl_2021":2,"fl_2022":3,"fl_2023":5,"fl_2024":12,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":18.3294181625,"lon":99.5127838675},{"OBJECTID":42,"PROV_CODE":53,"PROV_NAM_T":"จ.อุตรดิตถ์","PROV_NAM_E":"Changwat Uttaradit","ProvinceID":53,"ProvinceTH":"อุตรดิตถ์","ProvinceEN":"Uttaradit","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":2,"wd_2020":4,"wd_2021":1,"wd_2022":2,"wd_2023":9,"wd_2024":2,"fl_2018":1,"fl_2019":0,"fl_2020":4,"fl_2021":0,"fl_2022":3,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":17.7514163636,"lon":100.5181907081},{"OBJECTID":43,"PROV_CODE":54,"PROV_NAM_T":"จ.แพร่","PROV_NAM_E":"Changwat Phrae","ProvinceID":54,"ProvinceTH":"แพร่","ProvinceEN":"Phrae","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":7,"wd_2020":1,"wd_2021":2,"wd_2022":1,"wd_2023":4,"wd_2024":5,"fl_2018":0,"fl_2019":1,"fl_2020":2,"fl_2021":0,"fl_2022":2,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":18.2003587419,"lon":100.064964009},{"OBJECTID":44,"PROV_CODE":55,"PROV_NAM_T":"จ.น่าน","PROV_NAM_E":"Changwat Nan","ProvinceID":55,"ProvinceTH":"น่าน","ProvinceEN":"Nan","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":14,"wd_2021":4,"wd_2022":6,"wd_2023":5,"wd_2024":0,"fl_2018":0,"fl_2019":4,"fl_2020":5,"fl_2021":0,"fl_2022":2,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":18.8547544461,"lon":100.8355179291},{"OBJECTID":45,"PROV_CODE":56,"PROV_NAM_T":"จ.พะเยา","PROV_NAM_E":"Changwat Phayao","ProvinceID":56,"ProvinceTH":"พะเยา","ProvinceEN":"Phayao","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":0,"wd_2021":0,"wd_2022":2,"wd_2023":4,"wd_2024":5,"fl_2018":1,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":2,"fl_2024":6,"pm_2018":0,"pm_2019":0,"pm_2020":2,"pm_2021":0,"pm_2022":0,"pm_2023":1,"pm_2024":0,"lat":19.2347532649,"lon":100.1912965732},{"OBJECTID":46,"PROV_CODE":57,"PROV_NAM_T":"จ.เชียงราย","PROV_NAM_E":"Changwat Chiangrai","ProvinceID":57,"ProvinceTH":"เชียงราย","ProvinceEN":"Chiang Rai","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":2,"wd_2020":1,"wd_2021":2,"wd_2022":0,"wd_2023":14,"wd_2024":15,"fl_2018":0,"fl_2019":1,"fl_2020":1,"fl_2021":0,"fl_2022":5,"fl_2023":1,"fl_2024":1,"pm_2018":0,"pm_2019":2,"pm_2020":2,"pm_2021":0,"pm_2022":2,"pm_2023":1,"pm_2024":0,"lat":19.848190244,"lon":99.8661676347},{"OBJECTID":47,"PROV_CODE":58,"PROV_NAM_T":"จ.แม่ฮ่องสอน","PROV_NAM_E":"Changwat Mae Hong Son","ProvinceID":58,"ProvinceTH":"แม่ฮ่องสอน","ProvinceEN":"Mae Hong Son","FormalRegi":"ภาคเหนือ","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":2,"wd_2020":1,"wd_2021":1,"wd_2022":2,"wd_2023":3,"wd_2024":4,"fl_2018":0,"fl_2019":1,"fl_2020":0,"fl_2021":2,"fl_2022":3,"fl_2023":6,"fl_2024":4,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":18.8126615473,"lon":98.0305634615},{"OBJECTID":48,"PROV_CODE":60,"PROV_NAM_T":"จ.นครสวรรค์","PROV_NAM_E":"Changwat Nakhon Sawan","ProvinceID":60,"ProvinceTH":"นครสวรรค์","ProvinceEN":"Nakhon Sawan","FormalRegi":"ภาคกลาง","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":0,"wd_2021":3,"wd_2022":0,"wd_2023":0,"wd_2024":4,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":15.6838211431,"lon":100.1496314257},{"OBJECTID":49,"PROV_CODE":61,"PROV_NAM_T":"จ.อุทัยธานี","PROV_NAM_E":"Changwat Uthai Thani","ProvinceID":61,"ProvinceTH":"อุทัยธานี","ProvinceEN":"Uthai Thani","FormalRegi":"ภาคกลาง","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":3,"wd_2020":2,"wd_2021":2,"wd_2022":1,"wd_2023":4,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":1,"lat":15.3498692094,"lon":99.4777931991},{"OBJECTID":50,"PROV_CODE":62,"PROV_NAM_T":"จ.กำแพงเพชร","PROV_NAM_E":"Changwat Kampaeng Phet","ProvinceID":62,"ProvinceTH":"กำแพงเพชร","ProvinceEN":"Kamphaeng Phet","FormalRegi":"ภาคกลาง","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":6,"wd_2020":1,"wd_2021":3,"wd_2022":1,"wd_2023":8,"wd_2024":4,"fl_2018":0,"fl_2019":2,"fl_2020":0,"fl_2021":3,"fl_2022":2,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":16.3314999909,"lon":99.5346917129},{"OBJECTID":51,"PROV_CODE":63,"PROV_NAM_T":"จ.ตาก","PROV_NAM_E":"Changwat Tak","ProvinceID":63,"ProvinceTH":"ตาก","ProvinceEN":"Tak","FormalRegi":"ภาคตะวันตก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":2,"wd_2020":1,"wd_2021":2,"wd_2022":6,"wd_2023":6,"wd_2024":5,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":2,"fl_2022":1,"fl_2023":4,"fl_2024":3,"pm_2018":0,"pm_2019":1,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":6,"pm_2024":8,"lat":16.7218624987,"lon":98.7927786519},{"OBJECTID":52,"PROV_CODE":64,"PROV_NAM_T":"จ.สุโขทัย","PROV_NAM_E":"Changwat Sukhothai","ProvinceID":64,"ProvinceTH":"สุโขทัย","ProvinceEN":"Sukhothai","FormalRegi":"ภาคกลาง","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":2,"wd_2020":2,"wd_2021":1,"wd_2022":3,"wd_2023":4,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":1,"fl_2023":1,"fl_2024":3,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":17.2641982448,"lon":99.7110175865},{"OBJECTID":53,"PROV_CODE":65,"PROV_NAM_T":"จ.พิษณุโลก","PROV_NAM_E":"Changwat Phitsanu Lok","ProvinceID":65,"ProvinceTH":"พิษณุโลก","ProvinceEN":"Phitsanulok","FormalRegi":"ภาคกลาง","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":8,"wd_2020":2,"wd_2021":3,"wd_2022":0,"wd_2023":0,"wd_2024":4,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":4,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":16.9833856736,"lon":100.543036584},{"OBJECTID":54,"PROV_CODE":66,"PROV_NAM_T":"จ.พิจิตร","PROV_NAM_E":"Changwat Phichit","ProvinceID":66,"ProvinceTH":"พิจิตร","ProvinceEN":"Phichit","FormalRegi":"ภาคกลาง","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":7,"wd_2021":1,"wd_2022":0,"wd_2023":2,"wd_2024":2,"fl_2018":0,"fl_2019":1,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":16.2598334896,"lon":100.3429411266},{"OBJECTID":55,"PROV_CODE":67,"PROV_NAM_T":"จ.เพชรบูรณ์","PROV_NAM_E":"Changwat Phetchabun","ProvinceID":67,"ProvinceTH":"เพชรบูรณ์","ProvinceEN":"Phetchabun","FormalRegi":"ภาคกลาง","F4Region":"ภาคเหนือ","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":0,"wd_2021":1,"wd_2022":1,"wd_2023":20,"wd_2024":17,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":2,"fl_2023":3,"fl_2024":3,"pm_2018":0,"pm_2019":0,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":16.2799132369,"lon":101.1466838038},{"OBJECTID":56,"PROV_CODE":70,"PROV_NAM_T":"จ.ราชบุรี","PROV_NAM_E":"Changwat Ratchaburi","ProvinceID":70,"ProvinceTH":"ราชบุรี","ProvinceEN":"Ratchaburi","FormalRegi":"ภาคตะวันตก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":2,"wd_2023":3,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":1,"pm_2022":0,"pm_2023":2,"pm_2024":0,"lat":13.5349480253,"lon":99.5778696666},{"OBJECTID":57,"PROV_CODE":71,"PROV_NAM_T":"จ.กาญจนบุรี","PROV_NAM_E":"Changwat Kanchanaburi","ProvinceID":71,"ProvinceTH":"กาญจนบุรี","ProvinceEN":"Kanchanaburi","FormalRegi":"ภาคตะวันตก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":0,"wd_2020":1,"wd_2021":0,"wd_2022":0,"wd_2023":0,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":6,"fl_2021":0,"fl_2022":0,"fl_2023":3,"fl_2024":1,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":14.5854451819,"lon":99.047269432},{"OBJECTID":58,"PROV_CODE":72,"PROV_NAM_T":"จ.สุพรรณบุรี","PROV_NAM_E":"Changwat Suphan Buri","ProvinceID":72,"ProvinceTH":"สุพรรณบุรี","ProvinceEN":"Suphan Buri","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":0,"wd_2021":1,"wd_2022":0,"wd_2023":1,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":3,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":1,"pm_2024":0,"lat":14.6097889763,"lon":99.8914184504},{"OBJECTID":59,"PROV_CODE":73,"PROV_NAM_T":"จ.นครปฐม","PROV_NAM_E":"Changwat Nakhon Prathom","ProvinceID":73,"ProvinceTH":"นครปฐม","ProvinceEN":"Nakhon Pathom","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"กรุงเทพมหานครและปริมณฑล","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":0,"wd_2022":3,"wd_2023":2,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":1,"fl_2022":2,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":13.9244475183,"lon":100.1027147984},{"OBJECTID":60,"PROV_CODE":74,"PROV_NAM_T":"จ.สมุทรสาคร","PROV_NAM_E":"Changwat Samut Sakhon","ProvinceID":74,"ProvinceTH":"สมุทรสาคร","ProvinceEN":"Samut Sakhon","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"กรุงเทพมหานครและปริมณฑล","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":2,"wd_2022":1,"wd_2023":2,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":2,"fl_2021":2,"fl_2022":0,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":13.5689967523,"lon":100.2122709055},{"OBJECTID":61,"PROV_CODE":75,"PROV_NAM_T":"จ.สมุทรสงคราม","PROV_NAM_E":"Changwat Samut Songkhram","ProvinceID":75,"ProvinceTH":"สมุทรสงคราม","ProvinceEN":"Samut Songkhram","FormalRegi":"ภาคกลาง","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":0,"wd_2021":0,"wd_2022":0,"wd_2023":1,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":13.3968410617,"lon":99.9533024154},{"OBJECTID":62,"PROV_CODE":76,"PROV_NAM_T":"จ.เพชรบุรี","PROV_NAM_E":"Changwat Phetchaburi","ProvinceID":76,"ProvinceTH":"เพชรบุรี","ProvinceEN":"Phetchaburi","FormalRegi":"ภาคตะวันตก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":0,"wd_2022":0,"wd_2023":2,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":2,"lat":12.9474074686,"lon":99.6187011304},{"OBJECTID":63,"PROV_CODE":77,"PROV_NAM_T":"จ.ประจวบคีรีขันธ์","PROV_NAM_E":"Changwat Prachuap Khiri Khan","ProvinceID":77,"ProvinceTH":"ประจวบคีรีขันธ์","ProvinceEN":"Prachuap Khiri Khan","FormalRegi":"ภาคตะวันตก","F4Region":"ภาคกลาง","MetroRegio":"ต่างจังหวัด","wd_2018":3,"wd_2019":0,"wd_2020":0,"wd_2021":0,"wd_2022":0,"wd_2023":1,"wd_2024":0,"fl_2018":3,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":3,"pm_2021":1,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":11.9484455162,"lon":99.635340457},{"OBJECTID":64,"PROV_CODE":80,"PROV_NAM_T":"จ.นครศรีธรรมราช","PROV_NAM_E":"Changwat Nakhon Si Thammarat","ProvinceID":80,"ProvinceTH":"นครศรีธรรมราช","ProvinceEN":"Nakhon Si Thammarat","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":2,"wd_2021":3,"wd_2022":14,"wd_2023":14,"wd_2024":4,"fl_2018":1,"fl_2019":0,"fl_2020":1,"fl_2021":2,"fl_2022":3,"fl_2023":6,"fl_2024":0,"pm_2018":0,"pm_2019":1,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":1,"lat":8.3793394581,"lon":99.7868723781},{"OBJECTID":65,"PROV_CODE":81,"PROV_NAM_T":"จ.กระบี่","PROV_NAM_E":"Changwat Krabi","ProvinceID":81,"ProvinceTH":"กระบี่","ProvinceEN":"Krabi","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":0,"wd_2021":0,"wd_2022":2,"wd_2023":3,"wd_2024":4,"fl_2018":2,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":4,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":3,"lat":8.1405333245,"lon":99.0074880362},{"OBJECTID":66,"PROV_CODE":82,"PROV_NAM_T":"จ.พังงา","PROV_NAM_E":"Changwat Phang Nga","ProvinceID":82,"ProvinceTH":"พังงา","ProvinceEN":"Phangnga","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":6,"wd_2021":1,"wd_2022":2,"wd_2023":2,"wd_2024":1,"fl_2018":1,"fl_2019":0,"fl_2020":3,"fl_2021":0,"fl_2022":3,"fl_2023":2,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":8.5633538584,"lon":98.4455335419},{"OBJECTID":67,"PROV_CODE":83,"PROV_NAM_T":"จ.ภูเก็ต","PROV_NAM_E":"Changwat Phuket","ProvinceID":83,"ProvinceTH":"ภูเก็ต","ProvinceEN":"Phuket","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":4,"wd_2021":0,"wd_2022":2,"wd_2023":1,"wd_2024":3,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":1,"fl_2023":0,"fl_2024":4,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":7.9678384181,"lon":98.3455183041},{"OBJECTID":68,"PROV_CODE":84,"PROV_NAM_T":"จ.สุราษฎร์ธานี","PROV_NAM_E":"Changwat Surat Thani","ProvinceID":84,"ProvinceTH":"สุราษฎร์ธานี","ProvinceEN":"Surat Thani","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":4,"wd_2020":4,"wd_2021":1,"wd_2022":2,"wd_2023":6,"wd_2024":0,"fl_2018":5,"fl_2019":2,"fl_2020":5,"fl_2021":6,"fl_2022":1,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":9.0529502705,"lon":99.090353631},{"OBJECTID":69,"PROV_CODE":85,"PROV_NAM_T":"จ.ระนอง","PROV_NAM_E":"Changwat Ranong","ProvinceID":85,"ProvinceTH":"ระนอง","ProvinceEN":"Ranong","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":1,"wd_2019":1,"wd_2020":0,"wd_2021":0,"wd_2022":1,"wd_2023":1,"wd_2024":0,"fl_2018":0,"fl_2019":1,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":9.9710101237,"lon":98.6989829007},{"OBJECTID":70,"PROV_CODE":86,"PROV_NAM_T":"จ.ชุมพร","PROV_NAM_E":"Changwat Chumphon","ProvinceID":86,"ProvinceTH":"ชุมพร","ProvinceEN":"Chumphon","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":2,"wd_2020":0,"wd_2021":0,"wd_2022":0,"wd_2023":0,"wd_2024":1,"fl_2018":0,"fl_2019":1,"fl_2020":7,"fl_2021":3,"fl_2022":0,"fl_2023":1,"fl_2024":1,"pm_2018":0,"pm_2019":2,"pm_2020":1,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":10.3454986176,"lon":99.0615781587},{"OBJECTID":71,"PROV_CODE":90,"PROV_NAM_T":"จ.สงขลา","PROV_NAM_E":"Changwat Songkhla","ProvinceID":90,"ProvinceTH":"สงขลา","ProvinceEN":"Songkhla","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":2,"wd_2019":0,"wd_2020":1,"wd_2021":1,"wd_2022":1,"wd_2023":3,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":2,"fl_2022":3,"fl_2023":1,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":1,"pm_2023":0,"pm_2024":0,"lat":6.9347658003,"lon":100.5453224534},{"OBJECTID":72,"PROV_CODE":91,"PROV_NAM_T":"จ.สตูล","PROV_NAM_E":"Changwat Satun","ProvinceID":91,"ProvinceTH":"สตูล","ProvinceEN":"Satun","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":0,"wd_2023":0,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":1,"fl_2021":0,"fl_2022":0,"fl_2023":2,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":1,"pm_2023":0,"pm_2024":0,"lat":6.8342109978,"lon":99.9271887885},{"OBJECTID":73,"PROV_CODE":92,"PROV_NAM_T":"จ.ตรัง","PROV_NAM_E":"Changwat Trang","ProvinceID":92,"ProvinceTH":"ตรัง","ProvinceEN":"Trang","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":6,"wd_2023":4,"wd_2024":4,"fl_2018":1,"fl_2019":0,"fl_2020":1,"fl_2021":1,"fl_2022":1,"fl_2023":1,"fl_2024":1,"pm_2018":0,"pm_2019":1,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":7.543679561,"lon":99.5948211311},{"OBJECTID":74,"PROV_CODE":93,"PROV_NAM_T":"จ.พัทลุง","PROV_NAM_E":"Changwat Phatthalung","ProvinceID":93,"ProvinceTH":"พัทลุง","ProvinceEN":"Phatthalung","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":1,"wd_2021":2,"wd_2022":2,"wd_2023":2,"wd_2024":1,"fl_2018":0,"fl_2019":0,"fl_2020":2,"fl_2021":2,"fl_2022":2,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":7.5162901136,"lon":100.0699152866},{"OBJECTID":75,"PROV_CODE":94,"PROV_NAM_T":"จ.ปัตตานี","PROV_NAM_E":"Changwat Pattani","ProvinceID":94,"ProvinceTH":"ปัตตานี","ProvinceEN":"Pattani","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":0,"wd_2022":5,"wd_2023":0,"wd_2024":0,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":0,"fl_2022":0,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":6.7306669761,"lon":101.3496950308},{"OBJECTID":76,"PROV_CODE":95,"PROV_NAM_T":"จ.ยะลา","PROV_NAM_E":"Changwat Yala","ProvinceID":95,"ProvinceTH":"ยะลา","ProvinceEN":"Yala","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":0,"wd_2020":0,"wd_2021":1,"wd_2022":2,"wd_2023":1,"wd_2024":0,"fl_2018":0,"fl_2019":1,"fl_2020":2,"fl_2021":4,"fl_2022":1,"fl_2023":6,"fl_2024":1,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":6.1908903838,"lon":101.228040178},{"OBJECTID":77,"PROV_CODE":96,"PROV_NAM_T":"จ.นราธิวาส","PROV_NAM_E":"Changwat Narathiwat","ProvinceID":96,"ProvinceTH":"นราธิวาส","ProvinceEN":"Narathiwat","FormalRegi":"ภาคใต้","F4Region":"ภาคใต้","MetroRegio":"ต่างจังหวัด","wd_2018":0,"wd_2019":1,"wd_2020":0,"wd_2021":1,"wd_2022":6,"wd_2023":1,"wd_2024":2,"fl_2018":0,"fl_2019":0,"fl_2020":0,"fl_2021":1,"fl_2022":1,"fl_2023":0,"fl_2024":0,"pm_2018":0,"pm_2019":0,"pm_2020":0,"pm_2021":0,"pm_2022":0,"pm_2023":0,"pm_2024":0,"lat":6.1779315557,"lon":101.7186389676}]
data/firm/homepro_disaster_network_map.json ADDED
The diff for this file is too large to render. See raw diff
 
data/firm/homeprto_disaster_firm_location_forecast.json ADDED
The diff for this file is too large to render. See raw diff
 
data/firm/location_homepro_do_2018-2024.json ADDED
The diff for this file is too large to render. See raw diff
 
forecast.html ADDED
@@ -0,0 +1,776 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Disaster Risk and Impact Analysis</title>
7
+
8
+ <script src="static/js/deckgl@9.0.33.min.js"></script>
9
+
10
+ <script src="static/js/maplibre-gl@3.0.0.js"></script>
11
+ <link href="static/css/maplibre-gl@3.0.0.css" rel="stylesheet" />
12
+
13
+ <script src="static/js/tailwind@3.4.5.js"></script>
14
+ <script src="static/js/chart.js"></script>
15
+
16
+ <script src="static/js/popper.min.js"></script>
17
+ <script src="static/js/tippy-bundle.umd.min.js"></script>
18
+
19
+ <style>
20
+ html,
21
+ body {
22
+ height: 100%;
23
+ margin: 0;
24
+ }
25
+ #map {
26
+ width: 100%;
27
+ height: 100%;
28
+ position: absolute;
29
+ top: 0;
30
+ left: 0;
31
+ }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <!-- Floating Box for Charts -->
36
+ <div
37
+ class="absolute left-4 top-4 h-9/10 bottom-4 w-2/5 p-6 bg-white backdrop-blur-sm bg-opacity-60 shadow-lg overflow-y-auto z-10 rounded-2xl"
38
+ >
39
+ <h1 class="text-2xl font-bold mb-4 text-center">
40
+ Forecast Disaster to FIRM
41
+ </h1>
42
+
43
+ <!-- Disaster Forecasting Chart-->
44
+ <h1 class="text-l font-bold mb-4">Disaster Affection Index</h1>
45
+
46
+ <canvas id="disasterLineChart"></canvas>
47
+
48
+ <h1 class="text-l font-bold mb-4 mt-8">Predicted Finance Changes</h1>
49
+ <canvas id="disasterForecastChart" height="300px"></canvas>
50
+
51
+ <!-- LAYER CONTROL -->
52
+
53
+ <h2 class="text-l font-bold mt-8 mb-4">Show Forecasted 10 Years Disaster Intensity</h2>
54
+ <div id="boxContainer" class="grid grid-cols-3 gap-4 mt-4 mb-8">
55
+ <div
56
+ class="box flex items-center p-4 border rounded-lg cursor-pointer transition-all duration-300 bg-white"
57
+ data-id="wind"
58
+ >
59
+ <div class="icon bg-gray-200 p-2 rounded-full mr-4">
60
+ <img
61
+ src="static/icon/wind.png"
62
+ alt="Icon 2"
63
+ class="h-6 w-6 rounded-full"
64
+ />
65
+ </div>
66
+ <h1 class="text-lg font-semibold">Wind</h1>
67
+ </div>
68
+
69
+ <div
70
+ class="box flex items-center p-4 bg-white border rounded-lg cursor-pointer transition-all duration-300"
71
+ data-id="flood"
72
+ >
73
+ <div class="icon bg-gray-200 p-2 rounded-full mr-4">
74
+ <img
75
+ src="static/icon/flood.png"
76
+ alt="Icon 2"
77
+ class="h-6 w-6 rounded-full"
78
+ />
79
+ </div>
80
+ <h1 class="text-lg font-semibold">Flood</h1>
81
+ </div>
82
+
83
+ <div
84
+ class="box flex items-center p-4 bg-white border rounded-lg cursor-pointer transition-all duration-300"
85
+ data-id="pm"
86
+ >
87
+ <div class="icon bg-gray-200 p-2 rounded-full mr-4">
88
+ <img
89
+ src="static/icon/pm.png"
90
+ alt="Icon 2"
91
+ class="h-6 w-6 rounded-full"
92
+ />
93
+ </div>
94
+ <h1 class="text-lg font-semibold">Air Pollution</h1>
95
+ </div>
96
+ </div>
97
+
98
+ <h1 class="text-l font-bold mb-4">Top Fiance 3 Positive Changes</h1>
99
+ <canvas id="financeHighChange"></canvas>
100
+
101
+ <h1 class="text-l font-bold mb-4">Finance Stable Changes</h1>
102
+ <canvas id="financeMidChange"></canvas>
103
+
104
+ <h1 class="text-l font-bold mb-4">Finance Negative Changes</h1>
105
+ <canvas id="financeLowChange"></canvas>
106
+
107
+ <h1 class="text-l font-bold mb-4">Anomaly Index</h1>
108
+ <canvas id="myMixedChart"></canvas>
109
+ </div>
110
+
111
+ <!-- Fullscreen Map -->
112
+ <div id="map"></div>
113
+
114
+ <!--img
115
+ src="static/icon/logo.png"
116
+ alt="Top-right image"
117
+ class="absolute top-0 right-0 w-48 p-4"
118
+ /-->
119
+
120
+ <a href="index.html">
121
+ <img
122
+ src="static/icon/home.png"
123
+ id="goHome"
124
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-4 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
125
+ />
126
+ </a>
127
+
128
+ <a href="analytics.html">
129
+ <img
130
+ src="static/icon/radar.png"
131
+ id="goOverView"
132
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-20 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
133
+ />
134
+ </a>
135
+
136
+ <a href="locations.html">
137
+ <img
138
+ src="static/icon/location.png"
139
+ id="goLocation"
140
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-36 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
141
+ />
142
+ </a>
143
+
144
+ <a href="forecast.html">
145
+ <img
146
+ src="static/icon/forecast.png"
147
+ id="goForecast"
148
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-52 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
149
+ />
150
+ </a>
151
+
152
+ <img
153
+ src="static/icon/extent.png"
154
+ id="resetViewButton"
155
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg bottom-12 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
156
+ />
157
+
158
+ <img
159
+ src="static/icon/play.png"
160
+ id="animateButton"
161
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg bottom-28 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
162
+ />
163
+
164
+ <script>
165
+ let INIT_VIEW_STATE = {
166
+ longitude: 98.1339,
167
+ latitude: 10.863,
168
+ zoom: 5.594,
169
+ pitch: 48.3549,
170
+ bearing: -17.579,
171
+ maxPitch: 60,
172
+ };
173
+
174
+ var viewState = INIT_VIEW_STATE;
175
+
176
+ // LAYER
177
+ const firm_hex = new deck.HexagonLayer({
178
+ id: "HexagonLayer",
179
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
180
+ extruded: true,
181
+ getPosition: (d) => [d.lon, d.lat],
182
+ getColorWeight: (d) => d.flood_2033,
183
+ getElevationWeight: (d) => d.wind_2033,
184
+ elevationScale: 200,
185
+ colorRange: [
186
+ [213, 62, 79, 200],
187
+ [252, 141, 89, 200],
188
+ [254, 224, 139, 200],
189
+ [230, 245, 152, 200],
190
+ [153, 213, 148, 200],
191
+ [50, 136, 189, 200],
192
+ ],
193
+ colorScaleType: "quantile",
194
+ radius: 5000,
195
+ pickable: true,
196
+ elevationAggregation: "MEAN",
197
+ colorAggregation: "MEAN",
198
+ });
199
+
200
+ const province_boundary = new deck.GeoJsonLayer({
201
+ id: "GeoJsonLayer",
202
+ data: "data/common/province_admin_diva_sim.geojson",
203
+ pickable: false,
204
+ getLineColor: [0, 0, 0],
205
+ getLineWidth: 200,
206
+ getFillColor: [255, 255, 255, 0],
207
+ });
208
+
209
+ const heatmap = new deck.HeatmapLayer({
210
+ id: "HeatmapLayer",
211
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
212
+ aggregation: "SUM",
213
+ getPosition: (d) => [d.lon, d.lat],
214
+ radiusPixels: 60,
215
+ colorRange: [
216
+ [50, 136, 189],
217
+ [153, 213, 148],
218
+ [230, 245, 152],
219
+
220
+ [254, 224, 139],
221
+ [252, 141, 89],
222
+ [213, 62, 79],
223
+ ],
224
+ });
225
+
226
+ // Initialize Deck.GL
227
+ const deckInstance = new deck.DeckGL({
228
+ initialViewState: INIT_VIEW_STATE,
229
+ container: "map",
230
+ mapStyle:
231
+ "https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json",
232
+ controller: { doubleClickZoom: true, inertia: true },
233
+ onViewStateChange: (e) => {
234
+ viewState = e.viewState;
235
+ },
236
+ getTooltip,
237
+ layers: [province_boundary, heatmap],
238
+ });
239
+
240
+ function getTooltip({ object }) {
241
+ return (
242
+ object && {
243
+ html: `<h2 class="text-black">Forecasted Index (2033): ${object.elevationValue.toFixed(
244
+ 2
245
+ )}</h2>`,
246
+ className: "rounded-lg shadow-lg",
247
+ style: {
248
+ backgroundColor: "#fff",
249
+ fontSize: "0.8em",
250
+ },
251
+ }
252
+ );
253
+ }
254
+
255
+ function rotateCameraRight() {
256
+ initialViewState = {
257
+ ...viewState,
258
+ bearing: viewState.bearing - 20,
259
+ transitionDuration: 10000,
260
+ transitionInterpolator: new deck.LinearInterpolator(["bearing"]),
261
+ onTransitionEnd: rotateCameraLeft,
262
+ };
263
+ deckInstance.setProps({ initialViewState });
264
+ }
265
+
266
+ function rotateCameraLeft() {
267
+ initialViewState = {
268
+ ...viewState,
269
+ bearing: viewState.bearing + 20,
270
+ transitionDuration: 10000,
271
+ transitionInterpolator: new deck.LinearInterpolator(["bearing"]),
272
+ onTransitionEnd: rotateCameraRight,
273
+ };
274
+ deckInstance.setProps({ initialViewState });
275
+ }
276
+
277
+ function resetCameraPosition() {
278
+ deckInstance.setProps({
279
+ initialViewState: {
280
+ ...INIT_VIEW_STATE,
281
+ transitionInterpolator: new deck.FlyToInterpolator({ speed: 2 }),
282
+ transitionDuration: "auto",
283
+ },
284
+ });
285
+ }
286
+
287
+ const resetButton = document.querySelector("#resetViewButton");
288
+ resetButton.addEventListener("click", () => {
289
+ resetCameraPosition();
290
+ });
291
+ tippy("#resetViewButton", {
292
+ content: "Reset View",
293
+ placement: "left",
294
+ });
295
+
296
+ const animateButton = document.querySelector("#animateButton");
297
+ animateButton.addEventListener("click", () => {
298
+ rotateCameraLeft();
299
+ });
300
+ tippy("#animateButton", {
301
+ content: "Animate View",
302
+ placement: "left",
303
+ });
304
+
305
+ tippy("#goHome", {
306
+ content: "Home Page",
307
+ placement: "left",
308
+ });
309
+ tippy("#goOverView", {
310
+ content: "FIRM Overview",
311
+ placement: "left",
312
+ });
313
+ tippy("#goLocation", {
314
+ content: "Location-Based",
315
+ placement: "left",
316
+ });
317
+ tippy("#goForecast", {
318
+ content: "Forecasting",
319
+ placement: "left",
320
+ });
321
+
322
+ async function updateMap() {
323
+ console.log("update Map");
324
+
325
+ const selectedBoxId = getSelectedBox();
326
+ //console.log('Currently Selected Box ID:', selectedBoxId);
327
+
328
+ if (selectedBoxId == "wind") {
329
+ console.log(" Do something to Wind");
330
+
331
+ deckInstance.setProps({
332
+ layers: [
333
+ province_boundary,
334
+ new deck.HexagonLayer({
335
+ id: "HexagonLayer",
336
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
337
+ extruded: true,
338
+ getPosition: (d) => [d.lon, d.lat],
339
+ getColorWeight: (d) => d.wind_2033,
340
+ getElevationWeight: (d) => d.wind_2033,
341
+ elevationScale: 100,
342
+ transitions: {
343
+ elevationScale: 1000,
344
+ },
345
+ colorRange: [
346
+ [255, 255, 178, 200],
347
+ [254, 217, 118, 200],
348
+ [254, 178, 76, 200],
349
+ [253, 141, 60, 200],
350
+ [240, 59, 32, 200],
351
+ [189, 0, 38, 200],
352
+ ],
353
+ colorScaleType: "quantile",
354
+ radius: 5000,
355
+ pickable: true,
356
+ elevationAggregation: "MIN",
357
+ colorAggregation: "MIN",
358
+ }),
359
+ ],
360
+ getTooltip,
361
+ });
362
+ } else if (selectedBoxId == "flood") {
363
+ console.log(" Do something to Flood");
364
+
365
+ deckInstance.setProps({
366
+ layers: [
367
+ province_boundary,
368
+ new deck.HexagonLayer({
369
+ id: "HexagonLayer",
370
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
371
+ extruded: true,
372
+ getPosition: (d) => [d.lon, d.lat],
373
+ getColorWeight: (d) => d.flood_2033,
374
+ getElevationWeight: (d) => d.flood_2033,
375
+ elevationScale: 100,
376
+ transitions: {
377
+ elevationScale: 1000,
378
+ duration: 2000,
379
+ },
380
+ colorRange: [
381
+ [242, 240, 247, 200],
382
+ [218, 218, 235, 200],
383
+ [188, 189, 220, 200],
384
+ [158, 154, 200, 200],
385
+ [117, 107, 177, 200],
386
+ [84, 39, 143, 200],
387
+ ,
388
+ ],
389
+ colorScaleType: "quantile",
390
+ radius: 5000,
391
+ pickable: true,
392
+ elevationAggregation: "MEAN",
393
+ colorAggregation: "MEAN",
394
+ }),
395
+ ],
396
+ getTooltip,
397
+ });
398
+ } else if (selectedBoxId == "pm") {
399
+ console.log(" Do something to PM");
400
+
401
+ deckInstance.setProps({
402
+ layers: [
403
+ province_boundary,
404
+ new deck.HexagonLayer({
405
+ id: "HexagonLayer",
406
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
407
+ extruded: true,
408
+ getPosition: (d) => [d.lon, d.lat],
409
+ getColorWeight: (d) => d.pm_2033,
410
+ getElevationWeight: (d) => d.pm_2033,
411
+ elevationScale: 100,
412
+ transitions: {
413
+ elevationScale: 1000,
414
+ },
415
+ colorRange: [
416
+ [247, 247, 247, 200],
417
+ [217, 217, 217, 200],
418
+ [189, 189, 189, 200],
419
+ [150, 150, 150, 200],
420
+ [99, 99, 99, 200],
421
+ [37, 37, 37, 200],
422
+ ],
423
+ colorScaleType: "quantile",
424
+ radius: 5000,
425
+ pickable: true,
426
+ elevationAggregation: "MAX",
427
+ colorAggregation: "MAX",
428
+ }),
429
+ ],
430
+ getTooltip,
431
+ });
432
+ }
433
+
434
+ // refresh again after 60 seconds
435
+ setTimeout(updateMap, 60000);
436
+ }
437
+
438
+ const boxes = document.querySelectorAll(".box");
439
+
440
+ boxes.forEach((box) => {
441
+ box.addEventListener("click", function () {
442
+ // Remove 'selected' class from all boxes
443
+ boxes.forEach((b) =>
444
+ b.classList.remove("selected", "bg-cyan-500", "text-white")
445
+ );
446
+
447
+ // Add 'selected' class to the clicked box
448
+ this.classList.add("selected", "bg-cyan-500", "text-white");
449
+
450
+ updateMap();
451
+ });
452
+ });
453
+
454
+ function getSelectedBox() {
455
+ const selectedBox = document.querySelector(".box.selected");
456
+ if (selectedBox) {
457
+ return selectedBox.getAttribute("data-id"); // Return the selected box's data-id
458
+ }
459
+ return null;
460
+ }
461
+ </script>
462
+
463
+ <script>
464
+ // Get the context of the canvas element
465
+ const ctx = document
466
+ .getElementById("disasterForecastChart")
467
+ .getContext("2d");
468
+ const myBarChart = new Chart(ctx, {
469
+ type: "bar",
470
+ data: {
471
+ labels: [
472
+ "Cash Flow from investing activities",
473
+ "Cash flow from operating activities",
474
+ "Trade and other receivables",
475
+ "Total current liabilities",
476
+ "Total debts",
477
+ "Total assets",
478
+ "Cash Flow from Financing Activities",
479
+ "Inventories",
480
+ "Total cost",
481
+ "Revenue",
482
+ "Profit",
483
+ "Cost of Revenue",
484
+ "Cash and cash equivalents",
485
+ ],
486
+ datasets: [
487
+ {
488
+ label: "3 Year (2026)",
489
+ data: [
490
+ 192.32211203316484,
491
+ 31.527679984513156,
492
+ 15.088625273386326,
493
+ 608.1798917108054,
494
+ 8.673990485461957,
495
+ 479.07264201740963,
496
+ 204.2409737359837,
497
+ 393.1893520844654,
498
+ 353.5789533932493,
499
+ 18.540743947762593,
500
+ 27.86393758897802,
501
+ -62.860186266031164,
502
+ 205.04142013990258
503
+ ],
504
+ borderWidth: 1,
505
+ },
506
+ {
507
+ label: "5 Years (2028)",
508
+ data: [
509
+ 103.00237051249468,
510
+ 35.60339672392928,
511
+ 14.248921235709451,
512
+ 467.26914701361676,
513
+ 15.40074184170274,
514
+ 332.63633659313587,
515
+ 248.64127328510688,
516
+ 426.30922868841577,
517
+ 365.0570832518623,
518
+ 37.2717443270586,
519
+ 39.08841398528503,
520
+ -74.2073880473869,
521
+ 32.24411763166381
522
+ ],
523
+ borderWidth: 1,
524
+ },
525
+ {
526
+ label: "10 Years (2033)",
527
+ data: [
528
+ 94.1414973433603,
529
+ 22.35379745877924,
530
+ 18.87017587736522,
531
+ 463.9626168238788,
532
+ 27.608744205148383,
533
+ 316.75975707398106,
534
+ 334.02838010281664,
535
+ 570.3217257609219,
536
+ 480.3701411444466,
537
+ 57.1254581580325,
538
+ 53.32010039990543,
539
+ -92.17169256154112,
540
+ -41.619557207640355
541
+ ],
542
+ borderWidth: 1,
543
+ },
544
+ ],
545
+ },
546
+ options: {
547
+ indexAxis: "y", // This makes the bar chart horizontal
548
+ scales: {
549
+ x: {
550
+ beginAtZero: true,
551
+ },
552
+ },
553
+ },
554
+ });
555
+
556
+ // Get the context of the canvas element
557
+ const ctx2 = document
558
+ .getElementById("disasterLineChart")
559
+ .getContext("2d");
560
+ const myLineChart2 = new Chart(ctx2, {
561
+ type: "line",
562
+ data: {
563
+ labels: [
564
+ "2023",
565
+ "2024",
566
+ "2025",
567
+ "2026",
568
+ "2027",
569
+ "2028",
570
+ "2029",
571
+ "2030",
572
+ "2031",
573
+ "2032",
574
+ "2033",
575
+ ],
576
+ datasets: [
577
+ {
578
+ label: "Wind",
579
+ data: [
580
+ 251.60793283708682, 258.9494574311963, 275.7163314632364,
581
+ 272.9505698081064, 252.67203984024647, 244.55433056847482,
582
+ 237.19113462684362, 251.99048387071943, 245.59006556916714,
583
+ 244.15652608753243, 263.3640711360034,
584
+ ],
585
+ borderColor: "rgba(255, 99, 132, 1)",
586
+ backgroundColor: "rgba(255, 99, 132, 0.2)",
587
+ fill: true,
588
+ },
589
+ {
590
+ label: "Flood",
591
+ data: [
592
+ 90.2725237103977, 97.98191332728928, 100.31649584769123,
593
+ 105.63453152696367, 96.58372235898372, 89.3943864299188,
594
+ 94.081698892078, 87.01861689334801, 81.91590014730753,
595
+ 79.0147463915676, 82.78755915944409,
596
+ ],
597
+ borderColor: "rgba(54, 162, 235, 1)",
598
+ backgroundColor: "rgba(54, 162, 235, 0.2)",
599
+ fill: true,
600
+ },
601
+ {
602
+ label: "Air Pollution",
603
+ data: [
604
+ 36.01993483269402, 34.97180485884851, 32.32156177929745,
605
+ 34.94356111454648, 33.2711644360697, 33.00160027466582,
606
+ 35.71720373512917, 32.40541263160735, 29.65267820060595,
607
+ 28.973788179594084, 29.479574700489163,
608
+ ],
609
+ borderColor: "rgba(112, 112, 112, 1)",
610
+ backgroundColor: "rgba(112, 192, 192, 0.2)",
611
+ fill: true,
612
+ },
613
+ ],
614
+ },
615
+ options: {
616
+ scales: {
617
+ y: {
618
+ beginAtZero: true,
619
+ },
620
+ },
621
+ },
622
+ });
623
+
624
+ // Get the context of the canvas element
625
+ const ctx3 = document
626
+ .getElementById("financeHighChange")
627
+ .getContext("2d");
628
+
629
+ // Create the chart
630
+ const myRadarChart = new Chart(ctx3, {
631
+ type: "radar",
632
+ data: {
633
+ labels: ["Speed", "Strength", "Agility", "Endurance", "Flexibility"],
634
+ datasets: [
635
+ {
636
+ label: "Person A",
637
+ data: [65, 75, 70, 80, 60],
638
+ borderColor: "rgba(255, 99, 132, 1)",
639
+ backgroundColor: "rgba(255, 99, 132, 0.2)",
640
+ fill: true,
641
+ },
642
+ {
643
+ label: "Person B",
644
+ data: [54, 65, 60, 70, 75],
645
+ borderColor: "rgba(54, 162, 235, 1)",
646
+ backgroundColor: "rgba(54, 162, 235, 0.2)",
647
+ fill: true,
648
+ },
649
+ ],
650
+ },
651
+ options: {
652
+ scales: {
653
+ r: {
654
+ angleLines: {
655
+ display: true,
656
+ },
657
+ suggestedMin: 0,
658
+ suggestedMax: 100,
659
+ },
660
+ },
661
+ },
662
+ });
663
+
664
+ // Get the context of the canvas element
665
+ const ctx4 = document.getElementById("financeMidChange").getContext("2d");
666
+ const myBarChart4 = new Chart(ctx4, {
667
+ type: "bar",
668
+ data: {
669
+ labels: ["January", "February", "March", "April", "May"],
670
+ datasets: [
671
+ {
672
+ label: "Sales",
673
+ data: [300, 450, 100, 550, 700],
674
+ backgroundColor: [
675
+ "rgba(255, 99, 132, 0.2)",
676
+ "rgba(54, 162, 235, 0.2)",
677
+ "rgba(75, 192, 192, 0.2)",
678
+ "rgba(153, 102, 255, 0.2)",
679
+ "rgba(255, 159, 64, 0.2)",
680
+ ],
681
+ borderColor: [
682
+ "rgba(255, 99, 132, 1)",
683
+ "rgba(54, 162, 235, 1)",
684
+ "rgba(75, 192, 192, 1)",
685
+ "rgba(153, 102, 255, 1)",
686
+ "rgba(255, 159, 64, 1)",
687
+ ],
688
+ borderWidth: 1,
689
+ },
690
+ ],
691
+ },
692
+ options: {
693
+ indexAxis: "y", // This makes the bar chart horizontal
694
+ scales: {
695
+ x: {
696
+ beginAtZero: true,
697
+ },
698
+ },
699
+ },
700
+ });
701
+
702
+ // Get the context of the canvas element
703
+ const ctx5 = document.getElementById("financeLowChange").getContext("2d");
704
+ const myBarChart5 = new Chart(ctx5, {
705
+ type: "bar",
706
+ data: {
707
+ labels: ["January", "February", "March", "April", "May"],
708
+ datasets: [
709
+ {
710
+ label: "Sales",
711
+ data: [300, 450, 100, 550, 700],
712
+ backgroundColor: [
713
+ "rgba(255, 99, 132, 0.2)",
714
+ "rgba(54, 162, 235, 0.2)",
715
+ "rgba(75, 192, 192, 0.2)",
716
+ "rgba(153, 102, 255, 0.2)",
717
+ "rgba(255, 159, 64, 0.2)",
718
+ ],
719
+ borderColor: [
720
+ "rgba(255, 99, 132, 1)",
721
+ "rgba(54, 162, 235, 1)",
722
+ "rgba(75, 192, 192, 1)",
723
+ "rgba(153, 102, 255, 1)",
724
+ "rgba(255, 159, 64, 1)",
725
+ ],
726
+ borderWidth: 1,
727
+ },
728
+ ],
729
+ },
730
+ options: {
731
+ indexAxis: "y", // This makes the bar chart horizontal
732
+ scales: {
733
+ x: {
734
+ beginAtZero: true,
735
+ },
736
+ },
737
+ },
738
+ });
739
+
740
+ // Get the context of the canvas element
741
+ const ctx6 = document.getElementById("myMixedChart").getContext("2d");
742
+ const myMixedChart = new Chart(ctx6, {
743
+ type: "bar", // Default chart type is bar
744
+ data: {
745
+ labels: ["January", "February", "March", "April", "May"],
746
+ datasets: [
747
+ {
748
+ label: "Sales (Bar)",
749
+ data: [300, 450, 100, 550, 700],
750
+ backgroundColor: "rgba(54, 162, 235, 0.5)",
751
+ borderColor: "rgba(54, 162, 235, 1)",
752
+ borderWidth: 1,
753
+ type: "bar",
754
+ },
755
+ {
756
+ label: "Revenue (Line)",
757
+ data: [50, 80, 30, 100, 90],
758
+ borderColor: "rgba(255, 99, 132, 1)",
759
+ backgroundColor: "rgba(255, 99, 132, 0.2)",
760
+ fill: false,
761
+ type: "line",
762
+ tension: 0.4, // Smoother line
763
+ },
764
+ ],
765
+ },
766
+ options: {
767
+ scales: {
768
+ y: {
769
+ beginAtZero: true,
770
+ },
771
+ },
772
+ },
773
+ });
774
+ </script>
775
+ </body>
776
+ </html>
index.html CHANGED
@@ -1,19 +1,236 @@
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">
3
+ <head>
4
+ <title></title>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <script src="static/js/tailwind@3.4.5.js"></script>
8
+ </head>
9
+ <body>
10
+
11
+ <header>
12
+ <nav x-data="{ isOpen: false }" class="bg-white shadow dark:bg-gray-900">
13
+ <div class="container px-6 py-4 mx-auto">
14
+ <div class="lg:flex lg:items-center lg:justify-between">
15
+ <div class="flex items-center justify-between">
16
+ <a href="#" class="mx-auto ">
17
+ <img class="w-auto h-6 sm:h-7" src="static/icon/logo.png" alt="">
18
+ </a>
19
+
20
+ <!-- Mobile menu button -->
21
+ <div class="flex lg:hidden">
22
+ <button x-cloak @click="isOpen = !isOpen" type="button" class="text-gray-500 dark:text-gray-200 hover:text-gray-600 dark:hover:text-gray-400 focus:outline-none focus:text-gray-600 dark:focus:text-gray-400" aria-label="toggle menu">
23
+ <svg x-show="!isOpen" xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
24
+ <path stroke-linecap="round" stroke-linejoin="round" d="M4 8h16M4 16h16" />
25
+ </svg>
26
+
27
+ <svg x-show="isOpen" xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
28
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
29
+ </svg>
30
+ </button>
31
+ </div>
32
+ </div>
33
+
34
+ <!-- Mobile Menu open: "block", Menu closed: "hidden" -->
35
+ <div x-cloak :class="[isOpen ? 'translate-x-0 opacity-100 ' : 'opacity-0 -translate-x-full']" class="absolute inset-x-0 z-20 w-full px-6 py-4 transition-all duration-300 ease-in-out bg-white shadow-md lg:bg-transparent lg:dark:bg-transparent lg:shadow-none dark:bg-gray-900 lg:mt-0 lg:p-0 lg:top-0 lg:relative lg:w-auto lg:opacity-100 lg:translate-x-0">
36
+ <div class="-mx-4 lg:flex lg:items-center">
37
+ <a href="analytics.html" class="block mx-4 text-blue-900 font-bold capitalize dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400">Overview Map</a>
38
+ <a href="locations.html" class="block mx-4 mt-4 text-blue-900 font-bold capitalize lg:mt-0 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400">Location-Based</a>
39
+ <a href="forecast.html" class="block mx-4 mt-4 text-blue-900 font-bold capitalize lg:mt-0 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400">Forecasting</a>
40
+ <a href="#" class="block mx-4 mt-4 text-rose-900 font-bold capitalize lg:mt-0 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400">Contact</a>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </nav>
46
+
47
+ <div class="w-full bg-center bg-cover h-[38rem]" style="background-image: url('static/image/hero-city-pin.png');">
48
+ <div class="flex items-center justify-center w-full h-full bg-gray-900/40">
49
+ <div class="text-center">
50
+ <h1 class="text-3xl font-semibold text-white lg:text-4xl">Economic-Disaster for <span class="text-blue-400">Business</span></h1>
51
+ <button class="w-full px-5 py-2 mt-4 text-sm font-medium text-white capitalize transition-colors duration-300 transform bg-blue-400 rounded-md lg:w-auto hover:bg-blue-200 focus:outline-none focus:bg-blue-500">Demo</button>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </header>
56
+
57
+
58
+
59
+ <section class="bg-white dark:bg-gray-900">
60
+ <div class="container px-6 py-10 mx-auto">
61
+
62
+
63
+ <h1 class="text-lg font-semibold text-center text-blue-800 capitalize lg:text-3xl dark:text-white">
64
+ Analytical Integration for Finanance and Geoinfomatics</h1>
65
+
66
+
67
+
68
+ <div class="grid grid-cols-1 gap-8 mt-8 xl:mt-12 xl:gap-12 lg:grid-cols-4">
69
+ <div class="flex items-end overflow-hidden bg-cover rounded-lg h-96" style="background-image:url('static/image/flood.jpeg')">
70
+ <div class="w-full px-8 py-4 overflow-hidden rounded-b-lg backdrop-blur-sm bg-white/60 dark:bg-gray-800/60">
71
+ <h2 class="mt-4 text-xl font-semibold text-blue-800 capitalize dark:text-white">Disaster Impact</h2>
72
+ <p class="mt-2 text-lg tracking-wider text-blue-500 uppercase dark:text-blue-400 ">Finance</p>
73
+ </div>
74
+ </div>
75
+
76
+ <div class="flex items-end overflow-hidden bg-cover rounded-lg h-96" style="background-image:url('static/image/economic.webp')">
77
+ <div class="w-full px-8 py-4 overflow-hidden rounded-b-lg backdrop-blur-sm bg-white/60 dark:bg-gray-800/60">
78
+ <h2 class="mt-4 text-xl font-semibold text-blue-800 capitalize dark:text-white">Economic Affect</h2>
79
+ <p class="mt-2 text-lg tracking-wider text-blue-500 uppercase dark:text-blue-400 ">Loss and Gain</p>
80
+ </div>
81
+ </div>
82
+
83
+ <div class="flex items-end overflow-hidden bg-cover rounded-lg h-96" style="background-image:url('static/image/pin-location.jpeg')">
84
+ <div class="w-full px-8 py-4 overflow-hidden rounded-b-lg backdrop-blur-sm bg-white/60 dark:bg-gray-800/60">
85
+ <h2 class="mt-4 text-xl font-semibold text-blue-800 capitalize dark:text-white">Location Visual</h2>
86
+ <p class="mt-2 text-lg tracking-wider text-blue-500 uppercase dark:text-blue-400 ">3D Map</p>
87
+ </div>
88
+ </div>
89
+
90
+ <div class="flex items-end overflow-hidden bg-cover rounded-lg h-96" style="background-image:url('static/image/climate.webp')">
91
+ <div class="w-full px-8 py-4 overflow-hidden rounded-b-lg backdrop-blur-sm bg-white/60 dark:bg-gray-800/60">
92
+ <h2 class="mt-4 text-xl font-semibold text-blue-800 capitalize dark:text-white">Forecasting</h2>
93
+ <p class="mt-2 text-lg tracking-wider text-blue-500 uppercase dark:text-blue-400 ">10 Years</p>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </div>
98
+ </section>
99
+
100
+
101
+
102
+ <div class="flex justify-center items-center p-6">
103
+ <div class="flex flex-col md:flex-row items-center bg-white p-6 md:p-12 rounded-lg max-w-4xl">
104
+ <!-- Text Section -->
105
+ <div class="md:w-1/2 mb-6 md:mb-0 md:pr-8 text-center md:text-left">
106
+ <h2 class="text-3xl font-bold text-indigo-800 mb-4">
107
+ High-capability analysis
108
+ </h2>
109
+ <p class="text-indigo-500 text-lg leading-relaxed italic">
110
+ Enable geospatial data on disaster location hightlighting occurances affecting business unit.
111
+ </p>
112
+ </div>
113
+
114
+ <!-- Image Section -->
115
+ <div class="md:w-1/2 flex justify-center">
116
+ <img
117
+ src="static/image/hero.png"
118
+ alt="Data Insights"
119
+ class="rounded-lg shadow-lg w-full max-w-xs md:max-w-sm"
120
+ />
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+
126
+ <div class="flex flex-col md:flex-row items-center bg-white p-8 md:p-16">
127
+
128
+ <!-- Image Section -->
129
+ <div class="md:w-1/2 flex justify-center">
130
+ <img
131
+ src="static/image/report.jpeg"
132
+ alt="Data Insights"
133
+ class="rounded-lg shadow-lg w-full max-w-sm"
134
+ />
135
+ </div>
136
+
137
+ <!-- Text Section -->
138
+ <div class="md:w-1/2 mb-8 md:mb-0 md:pr-8">
139
+ <h2 class="text-3xl font-bold text-indigo-800 mb-4">
140
+ Evalute Financial Impact Concerns
141
+ </h2>
142
+ <p class="text-indigo-600 text-lg leading-relaxed italic">
143
+ Discover insights and make data-driven decisions for business. Academic proved modeling enlightens considerable fianances for future management.
144
+ </p>
145
+ </div>
146
+
147
+
148
+ </div>
149
+
150
+
151
+ <div class="mt-6">
152
+ <div class="grid sm:grid-cols-2 items-start gap-14 p-8 mx-auto max-w-4xl bg-white shadow-[0_2px_10px_-3px_rgba(6,81,237,0.3)] rounded-md font-[sans-serif]">
153
+ <div>
154
+ <h1 class="text-gray-800 text-3xl font-extrabold">Interesting?</h1>
155
+ <p class="text-sm text-gray-500 mt-4">Feel free to contact us for more updates and news. Ask anything and let's talk together</p>
156
+
157
+ <div class="mt-12">
158
+ <h2 class="text-gray-800 text-base font-bold">Email</h2>
159
+ <ul class="mt-4">
160
+ <li class="flex items-center">
161
+ <div class="bg-[#e6e6e6cf] h-10 w-10 rounded-full flex items-center justify-center shrink-0">
162
+ <svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" fill='#007bff'
163
+ viewBox="0 0 479.058 479.058">
164
+ <path
165
+ d="M434.146 59.882H44.912C20.146 59.882 0 80.028 0 104.794v269.47c0 24.766 20.146 44.912 44.912 44.912h389.234c24.766 0 44.912-20.146 44.912-44.912v-269.47c0-24.766-20.146-44.912-44.912-44.912zm0 29.941c2.034 0 3.969.422 5.738 1.159L239.529 264.631 39.173 90.982a14.902 14.902 0 0 1 5.738-1.159zm0 299.411H44.912c-8.26 0-14.971-6.71-14.971-14.971V122.615l199.778 173.141c2.822 2.441 6.316 3.655 9.81 3.655s6.988-1.213 9.81-3.655l199.778-173.141v251.649c-.001 8.26-6.711 14.97-14.971 14.97z"
166
+ data-original="#000000" />
167
+ </svg>
168
+ </div>
169
+ <a href="javascript:void(0)" class="text-[#007bff] text-sm ml-4">
170
+ <small class="block">Mail</small>
171
+ <strong>info@example.com</strong>
172
+ </a>
173
+ </li>
174
+ </ul>
175
+ </div>
176
+
177
+ <div class="mt-12">
178
+ <h2 class="text-gray-800 text-base font-bold">Socials</h2>
179
+
180
+ <ul class="flex mt-4 space-x-4">
181
+ <li class="bg-[#e6e6e6cf] h-10 w-10 rounded-full flex items-center justify-center shrink-0">
182
+ <a href="javascript:void(0)">
183
+ <svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" fill='#007bff'
184
+ viewBox="0 0 24 24">
185
+ <path
186
+ d="M6.812 13.937H9.33v9.312c0 .414.335.75.75.75l4.007.001a.75.75 0 0 0 .75-.75v-9.312h2.387a.75.75 0 0 0 .744-.657l.498-4a.75.75 0 0 0-.744-.843h-2.885c.113-2.471-.435-3.202 1.172-3.202 1.088-.13 2.804.421 2.804-.75V.909a.75.75 0 0 0-.648-.743A26.926 26.926 0 0 0 15.071 0c-7.01 0-5.567 7.772-5.74 8.437H6.812a.75.75 0 0 0-.75.75v4c0 .414.336.75.75.75zm.75-3.999h2.518a.75.75 0 0 0 .75-.75V6.037c0-2.883 1.545-4.536 4.24-4.536.878 0 1.686.043 2.242.087v2.149c-.402.205-3.976-.884-3.976 2.697v2.755c0 .414.336.75.75.75h2.786l-.312 2.5h-2.474a.75.75 0 0 0-.75.75V22.5h-2.505v-9.312a.75.75 0 0 0-.75-.75H7.562z"
187
+ data-original="#000000" />
188
+ </svg>
189
+ </a>
190
+ </li>
191
+ <li class="bg-[#e6e6e6cf] h-10 w-10 rounded-full flex items-center justify-center shrink-0">
192
+ <a href="javascript:void(0)">
193
+ <svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" fill='#007bff'
194
+ viewBox="0 0 511 512">
195
+ <path
196
+ d="M111.898 160.664H15.5c-8.285 0-15 6.719-15 15V497c0 8.285 6.715 15 15 15h96.398c8.286 0 15-6.715 15-15V175.664c0-8.281-6.714-15-15-15zM96.898 482H30.5V190.664h66.398zM63.703 0C28.852 0 .5 28.352.5 63.195c0 34.852 28.352 63.2 63.203 63.2 34.848 0 63.195-28.352 63.195-63.2C126.898 28.352 98.551 0 63.703 0zm0 96.395c-18.308 0-33.203-14.891-33.203-33.2C30.5 44.891 45.395 30 63.703 30c18.305 0 33.195 14.89 33.195 33.195 0 18.309-14.89 33.2-33.195 33.2zm289.207 62.148c-22.8 0-45.273 5.496-65.398 15.777-.684-7.652-7.11-13.656-14.942-13.656h-96.406c-8.281 0-15 6.719-15 15V497c0 8.285 6.719 15 15 15h96.406c8.285 0 15-6.715 15-15V320.266c0-22.735 18.5-41.23 41.235-41.23 22.734 0 41.226 18.495 41.226 41.23V497c0 8.285 6.719 15 15 15h96.403c8.285 0 15-6.715 15-15V302.066c0-79.14-64.383-143.523-143.524-143.523zM466.434 482h-66.399V320.266c0-39.278-31.953-71.23-71.226-71.23-39.282 0-71.239 31.952-71.239 71.23V482h-66.402V190.664h66.402v11.082c0 5.77 3.309 11.027 8.512 13.524a15.01 15.01 0 0 0 15.875-1.82c20.313-16.294 44.852-24.907 70.953-24.907 62.598 0 113.524 50.926 113.524 113.523zm0 0"
197
+ data-original="#000000" />
198
+ </svg>
199
+ </a>
200
+ </li>
201
+ <li class="bg-[#e6e6e6cf] h-10 w-10 rounded-full flex items-center justify-center shrink-0">
202
+ <a href="javascript:void(0)">
203
+ <svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" fill='#007bff'
204
+ viewBox="0 0 24 24">
205
+ <path
206
+ d="M12 9.3a2.7 2.7 0 1 0 0 5.4 2.7 2.7 0 0 0 0-5.4Zm0-1.8a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9Zm5.85-.225a1.125 1.125 0 1 1-2.25 0 1.125 1.125 0 0 1 2.25 0ZM12 4.8c-2.227 0-2.59.006-3.626.052-.706.034-1.18.128-1.618.299a2.59 2.59 0 0 0-.972.633 2.601 2.601 0 0 0-.634.972c-.17.44-.265.913-.298 1.618C4.805 9.367 4.8 9.714 4.8 12c0 2.227.006 2.59.052 3.626.034.705.128 1.18.298 1.617.153.392.333.674.632.972.303.303.585.484.972.633.445.172.918.267 1.62.3.993.047 1.34.052 3.626.052 2.227 0 2.59-.006 3.626-.052.704-.034 1.178-.128 1.617-.298.39-.152.674-.333.972-.632.304-.303.485-.585.634-.972.171-.444.266-.918.299-1.62.047-.993.052-1.34.052-3.626 0-2.227-.006-2.59-.052-3.626-.034-.704-.128-1.18-.299-1.618a2.619 2.619 0 0 0-.633-.972 2.595 2.595 0 0 0-.972-.634c-.44-.17-.914-.265-1.618-.298-.993-.047-1.34-.052-3.626-.052ZM12 3c2.445 0 2.75.009 3.71.054.958.045 1.61.195 2.185.419A4.388 4.388 0 0 1 19.49 4.51c.457.45.812.994 1.038 1.595.222.573.373 1.227.418 2.185.042.96.054 1.265.054 3.71 0 2.445-.009 2.75-.054 3.71-.045.958-.196 1.61-.419 2.185a4.395 4.395 0 0 1-1.037 1.595 4.44 4.44 0 0 1-1.595 1.038c-.573.222-1.227.373-2.185.418-.96.042-1.265.054-3.71.054-2.445 0-2.75-.009-3.71-.054-.958-.045-1.61-.196-2.185-.419A4.402 4.402 0 0 1 4.51 19.49a4.414 4.414 0 0 1-1.037-1.595c-.224-.573-.374-1.227-.419-2.185C3.012 14.75 3 14.445 3 12c0-2.445.009-2.75.054-3.71s.195-1.61.419-2.185A4.392 4.392 0 0 1 4.51 4.51c.45-.458.994-.812 1.595-1.037.574-.224 1.226-.374 2.185-.419C9.25 3.012 9.555 3 12 3Z">
207
+ </path>
208
+ </svg>
209
+ </a>
210
+ </li>
211
+ </ul>
212
+ </div>
213
+ </div>
214
+
215
+ <form class="ml-auo space-y-4">
216
+ <input type='text' placeholder='How can we call your name?'
217
+ class="w-full text-gray-800 rounded-md py-2.5 px-4 border text-sm outline-blue-500" />
218
+ <input type='email' placeholder='Email'
219
+ class="w-full text-gray-800 rounded-md py-2.5 px-4 border text-sm outline-blue-500" />
220
+ <input type='text' placeholder='Something may we can help you?'
221
+ class="w-full text-gray-800 rounded-md py-2.5 px-4 border text-sm outline-blue-500" />
222
+ <textarea placeholder='We are great to see your comments...' rows="6"
223
+ class="w-full text-gray-800 rounded-md px-4 border text-sm pt-2.5 outline-blue-500"></textarea>
224
+ <button type='button'
225
+ class="text-white bg-blue-500 hover:bg-blue-600 rounded-md text-sm px-4 py-3 w-full !mt-6">Greeting us!</button>
226
+ </form>
227
+ </div>
228
+ </div>
229
+
230
+
231
+
232
+
233
+
234
+
235
+ </body>
236
+ </html>
locations.html ADDED
@@ -0,0 +1,594 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Disaster Risk and Impact Analysis</title>
7
+
8
+ <script src="static/js/deckgl@9.0.33.min.js"></script>
9
+
10
+ <script src="static/js/maplibre-gl@3.0.0.js"></script>
11
+ <link href="static/css/maplibre-gl@3.0.0.css" rel="stylesheet" />
12
+
13
+ <script src="static/js/tailwind@3.4.5.js"></script>
14
+ <script src="static/js/chart.js"></script>
15
+
16
+ <script src="static/js/popper.min.js"></script>
17
+ <script src="static/js/tippy-bundle.umd.min.js"></script>
18
+
19
+ <link rel="stylesheet" href="static/css/font-awesome@all.min.css" />
20
+
21
+ <style>
22
+ html,
23
+ body {
24
+ height: 100%;
25
+ margin: 0;
26
+ }
27
+ #map {
28
+ width: 100%;
29
+ height: 100%;
30
+ position: absolute;
31
+ top: 0;
32
+ left: 0;
33
+ }
34
+ </style>
35
+ </head>
36
+ <body>
37
+ <!-- Floating Box for Charts -->
38
+ <div
39
+ class="absolute left-4 top-4 h-9/10 bottom-4 w-2/5 p-6 bg-white backdrop-blur-sm bg-opacity-60 shadow-lg overflow-y-auto z-10 rounded-2xl"
40
+ >
41
+ <h1 class="text-2xl font-bold mb-4 text-center">Location Insight</h1>
42
+
43
+ <!-- STATISTICS -->
44
+ <h1 class="text-l font-bold mb-4">Statistic</h1>
45
+
46
+ <div class="flex flex-col space-y-4 w-full">
47
+ <div
48
+ class="bg-white text-black p-6 rounded-xl shadow-md flex items-center justify-between"
49
+ >
50
+ <div class="flex items-center space-x-4">
51
+ <div class="icon bg-gray-200 p-2 rounded-full mr-4">
52
+ <img
53
+ src="static/icon/pin.png"
54
+ alt="Icon 2"
55
+ class="h-6 w-6 rounded-full"
56
+ />
57
+ </div>
58
+ <h2 class="text-xl font-bold">Locations</h2>
59
+ </div>
60
+ <span class="text-2xl font-bold">104</span>
61
+ </div>
62
+ </div>
63
+
64
+ <!-- LAYER CONTROL -->
65
+
66
+ <h2 class="text-l font-bold mt-8 mb-4">Show Disaster Intensity</h2>
67
+ <div id="boxContainer" class="grid grid-cols-3 gap-4 mt-4">
68
+ <div
69
+ class="box flex items-center p-4 border rounded-lg cursor-pointer transition-all duration-300 bg-white"
70
+ data-id="wind"
71
+ >
72
+ <div class="icon bg-gray-200 p-2 rounded-full mr-4">
73
+ <img
74
+ src="static/icon/wind.png"
75
+ alt="Icon 2"
76
+ class="h-6 w-6 rounded-full"
77
+ />
78
+ </div>
79
+ <h1 class="text-lg font-semibold">Wind</h1>
80
+ </div>
81
+
82
+ <div
83
+ class="box flex items-center p-4 bg-white border rounded-lg cursor-pointer transition-all duration-300"
84
+ data-id="flood"
85
+ >
86
+ <div class="icon bg-gray-200 p-2 rounded-full mr-4">
87
+ <img
88
+ src="static/icon/flood.png"
89
+ alt="Icon 2"
90
+ class="h-6 w-6 rounded-full"
91
+ />
92
+ </div>
93
+ <h1 class="text-lg font-semibold">Flood</h1>
94
+ </div>
95
+
96
+ <div
97
+ class="box flex items-center p-4 bg-white border rounded-lg cursor-pointer transition-all duration-300"
98
+ data-id="pm"
99
+ >
100
+ <div class="icon bg-gray-200 p-2 rounded-full mr-4">
101
+ <img
102
+ src="static/icon/pm.png"
103
+ alt="Icon 2"
104
+ class="h-6 w-6 rounded-full"
105
+ />
106
+ </div>
107
+ <h1 class="text-lg font-semibold">Air Pollution</h1>
108
+ </div>
109
+ </div>
110
+
111
+ <!-- Top 5 Location Impact to Wind -->
112
+
113
+ <h2 class="text-l font-bold mt-8 mb-4">
114
+ Top 5 Locations Most Affected by Wind
115
+ </h2>
116
+
117
+ <div
118
+ class="w-full max-w-4xl backdrop-blur-sm shadow-lg rounded-xl p-4 overflow-x-auto"
119
+ >
120
+ <table class="min-w-full table-auto">
121
+ <thead>
122
+ <tr class="bg-gray-200 text-left">
123
+ <th class="p-4 font-bold text-gray-600">Top</th>
124
+ <th class="p-4 font-bold text-gray-600">Branch</th>
125
+ <th class="p-4 font-bold text-gray-600">Score</th>
126
+ </tr>
127
+ </thead>
128
+ <tbody>
129
+ <tr class="border-b cursor-pointer hover:bg-red-400 bg-red-300">
130
+ <td class="p-4">1</td>
131
+ <td class="p-4">HomePro Phetchabun Branch</td>
132
+ <td class="p-4">14.04</td>
133
+ </tr>
134
+ <tr class="border-b cursor-pointer hover:bg-red-400 bg-red-200">
135
+ <td class="p-4">2</td>
136
+ <td class="p-4">Home Pro Chiang Rai</td>
137
+ <td class="p-4">13.52</td>
138
+ </tr>
139
+ <tr class="border-b cursor-pointer hover:bg-red-400 bg-red-100">
140
+ <td class="p-4">3</td>
141
+ <td class="p-4">HomePro Nakhon Si Thammarat</td>
142
+ <td class="p-4">8.687</td>
143
+ </tr>
144
+ <tr class="border-b cursor-pointer hover:bg-red-400">
145
+ <td class="p-4">4</td>
146
+ <td class="p-4">Homepro Chaiyaphum</td>
147
+ <td class="p-4">7.845</td>
148
+ </tr>
149
+ <tr class="border-b cursor-pointer hover:bg-red-400">
150
+ <td class="p-4">5</td>
151
+ <td class="p-4">HomePro (San Sai)</td>
152
+ <td class="p-4">6.311</td>
153
+ </tr>
154
+ </tbody>
155
+ </table>
156
+ </div>
157
+
158
+ <!-- Top 5 Location Impact to Flood -->
159
+
160
+ <h2 class="text-md font-bold mt-8 mb-4">
161
+ Top 5 Locations Most Affected by Flood
162
+ </h2>
163
+
164
+ <div
165
+ class="w-full max-w-4xl backdrop-blur-sm shadow-lg rounded-xl p-4 overflow-x-auto"
166
+ >
167
+ <table class="min-w-full table-auto">
168
+ <thead>
169
+ <tr class="bg-gray-200 text-left">
170
+ <th class="p-4 font-bold text-gray-600">Top</th>
171
+ <th class="p-4 font-bold text-gray-600">Branch</th>
172
+ <th class="p-4 font-bold text-gray-600">Score</th>
173
+ </tr>
174
+ </thead>
175
+ <tbody>
176
+ <tr class="border-b cursor-pointer hover:bg-blue-400 bg-blue-300">
177
+ <td class="p-4">1</td>
178
+ <td class="p-4">HomePro Nakhon Si Thammarat</td>
179
+ <td class="p-4">8.687</td>
180
+ </tr>
181
+ <tr class="border-b cursor-pointer hover:bg-blue-400 bg-blue-200">
182
+ <td class="p-4">2</td>
183
+ <td class="p-4">HomePro (San Sai)</td>
184
+ <td class="p-4">6.311</td>
185
+ </tr>
186
+ <tr class="border-b cursor-pointer hover:bg-blue-400 bg-blue-100">
187
+ <td class="p-4">3</td>
188
+ <td class="p-4">Home Pro (Chiang Mai)</td>
189
+ <td class="p-4">8.472</td>
190
+ </tr>
191
+ <tr class="border-b cursor-pointer hover:bg-blue-400">
192
+ <td class="p-4">4</td>
193
+ <td class="p-4">Home Pro (Chiang Mai Hangdong)</td>
194
+ <td class="p-4">7.006</td>
195
+ </tr>
196
+ <tr class="border-b cursor-pointer hover:bg-blue-400">
197
+ <td class="p-4">5</td>
198
+ <td class="p-4">HomePro </td>
199
+ <td class="p-4">4.392</td>
200
+ </tr>
201
+ </tbody>
202
+ </table>
203
+ </div>
204
+
205
+ <!-- Top 5 Location Impact to PM -->
206
+
207
+ <h2 class="text-l font-bold mt-8 mb-4">
208
+ Top 5 Locations Most Affected by Air Pollution
209
+ </h2>
210
+
211
+ <div
212
+ class="w-full max-w-4xl backdrop-blur-sm shadow-lg rounded-xl p-4 overflow-x-auto"
213
+ >
214
+ <table class="min-w-full table-auto">
215
+ <thead>
216
+ <tr class="bg-gray-200 text-left">
217
+ <th class="p-4 font-bold text-gray-600">Top</th>
218
+ <th class="p-4 font-bold text-gray-600">Branch</th>
219
+ <th class="p-4 font-bold text-gray-600">Score</th>
220
+ </tr>
221
+ </thead>
222
+ <tbody>
223
+ <tr class="border-b cursor-pointer hover:bg-gray-400 bg-gray-300">
224
+ <td class="p-4">1</td>
225
+ <td class="p-4">HomePro </td>
226
+ <td class="p-4">4.392</td>
227
+ </tr>
228
+ <tr class="border-b cursor-pointer hover:bg-gray-400 bg-gray-200">
229
+ <td class="p-4">2</td>
230
+ <td class="p-4">Home Pro (Ayutthaya)</td>
231
+ <td class="p-4">1.467</td>
232
+ </tr>
233
+ <tr class="border-b cursor-pointer hover:bg-gray-400 bg-gray-100">
234
+ <td class="p-4">3</td>
235
+ <td class="p-4">Home Pro the distribution center</td>
236
+ <td class="p-4">1.130</td>
237
+ </tr>
238
+ <tr class="border-b cursor-pointer hover:bg-gray-400">
239
+ <td class="p-4">4</td>
240
+ <td class="p-4">HomePro Rangsit Klong Si</td>
241
+ <td class="p-4">1.277</td>
242
+ </tr>
243
+ <tr class="border-b cursor-pointer hover:bg-gray-400">
244
+ <td class="p-4">5</td>
245
+ <td class="p-4">Home Pro (Future Park Rangsit)</td>
246
+ <td class="p-4">1.379</td>
247
+ </tr>
248
+ </tbody>
249
+ </table>
250
+ </div>
251
+ </div>
252
+
253
+ <!-- Fullscreen Map -->
254
+ <div id="map"></div>
255
+
256
+ <!--img
257
+ src="static/icon/logo.png"
258
+ alt="Top-right image"
259
+ class="absolute top-0 right-0 w-48 p-4"
260
+ /-->
261
+
262
+ <a href="index.html">
263
+ <img
264
+ src="static/icon/home.png"
265
+ id="goHome"
266
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-4 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
267
+ />
268
+ </a>
269
+
270
+ <a href="analytics.html">
271
+ <img
272
+ src="static/icon/radar.png"
273
+ id="goOverView"
274
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-20 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
275
+ />
276
+ </a>
277
+
278
+ <a href="locations.html">
279
+ <img
280
+ src="static/icon/location.png"
281
+ id="goLocation"
282
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-36 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
283
+ />
284
+ </a>
285
+
286
+ <a href="forecast.html">
287
+ <img
288
+ src="static/icon/forecast.png"
289
+ id="goForecast"
290
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg top-52 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
291
+ />
292
+ </a>
293
+
294
+ <img
295
+ src="static/icon/extent.png"
296
+ id="resetViewButton"
297
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg bottom-12 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
298
+ />
299
+
300
+ <img
301
+ src="static/icon/play.png"
302
+ id="animateButton"
303
+ class="absolute bg-white backdrop-blur-sm bg-opacity-60 rounded-xl shadow-lg bottom-28 right-4 w-12 p-4 hover:bg-opacity-100 hover:cursor-pointer"
304
+ />
305
+
306
+ <script>
307
+ let INIT_VIEW_STATE = {
308
+ longitude: 98.1339,
309
+ latitude: 10.863,
310
+ zoom: 5.594,
311
+ pitch: 48.3549,
312
+ bearing: -17.579,
313
+ };
314
+
315
+ var viewState = INIT_VIEW_STATE;
316
+
317
+ const firm_pin = new deck.IconLayer({
318
+ id: "IconLayerFIRM",
319
+ data: "data/firm/location_homepro_do_2018-2024.json",
320
+ getColor: (d) => [Math.sqrt(d.exits), 140, 0],
321
+ getIcon: (d) => "marker",
322
+ getPosition: (d) => [d.lon, d.lat],
323
+ getSize: 24,
324
+ iconAtlas:
325
+ "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/icon-atlas.png",
326
+ iconMapping:
327
+ "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/icon-atlas.json",
328
+ pickable: false,
329
+ });
330
+
331
+ // LAYER
332
+ /*
333
+ const firm_loc = new deck.HexagonLayer({
334
+ id: "HexagonLayer",
335
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
336
+ //extruded: true,
337
+ getPosition: (d) => [d.lon, d.lat],
338
+ getColorWeight: (d) => d.wind_2021,
339
+ getElevationWeight: (d) => d.wind_2021,
340
+ elevationScale: 10,
341
+ colorRange: [
342
+ [255, 255, 178, 200],
343
+ [254, 217, 118, 200],
344
+ [254, 178, 76, 200],
345
+ [253, 141, 60, 200],
346
+ [240, 59, 32, 200],
347
+ [189, 0, 38, 200],
348
+ ],
349
+ colorScaleType: "quantile",
350
+ radius: 5000,
351
+ pickable: true,
352
+ elevationAggregation: "MEAN",
353
+ colorAggregation: "MEAN",
354
+ });*/
355
+
356
+ const province_boundary = new deck.GeoJsonLayer({
357
+ id: "GeoJsonLayer",
358
+ data: "data/common/province_admin_diva_sim.geojson",
359
+ pickable: false,
360
+ getLineColor: [0, 0, 0],
361
+ getLineWidth: 200,
362
+ getFillColor: [255, 255, 255, 0],
363
+ });
364
+
365
+ // Initialize Deck.GL
366
+ const deckInstance = new deck.DeckGL({
367
+ initialViewState: INIT_VIEW_STATE,
368
+ container: "map",
369
+ mapStyle:
370
+ "https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json",
371
+ controller: { doubleClickZoom: true, inertia: true },
372
+ onViewStateChange: (e) => {
373
+ viewState = e.viewState;
374
+ //console.log(viewState);
375
+ },
376
+ getTooltip,
377
+ layers: [province_boundary, firm_pin],
378
+ });
379
+
380
+ function getTooltip({ object }) {
381
+ return (
382
+ object && {
383
+ html: `<h2 class="text-black">Disaster Index: ${object.colorValue}</h2>`,
384
+ className: "rounded-lg shadow-lg",
385
+ style: {
386
+ backgroundColor: "#fff",
387
+ fontSize: "0.8em",
388
+ },
389
+ }
390
+ );
391
+ }
392
+
393
+ function rotateCameraRight() {
394
+ initialViewState = {
395
+ ...viewState,
396
+ bearing: viewState.bearing - 20,
397
+ transitionDuration: 10000,
398
+ transitionInterpolator: new deck.LinearInterpolator(["bearing"]),
399
+ onTransitionEnd: rotateCameraLeft,
400
+ };
401
+ deckInstance.setProps({ initialViewState });
402
+ }
403
+
404
+ function rotateCameraLeft() {
405
+ initialViewState = {
406
+ ...viewState,
407
+ bearing: viewState.bearing + 20,
408
+ transitionDuration: 10000,
409
+ transitionInterpolator: new deck.LinearInterpolator(["bearing"]),
410
+ onTransitionEnd: rotateCameraRight,
411
+ };
412
+ deckInstance.setProps({ initialViewState });
413
+ }
414
+
415
+ function resetCameraPosition() {
416
+ deckInstance.setProps({
417
+ initialViewState: {
418
+ ...INIT_VIEW_STATE,
419
+ transitionInterpolator: new deck.FlyToInterpolator({ speed: 2 }),
420
+ transitionDuration: "auto",
421
+ },
422
+ });
423
+ }
424
+
425
+ async function updateMap() {
426
+ console.log("update Map");
427
+
428
+ const selectedBoxId = getSelectedBox();
429
+ //console.log('Currently Selected Box ID:', selectedBoxId);
430
+
431
+ if (selectedBoxId == "wind") {
432
+ console.log(" Do something to Wind");
433
+
434
+ deckInstance.setProps({
435
+ layers: [
436
+ province_boundary,
437
+ new deck.HexagonLayer({
438
+ id: "HexagonLayer",
439
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
440
+ //extruded: true,
441
+ getPosition: (d) => [d.lon, d.lat],
442
+ getColorWeight: (d) => d.wind_2023,
443
+ getElevationWeight: (d) => d.wind_2023,
444
+ elevationScale: 10,
445
+ colorRange: [
446
+ [255, 255, 178, 200],
447
+ [254, 217, 118, 200],
448
+ [254, 178, 76, 200],
449
+ [253, 141, 60, 200],
450
+ [240, 59, 32, 200],
451
+ [189, 0, 38, 200],
452
+ ],
453
+ colorScaleType: "quantile",
454
+ radius: 5000,
455
+ pickable: true,
456
+ elevationAggregation: "MEAN",
457
+ colorAggregation: "MEAN",
458
+ }),
459
+ firm_pin,
460
+ ],
461
+ getTooltip,
462
+ });
463
+ } else if (selectedBoxId == "flood") {
464
+ console.log(" Do something to Flood");
465
+
466
+ deckInstance.setProps({
467
+ layers: [
468
+ province_boundary,
469
+ new deck.HexagonLayer({
470
+ id: "HexagonLayer",
471
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
472
+ //extruded: true,
473
+ getPosition: (d) => [d.lon, d.lat],
474
+ getColorWeight: (d) => d.flood_2023,
475
+ getElevationWeight: (d) => d.flood_2023,
476
+ elevationScale: 10,
477
+ colorRange: [
478
+ [242, 240, 247, 200],
479
+ [218, 218, 235, 200],
480
+ [188, 189, 220, 200],
481
+ [158, 154, 200, 200],
482
+ [117, 107, 177, 200],
483
+ [84, 39, 143, 200],
484
+ ,
485
+ ],
486
+ colorScaleType: "quantile",
487
+ radius: 5000,
488
+ pickable: true,
489
+ elevationAggregation: "MEAN",
490
+ colorAggregation: "MEAN",
491
+ }),
492
+ firm_pin,
493
+ ],
494
+ getTooltip,
495
+ });
496
+ } else if (selectedBoxId == "pm") {
497
+ console.log(" Do something to PM");
498
+
499
+ deckInstance.setProps({
500
+ layers: [
501
+ province_boundary,
502
+ new deck.HexagonLayer({
503
+ id: "HexagonLayer",
504
+ data: "data/firm/homeprto_disaster_firm_location_forecast.json",
505
+ //extruded: true,
506
+ getPosition: (d) => [d.lon, d.lat],
507
+ getColorWeight: (d) => d.pm_2023,
508
+ getElevationWeight: (d) => d.pm_2023,
509
+ elevationScale: 10,
510
+ colorRange: [
511
+ [247, 247, 247, 200],
512
+ [217, 217, 217, 200],
513
+ [189, 189, 189, 200],
514
+ [150, 150, 150, 200],
515
+ [99, 99, 99, 200],
516
+ [37, 37, 37, 200],
517
+ ],
518
+ colorScaleType: "quantile",
519
+ radius: 5000,
520
+ pickable: true,
521
+ elevationAggregation: "MEAN",
522
+ colorAggregation: "MEAN",
523
+ }),
524
+ firm_pin,
525
+ ],
526
+ getTooltip,
527
+ });
528
+ }
529
+
530
+ // refresh again after 60 seconds
531
+ setTimeout(updateMap, 60000);
532
+ }
533
+
534
+ const resetButton = document.querySelector("#resetViewButton");
535
+ resetButton.addEventListener("click", () => {
536
+ resetCameraPosition();
537
+ });
538
+ tippy("#resetViewButton", {
539
+ content: "Reset View",
540
+ placement: "left",
541
+ });
542
+
543
+ const animateButton = document.querySelector("#animateButton");
544
+ animateButton.addEventListener("click", () => {
545
+ rotateCameraLeft();
546
+ });
547
+ tippy("#animateButton", {
548
+ content: "Animate View",
549
+ placement: "left",
550
+ });
551
+
552
+ tippy("#goOverView", {
553
+ content: "FIRM Overview",
554
+ placement: "left",
555
+ });
556
+ tippy("#goLocation", {
557
+ content: "Location-Based",
558
+ placement: "left",
559
+ });
560
+ tippy("#goForecast", {
561
+ content: "Forecasting",
562
+ placement: "left",
563
+ });
564
+
565
+ const boxes = document.querySelectorAll(".box");
566
+
567
+ boxes.forEach((box) => {
568
+ box.addEventListener("click", function () {
569
+ // Remove 'selected' class from all boxes
570
+ boxes.forEach((b) =>
571
+ b.classList.remove("selected", "bg-sky-500", "text-white")
572
+ );
573
+
574
+ // Add 'selected' class to the clicked box
575
+ this.classList.add("selected", "bg-sky-500", "text-white");
576
+
577
+ updateMap();
578
+ });
579
+ });
580
+
581
+ function getSelectedBox() {
582
+ const selectedBox = document.querySelector(".box.selected");
583
+ if (selectedBox) {
584
+ return selectedBox.getAttribute("data-id"); // Return the selected box's data-id
585
+ }
586
+ return null;
587
+ }
588
+ </script>
589
+
590
+ <script>
591
+ // First Chart.js Configuration
592
+ </script>
593
+ </body>
594
+ </html>
static/.DS_Store ADDED
Binary file (6.15 kB). View file
 
static/css/font-awesome@all.min.css ADDED
The diff for this file is too large to render. See raw diff
 
static/css/maplibre-gl@3.0.0.css ADDED
@@ -0,0 +1 @@
 
 
1
+ .maplibregl-map{-webkit-tap-highlight-color:rgb(0 0 0/0);font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative}.maplibregl-canvas{left:0;position:absolute;top:0}.maplibregl-map:fullscreen{height:100%;width:100%}.maplibregl-ctrl-group button.maplibregl-ctrl-compass{touch-action:none}.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer}.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none}.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures,.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{pointer-events:none;position:absolute;z-index:2}.maplibregl-ctrl-top-left{left:0;top:0}.maplibregl-ctrl-top-right{right:0;top:0}.maplibregl-ctrl-bottom-left{bottom:0;left:0}.maplibregl-ctrl-bottom-right{bottom:0;right:0}.maplibregl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.maplibregl-ctrl-top-left .maplibregl-ctrl{float:left;margin:10px 0 0 10px}.maplibregl-ctrl-top-right .maplibregl-ctrl{float:right;margin:10px 10px 0 0}.maplibregl-ctrl-bottom-left .maplibregl-ctrl{float:left;margin:0 0 10px 10px}.maplibregl-ctrl-bottom-right .maplibregl-ctrl{float:right;margin:0 10px 10px 0}.maplibregl-ctrl-group{background:#fff;border-radius:4px}.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.maplibregl-ctrl-group button{background-color:transparent;border:0;box-sizing:border-box;cursor:pointer;display:block;height:29px;outline:none;padding:0;width:29px}.maplibregl-ctrl-group button+button{border-top:1px solid #ddd}.maplibregl-ctrl button .maplibregl-ctrl-icon{background-position:50%;background-repeat:no-repeat;display:block;height:100%;width:100%}@media (-ms-high-contrast:active){.maplibregl-ctrl-icon{background-color:transparent}.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}}.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0}.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl button:disabled{cursor:not-allowed}.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25}.maplibregl-ctrl button:not(:disabled):hover{background-color:rgb(0 0 0/5%)}.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit}.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23999' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-terrain .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%23333' viewBox='0 0 22 22'%3E%3Cpath d='m1.754 13.406 4.453-4.851 3.09 3.09 3.281 3.277.969-.969-3.309-3.312 3.844-4.121 6.148 6.886h1.082v-.855l-7.207-8.07-4.84 5.187L6.169 6.57l-5.48 5.965v.871ZM.688 16.844h20.625v1.375H.688Zm0 0'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-terrain-enabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%2333b5e5' viewBox='0 0 22 22'%3E%3Cpath d='m1.754 13.406 4.453-4.851 3.09 3.09 3.281 3.277.969-.969-3.309-3.312 3.844-4.121 6.148 6.886h1.082v-.855l-7.207-8.07-4.84 5.187L6.169 6.57l-5.48 5.965v.871ZM.688 16.844h20.625v1.375H.688Zm0 0'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23333' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23aaa' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{animation:maplibregl-spin 2s linear infinite}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23fff' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23999' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='29' height='29' fill='%23666' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}}@keyframes maplibregl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;cursor:pointer;display:block;height:23px;margin:0 0 -4px -4px;overflow:hidden;width:88px}a.maplibregl-ctrl-logo.maplibregl-compact{width:14px}@media (-ms-high-contrast:active){a.maplibregl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E")}}.maplibregl-ctrl.maplibregl-ctrl-attrib{background-color:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{background-color:#fff;border-radius:12px;box-sizing:content-box;margin:10px;min-height:20px;padding:2px 24px 2px 0;position:relative}.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{border-radius:12px;padding:2px 8px 2px 28px}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.maplibregl-ctrl-attrib-button{background-color:hsla(0,0%,100%,.5);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");border:0;border-radius:12px;box-sizing:border-box;cursor:pointer;display:none;height:24px;outline:none;position:absolute;right:0;top:0;width:24px}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button{appearance:none;list-style:none}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button::-webkit-details-marker{display:none}.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner{display:block}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgb(0 0 0/5%)}.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{right:0;top:0}.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{left:0;top:0}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}}@media screen and (-ms-high-contrast:active){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='%23fff' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}@media screen and (-ms-high-contrast:black-on-white){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.maplibregl-attrib-empty{display:none}.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);border:2px solid #333;border-top:#333;box-sizing:border-box;color:#333;font-size:10px;padding:0 5px}.maplibregl-popup{display:flex;left:0;pointer-events:none;position:absolute;top:0;will-change:transform}.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column}.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse}.maplibregl-popup-anchor-left{flex-direction:row}.maplibregl-popup-anchor-right{flex-direction:row-reverse}.maplibregl-popup-tip{border:10px solid transparent;height:0;width:0;z-index:1}.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-bottom-color:#fff;border-top:none}.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-bottom-color:#fff;border-left:none;border-top:none}.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-bottom-color:#fff;border-right:none;border-top:none}.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-left-color:#fff;border-right:none}.maplibregl-popup-close-button{background-color:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.maplibregl-popup-close-button:hover{background-color:rgb(0 0 0/5%)}.maplibregl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:15px 10px;pointer-events:auto;position:relative}.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0}.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0}.maplibregl-popup-track-pointer{display:none}.maplibregl-popup-track-pointer *{pointer-events:none;user-select:none}.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex}.maplibregl-map:active .maplibregl-popup-track-pointer{display:none}.maplibregl-marker{left:0;position:absolute;top:0;will-change:transform}.maplibregl-user-location-dot,.maplibregl-user-location-dot:before{background-color:#1da1f2;border-radius:50%;height:15px;width:15px}.maplibregl-user-location-dot:before{animation:maplibregl-user-location-dot-pulse 2s infinite;content:"";position:absolute}.maplibregl-user-location-dot:after{border:2px solid #fff;border-radius:50%;box-shadow:0 0 3px rgba(0,0,0,.35);box-sizing:border-box;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px}@keyframes maplibregl-user-location-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(1)}}.maplibregl-user-location-dot-stale{background-color:#aaa}.maplibregl-user-location-dot-stale:after{display:none}.maplibregl-user-location-accuracy-circle{background-color:#1da1f233;border-radius:100%;height:1px;width:1px}.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair}.maplibregl-boxzoom{background:#fff;border:2px dotted #202020;height:0;left:0;opacity:.5;position:absolute;top:0;width:0}.maplibregl-cooperative-gesture-screen{align-items:center;background:rgba(0,0,0,.4);color:#fff;display:flex;font-size:1.4em;inset:0;justify-content:center;line-height:1.2;opacity:0;padding:1rem;pointer-events:none;position:absolute;transition:opacity 1s ease 1s;z-index:99999}.maplibregl-cooperative-gesture-screen.maplibregl-show{opacity:1;transition:opacity .05s}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:none}@media (hover:none),(width <= 480px){.maplibregl-cooperative-gesture-screen .maplibregl-desktop-message{display:none}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:block}}.maplibregl-pseudo-fullscreen{height:100%!important;left:0!important;position:fixed!important;top:0!important;width:100%!important;z-index:99999}
static/icon/extent.png ADDED
static/icon/flood.png ADDED
static/icon/forecast.png ADDED
static/icon/home.png ADDED
static/icon/location.png ADDED
static/icon/logo.png ADDED
static/icon/pin.png ADDED
static/icon/play.png ADDED
static/icon/pm.png ADDED
static/icon/radar.png ADDED
static/icon/wind.png ADDED
static/image/climate.webp ADDED
static/image/economic.webp ADDED
static/image/flood.jpeg ADDED
static/image/hero-city-pin.png ADDED

Git LFS Details

  • SHA256: c4b162d30bdab169a810d3ca1f8562ff4f67b5dee464ed2038265edd51300dfd
  • Pointer size: 133 Bytes
  • Size of remote file: 15.7 MB
static/image/hero-city.jpg ADDED

Git LFS Details

  • SHA256: 3e041cef116d82e21c479fe7056c24281e4f33257bac66980b0b2cb44ea24f66
  • Pointer size: 132 Bytes
  • Size of remote file: 4 MB
static/image/hero.png ADDED
static/image/pin-location.jpeg ADDED
static/image/report.jpeg ADDED
static/js/chart.js ADDED
The diff for this file is too large to render. See raw diff
 
static/js/deckgl@9.0.33.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/js/maplibre-gl@3.0.0.js ADDED
The diff for this file is too large to render. See raw diff
 
static/js/popper.min.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /**
2
+ * @popperjs/core v2.11.8 - MIT License
3
+ */
4
+
5
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function N(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function I(e,r,o){return r===H?N(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):N(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function _(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&C(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=I(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),I(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function F(e){return e.split("-")[0]}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?F(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=_(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=N(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function Z(e){void 0===e&&(e={});var t=e,r=t.defaultModifiers,o=void 0===r?[]:r,i=t.defaultOptions,a=void 0===i?K:i;return function(e,t,r){void 0===r&&(r=a);var i,s,f={placement:"bottom",orderedModifiers:[],options:Object.assign({},K,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],p=!1,u={state:f,setOptions:function(r){var i="function"==typeof r?r(f.options):r;l(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?w(e):e.contextElement?w(e.contextElement):[],popper:w(t)};var s,p,d=function(e){var t=q(e);return V.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(o,f.options.modifiers),p=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(p).map((function(e){return p[e]}))));return f.orderedModifiers=d.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,o=e.effect;if("function"==typeof o){var i=o({state:f,name:t,instance:u,options:r}),a=function(){};c.push(i||a)}})),u.update()},forceUpdate:function(){if(!p){var e=f.elements,t=e.reference,n=e.popper;if(Q(t,n)){f.rects={reference:y(t,E(n),"fixed"===f.options.strategy),popper:g(n)},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<f.orderedModifiers.length;r++)if(!0!==f.reset){var o=f.orderedModifiers[r],i=o.fn,a=o.options,s=void 0===a?{}:a,c=o.name;"function"==typeof i&&(f=i({state:f,options:s,name:c,instance:u})||f)}else f.reset=!1,r=-1}}},update:(i=function(){return new Promise((function(e){u.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){l(),p=!0}};if(!Q(e,t))return u;function l(){c.forEach((function(e){return e()})),c=[]}return u.setOptions(r).then((function(e){!p&&r.onFirstUpdate&&r.onFirstUpdate(e)})),u}}var $={passive:!0};var ee={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,r=e.instance,o=e.options,i=o.scroll,a=void 0===i||i,s=o.resize,f=void 0===s||s,c=t(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&p.forEach((function(e){e.addEventListener("scroll",r.update,$)})),f&&c.addEventListener("resize",r.update,$),function(){a&&p.forEach((function(e){e.removeEventListener("scroll",r.update,$)})),f&&c.removeEventListener("resize",r.update,$)}},data:{}};var te={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=X({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ne={top:"auto",right:"auto",bottom:"auto",left:"auto"};function re(e){var n,r=e.popper,o=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,p=e.gpuAcceleration,u=e.adaptive,l=e.roundOffsets,h=e.isFixed,v=f.x,y=void 0===v?0:v,g=f.y,b=void 0===g?0:g,x="function"==typeof l?l({x:y,y:b}):{x:y,y:b};y=x.x,b=x.y;var w=f.hasOwnProperty("x"),O=f.hasOwnProperty("y"),j=P,M=D,k=window;if(u){var W=E(r),H="clientHeight",T="clientWidth";if(W===t(r)&&"static"!==m(W=d(r)).position&&"absolute"===c&&(H="scrollHeight",T="scrollWidth"),W=W,i===D||(i===P||i===L)&&a===B)M=A,b-=(h&&W===k&&k.visualViewport?k.visualViewport.height:W[H])-o.height,b*=p?1:-1;if(i===P||(i===D||i===A)&&a===B)j=L,y-=(h&&W===k&&k.visualViewport?k.visualViewport.width:W[T])-o.width,y*=p?1:-1}var R,S=Object.assign({position:c},u&&ne),V=!0===l?function(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:s(n*o)/o||0,y:s(r*o)/o||0}}({x:y,y:b},t(r)):{x:y,y:b};return y=V.x,b=V.y,p?Object.assign({},S,((R={})[M]=O?"0":"",R[j]=w?"0":"",R.transform=(k.devicePixelRatio||1)<=1?"translate("+y+"px, "+b+"px)":"translate3d("+y+"px, "+b+"px, 0)",R)):Object.assign({},S,((n={})[M]=O?b+"px":"",n[j]=w?y+"px":"",n.transform="",n))}var oe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:F(t.placement),variation:U(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,re(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,re(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var ie={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];r(i)&&l(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});r(o)&&l(o)&&(Object.assign(o.style,a),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};var ae={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=void 0===o?[0,0]:o,a=S.reduce((function(e,n){return e[n]=function(e,t,n){var r=F(e),o=[P,D].indexOf(r)>=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[F(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=F(v),g=f||(y===v||!h?[fe(v)]:function(e){if(F(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(F(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k<b.length;k++){var B=b[k],H=F(B),T=U(B)===W,R=[D,A].indexOf(H)>=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var C=fe(q),N=[];if(i&&N.push(V[H]<=0),s&&N.push(V[q]<=0,V[C]<=0),N.every((function(e){return e}))){E=B,j=!1;break}O.set(B,N)}if(j)for(var I=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},_=h?3:1;_>0;_--){if("break"===I(_))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=F(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,C="y"===j?D:P,N="y"===j?A:L,I="y"===j?"height":"width",_=k[j],X=_+b[C],Y=_-b[N],G=m?-H[I]/2:0,K=w===W?B[I]:H[I],Q=w===W?-H[I]:-B[I],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[C],ne=ee[N],re=de(0,B[I],$[I]),oe=O?B[I]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[I]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=_+ie-fe,pe=de(m?a(X,_+oe-fe-se):X,_,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-_}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=F(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&C(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})}));
6
+ //# sourceMappingURL=popper.min.js.map
static/js/tailwind@3.4.5.js ADDED
The diff for this file is too large to render. See raw diff
 
static/js/tippy-bundle.umd.min.js ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t=t||self).tippy=e(t.Popper)}(this,(function(t){"use strict";var e="undefined"!=typeof window&&"undefined"!=typeof document,n=!!e&&!!window.msCrypto,r={passive:!0,capture:!0},o=function(){return document.body};function i(t,e,n){if(Array.isArray(t)){var r=t[e];return null==r?Array.isArray(n)?n[e]:n:r}return t}function a(t,e){var n={}.toString.call(t);return 0===n.indexOf("[object")&&n.indexOf(e+"]")>-1}function s(t,e){return"function"==typeof t?t.apply(void 0,e):t}function u(t,e){return 0===e?t:function(r){clearTimeout(n),n=setTimeout((function(){t(r)}),e)};var n}function p(t,e){var n=Object.assign({},t);return e.forEach((function(t){delete n[t]})),n}function c(t){return[].concat(t)}function f(t,e){-1===t.indexOf(e)&&t.push(e)}function l(t){return t.split("-")[0]}function d(t){return[].slice.call(t)}function v(t){return Object.keys(t).reduce((function(e,n){return void 0!==t[n]&&(e[n]=t[n]),e}),{})}function m(){return document.createElement("div")}function g(t){return["Element","Fragment"].some((function(e){return a(t,e)}))}function h(t){return a(t,"MouseEvent")}function b(t){return!(!t||!t._tippy||t._tippy.reference!==t)}function y(t){return g(t)?[t]:function(t){return a(t,"NodeList")}(t)?d(t):Array.isArray(t)?t:d(document.querySelectorAll(t))}function w(t,e){t.forEach((function(t){t&&(t.style.transitionDuration=e+"ms")}))}function x(t,e){t.forEach((function(t){t&&t.setAttribute("data-state",e)}))}function E(t){var e,n=c(t)[0];return null!=n&&null!=(e=n.ownerDocument)&&e.body?n.ownerDocument:document}function O(t,e,n){var r=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(e){t[r](e,n)}))}function C(t,e){for(var n=e;n;){var r;if(t.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var T={isTouch:!1},A=0;function L(){T.isTouch||(T.isTouch=!0,window.performance&&document.addEventListener("mousemove",D))}function D(){var t=performance.now();t-A<20&&(T.isTouch=!1,document.removeEventListener("mousemove",D)),A=t}function k(){var t=document.activeElement;if(b(t)){var e=t._tippy;t.blur&&!e.state.isVisible&&t.blur()}}var R=Object.assign({appendTo:o,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),P=Object.keys(R);function j(t){var e=(t.plugins||[]).reduce((function(e,n){var r,o=n.name,i=n.defaultValue;o&&(e[o]=void 0!==t[o]?t[o]:null!=(r=R[o])?r:i);return e}),{});return Object.assign({},t,e)}function M(t,e){var n=Object.assign({},e,{content:s(e.content,[t])},e.ignoreAttributes?{}:function(t,e){return(e?Object.keys(j(Object.assign({},R,{plugins:e}))):P).reduce((function(e,n){var r=(t.getAttribute("data-tippy-"+n)||"").trim();if(!r)return e;if("content"===n)e[n]=r;else try{e[n]=JSON.parse(r)}catch(t){e[n]=r}return e}),{})}(t,e.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?e.interactive:n.aria.expanded,content:"auto"===n.aria.content?e.interactive?null:"describedby":n.aria.content},n}function V(t,e){t.innerHTML=e}function I(t){var e=m();return!0===t?e.className="tippy-arrow":(e.className="tippy-svg-arrow",g(t)?e.appendChild(t):V(e,t)),e}function S(t,e){g(e.content)?(V(t,""),t.appendChild(e.content)):"function"!=typeof e.content&&(e.allowHTML?V(t,e.content):t.textContent=e.content)}function B(t){var e=t.firstElementChild,n=d(e.children);return{box:e,content:n.find((function(t){return t.classList.contains("tippy-content")})),arrow:n.find((function(t){return t.classList.contains("tippy-arrow")||t.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(t){return t.classList.contains("tippy-backdrop")}))}}function N(t){var e=m(),n=m();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=m();function o(n,r){var o=B(e),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||S(a,t.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(I(r.arrow))):i.appendChild(I(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),S(r,t.props),e.appendChild(n),n.appendChild(r),o(t.props,t.props),{popper:e,onUpdate:o}}N.$$tippy=!0;var H=1,U=[],_=[];function z(e,a){var p,g,b,y,A,L,D,k,P=M(e,Object.assign({},R,j(v(a)))),V=!1,I=!1,S=!1,N=!1,z=[],F=u(wt,P.interactiveDebounce),W=H++,X=(k=P.plugins).filter((function(t,e){return k.indexOf(t)===e})),Y={id:W,reference:e,popper:m(),popperInstance:null,props:P,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:X,clearDelayTimeouts:function(){clearTimeout(p),clearTimeout(g),cancelAnimationFrame(b)},setProps:function(t){if(Y.state.isDestroyed)return;at("onBeforeUpdate",[Y,t]),bt();var n=Y.props,r=M(e,Object.assign({},n,v(t),{ignoreAttributes:!0}));Y.props=r,ht(),n.interactiveDebounce!==r.interactiveDebounce&&(pt(),F=u(wt,r.interactiveDebounce));n.triggerTarget&&!r.triggerTarget?c(n.triggerTarget).forEach((function(t){t.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");ut(),it(),J&&J(n,r);Y.popperInstance&&(Ct(),At().forEach((function(t){requestAnimationFrame(t._tippy.popperInstance.forceUpdate)})));at("onAfterUpdate",[Y,t])},setContent:function(t){Y.setProps({content:t})},show:function(){var t=Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=T.isTouch&&!Y.props.touch,a=i(Y.props.duration,0,R.duration);if(t||e||n||r)return;if(et().hasAttribute("disabled"))return;if(at("onShow",[Y],!1),!1===Y.props.onShow(Y))return;Y.state.isVisible=!0,tt()&&($.style.visibility="visible");it(),dt(),Y.state.isMounted||($.style.transition="none");if(tt()){var u=rt(),p=u.box,c=u.content;w([p,c],0)}L=function(){var t;if(Y.state.isVisible&&!N){if(N=!0,$.offsetHeight,$.style.transition=Y.props.moveTransition,tt()&&Y.props.animation){var e=rt(),n=e.box,r=e.content;w([n,r],a),x([n,r],"visible")}st(),ut(),f(_,Y),null==(t=Y.popperInstance)||t.forceUpdate(),at("onMount",[Y]),Y.props.animation&&tt()&&function(t,e){mt(t,e)}(a,(function(){Y.state.isShown=!0,at("onShown",[Y])}))}},function(){var t,e=Y.props.appendTo,n=et();t=Y.props.interactive&&e===o||"parent"===e?n.parentNode:s(e,[n]);t.contains($)||t.appendChild($);Y.state.isMounted=!0,Ct()}()},hide:function(){var t=!Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=i(Y.props.duration,1,R.duration);if(t||e||n)return;if(at("onHide",[Y],!1),!1===Y.props.onHide(Y))return;Y.state.isVisible=!1,Y.state.isShown=!1,N=!1,V=!1,tt()&&($.style.visibility="hidden");if(pt(),vt(),it(!0),tt()){var o=rt(),a=o.box,s=o.content;Y.props.animation&&(w([a,s],r),x([a,s],"hidden"))}st(),ut(),Y.props.animation?tt()&&function(t,e){mt(t,(function(){!Y.state.isVisible&&$.parentNode&&$.parentNode.contains($)&&e()}))}(r,Y.unmount):Y.unmount()},hideWithInteractivity:function(t){nt().addEventListener("mousemove",F),f(U,F),F(t)},enable:function(){Y.state.isEnabled=!0},disable:function(){Y.hide(),Y.state.isEnabled=!1},unmount:function(){Y.state.isVisible&&Y.hide();if(!Y.state.isMounted)return;Tt(),At().forEach((function(t){t._tippy.unmount()})),$.parentNode&&$.parentNode.removeChild($);_=_.filter((function(t){return t!==Y})),Y.state.isMounted=!1,at("onHidden",[Y])},destroy:function(){if(Y.state.isDestroyed)return;Y.clearDelayTimeouts(),Y.unmount(),bt(),delete e._tippy,Y.state.isDestroyed=!0,at("onDestroy",[Y])}};if(!P.render)return Y;var q=P.render(Y),$=q.popper,J=q.onUpdate;$.setAttribute("data-tippy-root",""),$.id="tippy-"+Y.id,Y.popper=$,e._tippy=Y,$._tippy=Y;var G=X.map((function(t){return t.fn(Y)})),K=e.hasAttribute("aria-expanded");return ht(),ut(),it(),at("onCreate",[Y]),P.showOnCreate&&Lt(),$.addEventListener("mouseenter",(function(){Y.props.interactive&&Y.state.isVisible&&Y.clearDelayTimeouts()})),$.addEventListener("mouseleave",(function(){Y.props.interactive&&Y.props.trigger.indexOf("mouseenter")>=0&&nt().addEventListener("mousemove",F)})),Y;function Q(){var t=Y.props.touch;return Array.isArray(t)?t:[t,0]}function Z(){return"hold"===Q()[0]}function tt(){var t;return!(null==(t=Y.props.render)||!t.$$tippy)}function et(){return D||e}function nt(){var t=et().parentNode;return t?E(t):document}function rt(){return B($)}function ot(t){return Y.state.isMounted&&!Y.state.isVisible||T.isTouch||y&&"focus"===y.type?0:i(Y.props.delay,t?0:1,R.delay)}function it(t){void 0===t&&(t=!1),$.style.pointerEvents=Y.props.interactive&&!t?"":"none",$.style.zIndex=""+Y.props.zIndex}function at(t,e,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[t]&&n[t].apply(n,e)})),n)&&(r=Y.props)[t].apply(r,e)}function st(){var t=Y.props.aria;if(t.content){var n="aria-"+t.content,r=$.id;c(Y.props.triggerTarget||e).forEach((function(t){var e=t.getAttribute(n);if(Y.state.isVisible)t.setAttribute(n,e?e+" "+r:r);else{var o=e&&e.replace(r,"").trim();o?t.setAttribute(n,o):t.removeAttribute(n)}}))}}function ut(){!K&&Y.props.aria.expanded&&c(Y.props.triggerTarget||e).forEach((function(t){Y.props.interactive?t.setAttribute("aria-expanded",Y.state.isVisible&&t===et()?"true":"false"):t.removeAttribute("aria-expanded")}))}function pt(){nt().removeEventListener("mousemove",F),U=U.filter((function(t){return t!==F}))}function ct(t){if(!T.isTouch||!S&&"mousedown"!==t.type){var n=t.composedPath&&t.composedPath()[0]||t.target;if(!Y.props.interactive||!C($,n)){if(c(Y.props.triggerTarget||e).some((function(t){return C(t,n)}))){if(T.isTouch)return;if(Y.state.isVisible&&Y.props.trigger.indexOf("click")>=0)return}else at("onClickOutside",[Y,t]);!0===Y.props.hideOnClick&&(Y.clearDelayTimeouts(),Y.hide(),I=!0,setTimeout((function(){I=!1})),Y.state.isMounted||vt())}}}function ft(){S=!0}function lt(){S=!1}function dt(){var t=nt();t.addEventListener("mousedown",ct,!0),t.addEventListener("touchend",ct,r),t.addEventListener("touchstart",lt,r),t.addEventListener("touchmove",ft,r)}function vt(){var t=nt();t.removeEventListener("mousedown",ct,!0),t.removeEventListener("touchend",ct,r),t.removeEventListener("touchstart",lt,r),t.removeEventListener("touchmove",ft,r)}function mt(t,e){var n=rt().box;function r(t){t.target===n&&(O(n,"remove",r),e())}if(0===t)return e();O(n,"remove",A),O(n,"add",r),A=r}function gt(t,n,r){void 0===r&&(r=!1),c(Y.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),z.push({node:e,eventType:t,handler:n,options:r})}))}function ht(){var t;Z()&&(gt("touchstart",yt,{passive:!0}),gt("touchend",xt,{passive:!0})),(t=Y.props.trigger,t.split(/\s+/).filter(Boolean)).forEach((function(t){if("manual"!==t)switch(gt(t,yt),t){case"mouseenter":gt("mouseleave",xt);break;case"focus":gt(n?"focusout":"blur",Et);break;case"focusin":gt("focusout",Et)}}))}function bt(){z.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),z=[]}function yt(t){var e,n=!1;if(Y.state.isEnabled&&!Ot(t)&&!I){var r="focus"===(null==(e=y)?void 0:e.type);y=t,D=t.currentTarget,ut(),!Y.state.isVisible&&h(t)&&U.forEach((function(e){return e(t)})),"click"===t.type&&(Y.props.trigger.indexOf("mouseenter")<0||V)&&!1!==Y.props.hideOnClick&&Y.state.isVisible?n=!0:Lt(t),"click"===t.type&&(V=!n),n&&!r&&Dt(t)}}function wt(t){var e=t.target,n=et().contains(e)||$.contains(e);"mousemove"===t.type&&n||function(t,e){var n=e.clientX,r=e.clientY;return t.every((function(t){var e=t.popperRect,o=t.popperState,i=t.props.interactiveBorder,a=l(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,p="top"===a?s.bottom.y:0,c="right"===a?s.left.x:0,f="left"===a?s.right.x:0,d=e.top-r+u>i,v=r-e.bottom-p>i,m=e.left-n+c>i,g=n-e.right-f>i;return d||v||m||g}))}(At().concat($).map((function(t){var e,n=null==(e=t._tippy.popperInstance)?void 0:e.state;return n?{popperRect:t.getBoundingClientRect(),popperState:n,props:P}:null})).filter(Boolean),t)&&(pt(),Dt(t))}function xt(t){Ot(t)||Y.props.trigger.indexOf("click")>=0&&V||(Y.props.interactive?Y.hideWithInteractivity(t):Dt(t))}function Et(t){Y.props.trigger.indexOf("focusin")<0&&t.target!==et()||Y.props.interactive&&t.relatedTarget&&$.contains(t.relatedTarget)||Dt(t)}function Ot(t){return!!T.isTouch&&Z()!==t.type.indexOf("touch")>=0}function Ct(){Tt();var n=Y.props,r=n.popperOptions,o=n.placement,i=n.offset,a=n.getReferenceClientRect,s=n.moveTransition,u=tt()?B($).arrow:null,p=a?{getBoundingClientRect:a,contextElement:a.contextElement||et()}:e,c=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(t){var e=t.state;if(tt()){var n=rt().box;["placement","reference-hidden","escaped"].forEach((function(t){"placement"===t?n.setAttribute("data-placement",e.placement):e.attributes.popper["data-popper-"+t]?n.setAttribute("data-"+t,""):n.removeAttribute("data-"+t)})),e.attributes.popper={}}}}];tt()&&u&&c.push({name:"arrow",options:{element:u,padding:3}}),c.push.apply(c,(null==r?void 0:r.modifiers)||[]),Y.popperInstance=t.createPopper(p,$,Object.assign({},r,{placement:o,onFirstUpdate:L,modifiers:c}))}function Tt(){Y.popperInstance&&(Y.popperInstance.destroy(),Y.popperInstance=null)}function At(){return d($.querySelectorAll("[data-tippy-root]"))}function Lt(t){Y.clearDelayTimeouts(),t&&at("onTrigger",[Y,t]),dt();var e=ot(!0),n=Q(),r=n[0],o=n[1];T.isTouch&&"hold"===r&&o&&(e=o),e?p=setTimeout((function(){Y.show()}),e):Y.show()}function Dt(t){if(Y.clearDelayTimeouts(),at("onUntrigger",[Y,t]),Y.state.isVisible){if(!(Y.props.trigger.indexOf("mouseenter")>=0&&Y.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(t.type)>=0&&V)){var e=ot(!1);e?g=setTimeout((function(){Y.state.isVisible&&Y.hide()}),e):b=requestAnimationFrame((function(){Y.hide()}))}}else vt()}}function F(t,e){void 0===e&&(e={});var n=R.plugins.concat(e.plugins||[]);document.addEventListener("touchstart",L,r),window.addEventListener("blur",k);var o=Object.assign({},e,{plugins:n}),i=y(t).reduce((function(t,e){var n=e&&z(e,o);return n&&t.push(n),t}),[]);return g(t)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(t){Object.keys(t).forEach((function(e){R[e]=t[e]}))},F.currentInput=T;var W=Object.assign({},t.applyStyles,{effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(t){var e;if(null==(e=t.props.render)||!e.$$tippy)return{};var n=B(t.popper),r=n.box,o=n.content,i=t.props.animateFill?function(){var t=m();return t.className="tippy-backdrop",x([t],"hidden"),t}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",t.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var t=r.style.transitionDuration,e=Number(t.replace("ms",""));o.style.transitionDelay=Math.round(e/10)+"ms",i.style.transitionDuration=t,x([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&x([i],"hidden")}}}};var q={clientX:0,clientY:0},$=[];function J(t){var e=t.clientX,n=t.clientY;q={clientX:e,clientY:n}}var G={name:"followCursor",defaultValue:!1,fn:function(t){var e=t.reference,n=E(t.props.triggerTarget||e),r=!1,o=!1,i=!0,a=t.props;function s(){return"initial"===t.props.followCursor&&t.state.isVisible}function u(){n.addEventListener("mousemove",f)}function p(){n.removeEventListener("mousemove",f)}function c(){r=!0,t.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||e.contains(n.target),o=t.props.followCursor,i=n.clientX,a=n.clientY,s=e.getBoundingClientRect(),u=i-s.left,p=a-s.top;!r&&t.props.interactive||t.setProps({getReferenceClientRect:function(){var t=e.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=t.left+u,r=t.top+p);var s="horizontal"===o?t.top:r,c="vertical"===o?t.right:n,f="horizontal"===o?t.bottom:r,l="vertical"===o?t.left:n;return{width:c-l,height:f-s,top:s,right:c,bottom:f,left:l}}})}function l(){t.props.followCursor&&($.push({instance:t,doc:n}),function(t){t.addEventListener("mousemove",J)}(n))}function d(){0===($=$.filter((function(e){return e.instance!==t}))).filter((function(t){return t.doc===n})).length&&function(t){t.removeEventListener("mousemove",J)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=t.props},onAfterUpdate:function(e,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!t.state.isMounted||o||s()||u()):(p(),c()))},onMount:function(){t.props.followCursor&&!o&&(i&&(f(q),i=!1),s()||u())},onTrigger:function(t,e){h(e)&&(q={clientX:e.clientX,clientY:e.clientY}),o="focus"===e.type},onHidden:function(){t.props.followCursor&&(c(),p(),i=!0)}}}};var K={name:"inlinePositioning",defaultValue:!1,fn:function(t){var e,n=t.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;t.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),e!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),t.setProps({getReferenceClientRect:function(){return function(t){return function(t,e,n,r){if(n.length<2||null===t)return e;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||e;switch(t){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===t,s=o.top,u=i.bottom,p=a?o.left:i.left,c=a?o.right:i.right;return{top:s,bottom:u,left:p,right:c,width:c-p,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(t){return t.left}))),l=Math.max.apply(Math,n.map((function(t){return t.right}))),d=n.filter((function(e){return"left"===t?e.left===f:e.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return e}}(l(t),n.getBoundingClientRect(),d(n.getClientRects()),r)}(a.placement)}})),e=a.placement)}};function s(){var e;o||(e=function(t,e){var n;return{popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat(((null==(n=t.popperOptions)?void 0:n.modifiers)||[]).filter((function(t){return t.name!==e.name})),[e])})}}(t.props,a),o=!0,t.setProps(e),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(e,n){if(h(n)){var o=d(t.reference.getClientRects()),i=o.find((function(t){return t.left-2<=n.clientX&&t.right+2>=n.clientX&&t.top-2<=n.clientY&&t.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var Q={name:"sticky",defaultValue:!1,fn:function(t){var e=t.reference,n=t.popper;function r(e){return!0===t.props.sticky||t.props.sticky===e}var o=null,i=null;function a(){var s=r("reference")?(t.popperInstance?t.popperInstance.state.elements.reference:e).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Z(o,s)||u&&Z(i,u))&&t.popperInstance&&t.popperInstance.update(),o=s,i=u,t.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){t.props.sticky&&a()}}}};function Z(t,e){return!t||!e||(t.top!==e.top||t.right!==e.right||t.bottom!==e.bottom||t.left!==e.left)}return e&&function(t){var e=document.createElement("style");e.textContent=t,e.setAttribute("data-tippy-stylesheet","");var n=document.head,r=document.querySelector("head>style,head>link");r?n.insertBefore(e,r):n.appendChild(e)}('.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}'),F.setDefaultProps({plugins:[Y,G,K,Q],render:N}),F.createSingleton=function(t,e){var n;void 0===e&&(e={});var r,o=t,i=[],a=[],s=e.overrides,u=[],f=!1;function l(){a=o.map((function(t){return c(t.props.triggerTarget||t.reference)})).reduce((function(t,e){return t.concat(e)}),[])}function d(){i=o.map((function(t){return t.reference}))}function v(t){o.forEach((function(e){t?e.enable():e.disable()}))}function g(t){return o.map((function(e){var n=e.setProps;return e.setProps=function(o){n(o),e.reference===r&&t.setProps(o)},function(){e.setProps=n}}))}function h(t,e){var n=a.indexOf(e);if(e!==r){r=e;var u=(s||[]).concat("content").reduce((function(t,e){return t[e]=o[n].props[e],t}),{});t.setProps(Object.assign({},u,{getReferenceClientRect:"function"==typeof u.getReferenceClientRect?u.getReferenceClientRect:function(){var t;return null==(t=i[n])?void 0:t.getBoundingClientRect()}}))}}v(!1),d(),l();var b={fn:function(){return{onDestroy:function(){v(!0)},onHidden:function(){r=null},onClickOutside:function(t){t.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(t){t.props.showOnCreate&&!f&&(f=!0,h(t,i[0]))},onTrigger:function(t,e){h(t,e.currentTarget)}}}},y=F(m(),Object.assign({},p(e,["overrides"]),{plugins:[b].concat(e.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat((null==(n=e.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(t){if(w(),!r&&null==t)return h(y,i[0]);if(!r||null!=t){if("number"==typeof t)return i[t]&&h(y,i[t]);if(o.indexOf(t)>=0){var e=t.reference;return h(y,e)}return i.indexOf(t)>=0?h(y,t):void 0}},y.showNext=function(){var t=i[0];if(!r)return y.show(0);var e=i.indexOf(r);y.show(i[e+1]||t)},y.showPrevious=function(){var t=i[i.length-1];if(!r)return y.show(t);var e=i.indexOf(r),n=i[e-1]||t;y.show(n)};var x=y.setProps;return y.setProps=function(t){s=t.overrides||s,x(t)},y.setInstances=function(t){v(!0),u.forEach((function(t){return t()})),o=t,v(!1),d(),l(),u=g(y),y.setProps({triggerTarget:a})},u=g(y),y},F.delegate=function(t,e){var n=[],o=[],i=!1,a=e.target,s=p(e,["target"]),u=Object.assign({},s,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},s,{showOnCreate:!0}),l=F(t,u);function d(t){if(t.target&&!i){var n=t.target.closest(a);if(n){var r=n.getAttribute("data-tippy-trigger")||e.trigger||R.trigger;if(!n._tippy&&!("touchstart"===t.type&&"boolean"==typeof f.touch||"touchstart"!==t.type&&r.indexOf(X[t.type])<0)){var s=F(n,f);s&&(o=o.concat(s))}}}}function v(t,e,r,o){void 0===o&&(o=!1),t.addEventListener(e,r,o),n.push({node:t,eventType:e,handler:r,options:o})}return c(l).forEach((function(t){var e=t.destroy,a=t.enable,s=t.disable;t.destroy=function(t){void 0===t&&(t=!0),t&&o.forEach((function(t){t.destroy()})),o=[],n.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),n=[],e()},t.enable=function(){a(),o.forEach((function(t){return t.enable()})),i=!1},t.disable=function(){s(),o.forEach((function(t){return t.disable()})),i=!0},function(t){var e=t.reference;v(e,"touchstart",d,r),v(e,"mouseover",d),v(e,"focusin",d),v(e,"click",d)}(t)})),l},F.hideAll=function(t){var e=void 0===t?{}:t,n=e.exclude,r=e.duration;_.forEach((function(t){var e=!1;if(n&&(e=b(n)?t.reference===n:t.popper===n.popper),!e){var o=t.props.duration;t.setProps({duration:r}),t.hide(),t.state.isDestroyed||t.setProps({duration:o})}}))},F.roundArrow='<svg width="16" height="6" xmlns="http://www.w3.org/2000/svg"><path d="M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z"></svg>',F}));
2
+ //# sourceMappingURL=tippy-bundle.umd.min.js.map