PageSourceSearch

https://hiddensheds.webflow.io/news/hydrosheds-v2-for-the-americas

html hiddensheds.webflow.io collected 2026-10-03 13:10:52 UTC 31,614 bytes, 480 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Sun Aug 30 2026 16:36:33 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="hiddensheds.webflow.io" data-wf-page="60ec93100c87a83041e8d482" data-wf-site="602eb43d42a3b5553a4f134c" lang="en" data-wf-collection="60ec93100c87a813dee8d45e" data-wf-item-slug="hydrosheds-v2-for-the-americas"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>HydroSHEDS v2 for the Americas</title><meta content="HydroSHEDS v2 data now available for the Americas" name="description"/><meta content="HydroSHEDS v2 for the Americas" property="og:title"/><meta content="HydroSHEDS v2 data now available for the Americas" property="og:description"/><meta content="" property="og:image"/><meta content="HydroSHEDS v2 for the Americas" name="twitter:title"/><meta content="HydroSHEDS v2 data now available for the Americas" name="twitter:description"/><meta content="" name="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/css/hiddensheds.webflow.shared.78d773930.min.css" rel="stylesheet" type="text/css" integrity="sha384-eNdzkwSVCtNVwInoiRjV07vBoMEvnWndAQn/QvoWk5xEKfb7B+S/gX8sHlWg40nL" crossorigin="anonymous"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/>
1<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
1<script type="text/javascript">WebFont.load({  google: {    families: ["Montserrat:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic","Open Sans:300,300italic,400,400italic,600,600italic,700,700italic,800,800italic","Oswald:200,300,400,500,600,700"]  }});</script>
1<script src="https://use.typekit.net/zla7mhr.js" type="text/javascript"></script>
1<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/6244bf4e6fe355c3bde76dbe_Favicon-32.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/6244be3431f13d6742fc25a5_Favicon-256.png" rel="apple-touch-icon"/><!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 108 bytes, lines 1-3
1
2<script type="fs-cc" fs-cc-categories="analytics" async
3  src="https://www.googletagmanager.com/gtag/js?id=
3G-VELPMV5CZE
vendor: 14 bytes, lines 3-5
3">
4</script>
5
6<script type="fs-cc" fs-cc-categories="analytics">
7  
vendor: 134 bytes, lines 7-11
7window.dataLayer = window.dataLayer || [];
8  function gtag(){dataLayer.push(arguments);}
9  gtag('js', new Date());
10
11  gtag('config', '
11G-VELPMV5CZE
vendor: 4 bytes, line 11
11');
12</script>
12
13<!-- Finsweet Cookie Consent -->
14<script async src="https://cdn.jsdelivr.net/npm/@finsweet/cookie-consent@1/fs-cc.js" fs-cc-mode="opt-in"></script>
14
15
16<style> body { overflow-y: auto !important; max-width: 100%;} </style><style>
17body {
18  background: #eee;
19}
20.credits {
21  margin: 20px auto;
22  text-align: center;
23}
24#beforeafter {
25/*  width: 80VW;
26  max-width: 100%;
27  height: 60VW;
28  max-height: 60VH; */
29  margin: 0 auto;
30}
31/* Plugin CSS */
32.twentytwenty-horizontal .twentytwenty-handle:before,
33.twentytwenty-horizontal .twentytwenty-handle:after,
34.twentytwenty-vertical .twentytwenty-handle:before,
35.twentytwenty-vertical .twentytwenty-handle:after {
36  content: " ";
37  display: block;
38  background: white;
39  position: absolute;
40  z-index: 30;
41  -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
42  -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
43  box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
44}
45.twentytwenty-horizontal .twentytwenty-handle:before,
46.twentytwenty-horizontal .twentytwenty-handle:after {
47  width: 3px;
48  height: 9999px;
49  left: 50%;
50  margin-left: -1.5px;
51}
52.twentytwenty-vertical .twentytwenty-handle:before,
53.twentytwenty-vertical .twentytwenty-handle:after {
54  width: 9999px;
55  height: 3px;
56  top: 50%;
57  margin-top: -1.5px;
58}
59.twentytwenty-before-label,
60.twentytwenty-after-label,
61.twentytwenty-overlay {
62  position: absolute;
63  top: 0;
64  width: 100%;
65  height: 100%;
66}
67.twentytwenty-before-label,
68.twentytwenty-after-label,
69.twentytwenty-overlay {
70  -webkit-transition-duration: 0.5s;
71  -moz-transition-duration: 0.5s;
72  transition-duration: 0.5s;
73}
74.twentytwenty-before-label,
75.twentytwenty-after-label {
76  -webkit-transition-property: opacity;
77  -moz-transition-property: opacity;
78  transition-property: opacity;
79}
80.twentytwenty-before-label:before,
81.twentytwenty-after-label:before {
82  color: white;
83  font-size: 13px;
84  letter-spacing: 0.1em;
85}
86.twentytwenty-before-label:before,
87.twentytwenty-after-label:before {
88  position: absolute;
89  background: rgba(255, 255, 255, 0.2);
90  line-height: 38px;
91  padding: 0 20px;
92  -webkit-border-radius: 2px;
93  -moz-border-radius: 2px;
94  border-radius: 2px;
95}
96.twentytwenty-horizontal .twentytwenty-before-label:before,
97.twentytwenty-horizontal .twentytwenty-after-label:before {
98  top: 50%;
99  margin-top: -19px;
100}
101.twentytwenty-vertical .twentytwenty-before-label:before,
102.twentytwenty-vertical .twentytwenty-after-label:before {
103  left: 50%;
104  margin-left: -45px;
105  text-align: center;
106  width: 90px;
107}
108.twentytwenty-left-arrow,
109.twentytwenty-right-arrow,
110.twentytwenty-up-arrow,
111.twentytwenty-down-arrow {
112  width: 0;
113  height: 0;
114  border: 6px inset transparent;
115  position: absolute;
116}
117.twentytwenty-left-arrow,
118.twentytwenty-right-arrow {
119  top: 50%;
120  margin-top: -6px;
121}
122.twentytwenty-up-arrow,
123.twentytwenty-down-arrow {
124  left: 50%;
125  margin-left: -6px;
126}
127.twentytwenty-container {
128  -webkit-box-sizing: content-box;
129  -moz-box-sizing: content-box;
130  box-sizing: content-box;
131  z-index: 0;
132  overflow: hidden;
133  position: relative;
134  -webkit-user-select: none;
135  -moz-user-select: none;
136}
137.twentytwenty-container img {
138  max-width: 100%;
139  position: absolute;
140  top: 0;
141  display: block;
142}
143.twentytwenty-container.active .twentytwenty-overlay,
144.twentytwenty-container.active:hover.twentytwenty-overlay {
145  background: rgba(0, 0, 0, 0);
146}
147.twentytwenty-container.active .twentytwenty-overlay .twentytwenty-before-label,
148.twentytwenty-container.active .twentytwenty-overlay .twentytwenty-after-label,
149.twentytwenty-container.active:hover.twentytwenty-overlay .twentytwenty-before-label,
150.twentytwenty-container.active:hover.twentytwenty-overlay .twentytwenty-after-label {
151  opacity: 0;
152}
153.twentytwenty-container * {
154  -webkit-box-sizing: content-box;
155  -moz-box-sizing: content-box;
156  box-sizing: content-box;
157}
158.twentytwenty-before-label {
159  opacity: 0;
160}
161.twentytwenty-before-label:before {
162  content: "";
163}
164#iceland .twentytwenty-before-label:before {
165    content: "TanDEM-X elevation data" }
166#hydroshedsv1 .twentytwenty-before-label:before {
167    content: "HydroSHEDS v1 northern river network" }
168#merit_comparison .twentytwenty-before-label:before {
169    content: "MERIT Hydro river network" }
170.twentytwenty-after-label {
171  opacity: 0;
172}
173.twentytwenty-after-label:before {
174  content: "HydroSHEDS v2.0";
175}
176.twentytwenty-horizontal .twentytwenty-before-label:before {
177  left: 10px;
178}
179.twentytwenty-horizontal .twentytwenty-after-label:before {
180  right: 10px;
181}
182.twentytwenty-vertical .twentytwenty-before-label:before {
183  top: 10px;
184}
185.twentytwenty-vertical .twentytwenty-after-label:before {
186  bottom: 10px;
187}
188.twentytwenty-overlay {
189  -webkit-transition-property: background;
190  -moz-transition-property: background;
191  transition-property: background;
192  background: rgba(0, 0, 0, 0);
193  z-index: 25;
194}
195
196.twentytwenty-overlay:hover {
197  background: rgba(0, 0, 0, 0.5);
198}
199.twentytwenty-overlay:hover .twentytwenty-after-label {
200  opacity: 1;
201}
202.twentytwenty-overlay:hover .twentytwenty-before-label {
203  opacity: 1;
204}
205.twentytwenty-before {
206  z-index: 20;
207}
208.twentytwenty-after {
209  z-index: 10;
210}
211.twentytwenty-handle {
212  height: 38px;
213  width: 38px;
214  position: absolute;
215  left: 50%;
216  top: 50%;
217  margin-left: -22px;
218  margin-top: -22px;
219  border: 3px solid white;
220  -webkit-border-radius: 1000px;
221  -moz-border-radius: 1000px;
222  border-radius: 1000px;
223  -webkit-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
224  -moz-box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
225  box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5);
226  z-index: 40;
227  cursor: pointer;
228}
229.twentytwenty-horizontal .twentytwenty-handle:before {
230  bottom: 50%;
231  margin-bottom: 22px;
232  -webkit-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
233  -moz-box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
234  box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
235}
236.twentytwenty-horizontal .twentytwenty-handle:after {
237  top: 50%;
238  margin-top: 22px;
239  -webkit-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
240  -moz-box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
241  box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
242}
243.twentytwenty-vertical .twentytwenty-handle:before {
244  left: 50%;
245  margin-left: 22px;
246  -webkit-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
247  -moz-box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
248  box-shadow: 3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
249}
250.twentytwenty-vertical .twentytwenty-handle:after {
251  right: 50%;
252  margin-right: 22px;
253  -webkit-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
254  -moz-box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
255  box-shadow: -3px 0 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5);
256}
257.twentytwenty-left-arrow {
258  border-right: 6px solid white;
259  left: 50%;
260  margin-left: -17px;
261}
262.twentytwenty-right-arrow {
263  border-left: 6px solid white;
264  right: 50%;
265  margin-right: -17px;
266}
267.twentytwenty-up-arrow {
268  border-bottom: 6px solid white;
269  top: 50%;
270  margin-top: -17px;
271}
272.twentytwenty-down-arrow {
273  border-top: 6px solid white;
274  bottom: 50%;
275  margin-bottom: -17px;
276}
277</style></head><body><div data-animation="default" data-collapse="small" data-duration="100" data-easing="ease" data-easing2="ease-out-quad" role="banner" class="navbar-main w-nav"><div class="div-block-33"><div class="navbardiv"><a href="/" class="nav-logo-link"><img src="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/62421e0391da2b54f8930663_HydroSHEDS_logo.svg" alt="HydroSHEDS word, with the logo as the O. The logo is a globe with graticule lines and a wave across the centre." class="nav-logo"/></a><nav role="navigation" class="nav-menu-4 w-nav-menu"><div class="navbar-page"><a href="/" class="project-link-heading-cover w-nav-link">Home</a></div><div class="navbar-page"><a href="/about" class="project-link-heading-cover w-nav-link">About</a></div><div class="navbar-page"><a href="/news" class="project-link-heading-cover w-nav-link">News</a></div><div class="navbar-page"><a href="/products" class="project-link-heading-cover w-nav-link">Products</a></div><div class="navbar-page"><a href="/applications" class="project-link-heading-cover w-nav-link">Applications</a></div><div class="navbar-page"><a href="/faq" class="project-link-heading-cover w-nav-link">FAQ</a></div></nav><div class="menu-button-3 w-nav-button"><div class="icon-3 w-icon-nav-menu"></div></div></div><a href="#" class="brand w-nav-brand"></a></div></div><div class="content-section"><div class="content w-container"><img src="" loading="lazy" alt="" class="news-photo w-dyn-bind-empty"/><div class="main-text-section"><h2>HydroSHEDS v2 for the Americas</h2><div class="main-text-section w-richtext"><p><strong>We are pleased to announce the first release of HydroSHEDS v2, now available for the Americas.</strong></p><p>HydroSHEDS v2 is derived from TanDEM-X elevation data, which has been extensively conditioned by collaborator <a href="https://www.confluvio.com/hydrosheds-v2">Confluvio </a>to improve the accuracy and connectivity of drainage pathways. Confluvio collaborated with industry leader Esri, Redlands to develop new tools that improve the generation of flow directions and river lines. </p><p>Existing stream datasets, including OpenStreetMap and national hydrographic datasets, were used to “imprint” known flow paths into the elevation maps, a new technique developed at Confluvio to guide the flow of rivers and streams in predominantly flat terrain. Additionally, our production team identified and incorporated natural sinks into the conditioning process, helping to represent internally draining basins.</p><p>The datasets feature some impressive characteristics: across the Americas, the new vector river network contains ~21 million river reaches with a combined total length of more than 35 million km. We identified about 7,700 natural sinks, incorporated close to 40 million imprint lines, and carried out nearly 200 thousand manual corrections, all reflecting the extensive conditioning and quality-control effort behind HydroSHEDS v2. For more information on HydroSHEDS v2 visit the <a href="/products/hydrosheds-v2">product page</a>.</p><p>This release includes core raster layers in GeoTIFF format at 1 arc-second resolution, approximately 3
2770 m at the equator. Raster data are provided as 10 × 10 degree tiles as well as continental composites. Vector data are available as both zipped Esri File Geodatabases and OGC GeoPackages (.gpkg).</p><p>Available products include flow directions, flow accumulation, river networks, and drainage basins (HydroBASINS Beta). Please visit the HydroSHEDS v2 <a href="/downloads-core-data-v2" target="_blank">download page </a>to access the data.</p><p>To receive updates on future HydroSHEDS v2 releases, including additional regions and data layers, sign up for the <a href="/newsletter" target="_blank">HydroSHEDS newsletter</a>. Questions and discussion are welcome in the <a href="https://hydrosheds.freeflarum.com/" target="_blank">HydroSHEDS forums</a>.</p><figure style="max-width:1913pxpx" class="w-richtext-align-fullwidth w-richtext-figure-type-image"><div><img alt="" src="https://cdn.prod.website-files.com/602ebbdd5021f30e81efbad9/6a4d09c4c118125b1b323429_Overview_americas.jpg" loading="lazy"/></div><figcaption>HydroSHEDS v2 river network (left) was produced from TanDEM-X data using automated conditioning, manual corrections and imprinting (middle) and identifying and implementing natural sinks (right)</figcaption></figure><p>‍</p></div></div><div class="div-block-42"><div data-wf--newsletter-signup--variant="base" class="signup w-form"><form id="wf-form-news-signup-page" name="wf-form-newsletter-signup" data-name="newsletter-signup" method="get" class="form-5" data-wf-page-id="60ec93100c87a83041e8d482" data-wf-element-id="113b177e-2dd3-95b6-1e8c-2dcebb104327" data-turnstile-sitekey="0x4AAAAAAAQTptj2So4dx43e"><h3 class="heading-54">Sign up for our newsletter</h3><div class="contact-form-grid"><div id="w-node-_113b177e-2dd3-95b6-1e8c-2dcebb10432b-bb104326" class="subscribe"><input class="text-field w-node-_113b177e-2dd3-95b6-1e8c-2dcebb104332-bb104326 w-input" maxlength="256" name="newsletter-email" data-name="newsletter-email" placeholder="Email *" type="email" id="newsletter-email" required=""/></div><div id="w-node-_113b177e-2dd3-95b6-1e8c-2dcebb104333-bb104326" class="subscribe"><input type="submit" data-wait="Please wait..." id="w-node-_113b177e-2dd3-95b6-1e8c-2dcebb104334-bb104326" class="subscribe-button w-button" value="Subscribe"/></div></div></form><div class="success-message w-form-done"><div>Thank you! Your submission has been received and you should receive a confirmation by email. Please confirm your subscription.</div></div><div class="error-message w-form-fail"><div>Oops! Something went wrong while submitting the form.</div></div></div></div><h3>Other news items</h3><div class="collection-list-wrapper-8 w-dyn-list"><div role="list" class="collection-list-6 w-dyn-items w-row"><div role="listitem" class="collection-item-7 w-dyn-item w-col w-col-6"><a href="/news/a-sharper-look-at-the-worlds-rivers-and-catchments-eos" class="link-block-16 w-inline-block"><div><img src="https://cdn.prod.website-files.com/602ebbdd5021f30e81efbad9/6a4dad1dc103786da8c7e14e_TDX-Formation_small.jpg" loading="lazy" width="393" alt="" sizes="(max-width: 479px) 92vw, (max-width: 767px) 82vw, (max-width: 991px) 46vw, 393px" srcset="https://cdn.prod.website-files.com/602ebbdd5021f30e81efbad9/6a4dad1dc103786da8c7e14e_TDX-Formation_small-p-500.jpg 500w, https://cdn.prod.website-files.com/602ebbdd5021f30e81efbad9/6a4dad1dc103786da8c7e14e_TDX-Formation_small-p-800.jpg 800w, https://cdn.prod.website-files.com/602ebbdd5021f30e81efbad9/6a4dad1dc103786da8c7e14e_TDX-Formation_small-p-1080.jpg 1080w, https://cdn.prod.website-files.com/602ebbdd5021f30e81efbad9/6a4dad1dc103786da8c7e14e_TDX-Formation_small.jpg 2000w" class="image-22"/><div class="text-block-42">A Sharper Look at the World’s Rivers and Catchments</div></div></a></div></div></div></div></div><footer id="footer" class="footer-2"><div class="div-block-25"></div><div class="footer-content"><div class="footer-component w-container"><div id="w-node-_4aca09d0-71cd-e983-4ea3-efc009f4fc1a-f166aad0" class="footer-block-2"><a href="/" class="bottom-logo w-inline-block"><img src="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/62421e8b14b8c66bd1daa8a3_HydroSHEDS_logo_light.svg" loading="lazy" width="155" alt="HydroSHEDS word, with the logo as the O. The logo is a globe with graticule lines and a wave across the centre." class="image-16"/></a></div><div id="w-node-_3bbe096a-cb66-7922-c519-1639f166aae5-f166aad0" class="footer-block-2"><ul role="list" class="list-5 w-list-unstyled"><li class="footer-item"><a href="/about" class="footer-link-2">About</a></li><li class="footer-item"><div class="footer-copyright">|</div></li><li class="footer-item"><a href="/news" class="footer-link-2">News</a></li><li class="footer-item"><div class="footer-copyright">|</div></li><li class="footer-item"><a href="/sponsors" class="footer-link-2">Sponsors</a></li><li class="footer-item"><div class="footer-copyright hide-when-small">|</div></li></ul><ul role="list" class="list-5 w-list-unstyled"><li class="footer-item"><a href="/contact" class="footer-link-2">Contact</a></li><li class="footer-item"><div class="footer-copyright">|</div></li><li class="footer-item"><a href="/terms-of-use" class="footer-link-2">Terms of Use</a></li><li class="footer-item"><div class="footer-copyright">|</div></li><li class="footer-item"><a href="/privacy" class="footer-link-2">Privacy Policy</a></li><li class="footer-item"><div class="footer-copyright">|</div></li><li class="footer-item"><a href="/newsletter" class="footer-link-2">Newsletter</a></li></ul></div></div><div class="footer-copyright">© HydroSHEDS 2026<br/></div></div></footer>
277<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=602eb43d42a3b5553a4f134c" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
277<script src="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/js/webflow.schunk.e381ae44737afe02.js" type="text/javascript" integrity="sha384-aC+KDlIL9ZeLUzml1VnUJGQDHlvA39K/wuU6VzxknZMq8uI19vSz4Fi07d2Ipd31" crossorigin="anonymous"></script>
277<script src="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/js/webflow.schunk.ab18bf50ca6a7679.js" type="text/javascript" integrity="sha384-wwWyUpK/ijy4ogRCK4yeWgJE35KPhoC5lV6nj4p2DOJIjz/rl42XJllmB0bBocTN" crossorigin="anonymous"></script>
277<script src="https://cdn.prod.website-files.com/602eb43d42a3b5553a4f134c/js/webflow.105f0303.d0e9f8d6276778af.js" type="text/javascript" integrity="sha384-DpYS+pg0VXQ3yaJkpDxvVTqk+vTxVsrQXjNm/wnq46QMDI7WJ/uFP4E/2xkLhQ0p" crossorigin="anonymous"></script>
vendor: 1 bytes, line 277
277
278<script>
279 function getParam(name) {
280     name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
281     var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
282     results = regex.exec(location.search);
283     return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
284 }
285 var Webflow = Webflow || [];
286 Webflow.push(function () {
287     var tabName = getParam('tab');
288     if (tabName) $('.' + tabName).triggerHandler('click');
289 });
290
291 </script>
291
292
293 
293<script>
294  document.addEventListener("DOMContentLoaded", function () {
295    const PROXY_SUBSCRIBE_URL = "https://subscribe.hydrosheds.org/subscribe";
296    const SUBSCRIBE_SECRET = "";
297
298    /** Webflow field ids inside each newsletter form (required on those forms). */
299    const NEWSLETTER_EMAIL_ID = "newsletter-email";
300    const NEWSLETTER_NAME_ID = "name-newsletter";
301
302    /**
303     * Newsletter blocks: form id + signup_source sent to the proxy / attribs.
304     * Add a row when you add another Webflow form that uses the same field ids.
305     */
306    const NEWSLETTER_FORMS = [
307      { formId: "wf-form-newsletter", signupSource: "newsletter" },
308      { formId: "wf-form-news-signup-page", signupSource: "newsletter" },
309    ];
310
311    /**
312     * Optional extra inputs -> POST /subscribe JSON keys (global document ids).
313     * Add matching fields on listmonk_subscribe_proxy SubscribeIn before using.
314     *
315     * @type {Array<{ elementId: string, jsonKey: string, type?: "string"|"checkbox" }>}
316     */
317    const EXTRA_SUBSCRIBE_FIELDS = [
318      // { elementId: "company-newsletter", jsonKey: "message", type: "string" },
319      // { elementId: "tools-opt-in", jsonKey: "tool_interest", type: "checkbox" },
320    ];
321
322    const boundNewsletterForms = new WeakSet();
323
324    function escapeSel(id) {
325      if (window.CSS && typeof window.CSS.escape === "function") return window.CSS.escape(id);
326      return id.replace(/["\\#.;:[\],>+~*'()]/g, "\\$&");
327    }
328
329    function fieldInForm(form, elementId) {
330      if (!form || !elementId) return null;
331      return form.querySelector("#" + escapeSel(elementId));
332    }
333
334    function trimValue(el) {
335      if (!el || typeof el.value !== "string") return "";
336      return el.value.trim();
337    }
338
339    function collectExtraFields() {
340      const out = {};
341      for (const row of EXTRA_SUBSCRIBE_FIELDS) {
342        const el = document.getElementById(row.elementId);
343        if (!el) continue;
344        const t = row.type || "string";
345        if (t === "checkbox") {
346          out[row.jsonKey] = Boolean(el.checked);
347        } else {
348          const v = trimValue(el);
349          if (v !== "") out[row.jsonKey] = v;
350        }
351      }
352      return out;
353    }
354
355    function buildSubscribeBody(email, name, signupSource) {
356      return Object.assign(
357        {
358          email: email,
359          name: name,
360          signup_source: signupSource,
361          tool_interest: false,
362          message: "",
363        },
364        collectExtraFields()
365      );
366    }
367
368    async function postSubscribe(body) {
369      const headers = { "Content-Type": "application/json" };
370      if (SUBSCRIBE_SECRET) headers["X-Subscribe-Secret"] = SUBSCRIBE_SECRET;
371      return fetch(PROXY_SUBSCRIBE_URL, {
372        method: "POST",
373        headers: headers,
374        body: JSON.stringify(body),
375      });
376    }
377
378    function bindNewsletterForm(form, signupSource) {
379      if (!form || boundNewsletterForms.has(form)) return;
380      const emailEl = fieldInForm(form, NEWSLETTER_EMAIL_ID);
381      const nameEl = fieldInForm(form, NEWSLETTER_NAME_ID);
382      if (!emailEl) return;
383
384      boundNewsletterForms.add(form);
385
386      form.addEventListener("submit", async function (event) {
387        event.preventDefault();
388
389        const email = trimValue(emailEl);
390        const name = nameEl ? trimValue(nameEl) : "";
391        if (!email) {
392          console.warn("Newsletter signup: missing email (#" + NEWSLETTER_EMAIL_ID + ").");
393          return;
394        }
395
396        const body = buildSubscribeBody(email, name, signupSource);
397
398        try {
399          const response = await postSubscribe(body);
400          if (!response.ok) {
401            console.warn("Newsletter signup failed:", await response.text());
402            return;
403          }
404          form.reset();
405        } catch (err) {
406          console.warn("Newsletter signup failed:", err);
407        }
408      });
409    }
410
411    for (const cfg of NEWSLETTER_FORMS) {
412      const form = document.getElementById(cfg.formId);
413      if (form) bindNewsletterForm(form, cfg.signupSource);
414    }
415
416    // Contact form: opt-in checkbox then native Webflow submit
417    const contactForm = document.getElementById("wf-form-contact-general");
418    const contactNameField = document.getElementById("First-Name-2");
419    const contactEmailField = document.getElementById("Email-2");
420    const optinCheckbox = document.getElementById("checkbox-2");
421    let contactSubmitting = false;
422
423    if (contactForm && contactEmailField && optinCheckbox) {
424      contactForm.addEventListener("submit", async function (event) {
425        if (contactSubmitting) return;
426        if (!optinCheckbox.checked) return;
427
428        event.preventDefault();
429
430        const email = trimValue(contactEmailField);
431        const name = contactNameField ? trimValue(contactNameField) : "";
432
433        if (email) {
434          try {
435            const response = await postSubscribe(buildSubscribeBody(email, name, "contact"));
436            if (!response.ok) {
437              console.warn("Newsletter opt-in failed:", await response.text());
438            }
439          } catch (err) {
440            console.warn("Newsletter opt-in failed:", err);
441          }
442        }
443
444        contactSubmitting = true;
445        contactForm.requestSubmit();
446      });
447    }
448  });
449</script>
449
450
451<script src="https://code.jquery.com/jquery-2.2.0.min.js" integrity="sha256-ihAoc6M/JPfrIiIeayPE9xjin4UWjsx2mjW/rtmxLM4=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 451
451
452<script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
452
453
454<script>
455!function(t){t.fn.twentytwenty=function(e){var e=t.extend({default_offset_pct:.5,orientation:"horizontal"},e);return this.each(function(){var n=e.default_offset_pct,i=t(this),a=e.orientation,s="vertical"===a?"down":"left",d="vertical"===a?"up":"right";i.wrap("<div class='twentytwenty-wrapper twentytwenty-"+a+"'></div>"),i.append("<div class='twentytwenty-overlay'></div>");var r=i.find("img:first"),w=i.find("img:last");i.append("<div class='twentytwenty-handle'></div>");var c=i.find(".twentytwenty-handle");c.append("<span class='twentytwenty-"+s+"-arrow'></span>"),c.append("<span class='twentytwenty-"+d+"-arrow'></span>"),i.addClass("twentytwenty-container"),r.addClass("twentytwenty-before"),w.addClass("twentytwenty-after");var o=i.find(".twentytwenty-overlay");o.append("<div class='twentytwenty-before-label'></div>"),o.append("<div class='twentytwenty-after-label'></div>");var f=function(t){var e=r.width(),n=r.height();return{w:e+"px",h:n+"px",cw:t*e+"px",ch:t*n+"px"}},l=function(t){"vertical"===a?r.css("clip","rect(0,"+t.w+","+t.ch+",0)"):r.css("clip","rect(0,"+t.cw+","+t.h+",0)"),i.css("height",t.h)},v=function(t){var e=f(t);c.css("vertical"===a?"top":"left","vertical"===a?e.ch:e.cw),l(e)};t(window).on("resize.twentytwenty",function(){v(n)});var p=0,y=0;c.on("movestart",function(t){(t.distX>t.distY&&t.distX<-t.distY||t.distX<t.distY&&t.distX>-t.distY)&&"vertical"!==a?t.preventDefault():(t.distX<t.distY&&t.distX<-t.distY||t.distX>t.distY&&t.distX>-t.distY)&&"vertical"===a&&t.preventDefault(),i.addClass("active"),p=i.offset().left,offsetY=i.offset().top,y=r.width(),imgHeight=r.height()}),c.on("moveend",function(){i.removeClass("active")}),c.on("move",function(t){i.hasClass("active")&&(n="vertical"===a?(t.pageY-offsetY)/imgHeight:(t.pageX-p)/y,0>n&&(n=0),n>1&&(n=1),v(n))}),i.find("img").on("mousedown",function(t){t.preventDefault()}),t(window).trigger("resize.twentytwenty")})}}(jQuery);
456
457!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t,e){function n(t){function e(){a?(n(),O(e),i=!0,a=!1):i=!1}var n=t,a=!1,i=!1;this.kick=function(){a=!0,i||e()},this.end=function(t){var e=n;t&&(i?(n=a?function(){e(),t()}:t,a=!0):t())}}function a(){return!0}function i(){return!1}function o(t){t.preventDefault()}function r(t){z[t.target.tagName.toLowerCase()]||t.preventDefault()}function u(t){return 1===t.which&&!t.ctrlKey&&!t.altKey}function c(t,e){var n,a;if(t.identifiedTouch)return t.identifiedTouch(e);for(n=-1,a=t.length;++n<a;)if(t[n].identifier===e)return t[n]}function d(t,e){var n=c(t.changedTouches,e.identifier);if(n&&(n.pageX!==e.pageX||n.pageY!==e.pageY))return n}function m(t){var e;u(t)&&(e={target:t.target,startX:t.pageX,startY:t.pageY,timeStamp:t.timeStamp},K(document,Q.move,f,e),K(document,Q.cancel,s,e))}function f(t){var e=t.data;X(t,e,t,v)}function s(){v()}function v(){L(document,Q.move,f),L(document,Q.cancel,s)}function p(t){var e,n;z[t.target.tagName.toLowerCase()]||(e=t.changedTouches[0],n={target:e.target,startX:e.pageX,startY:e.pageY,timeStamp:t.timeStamp,identifier:e.identifier},K(document,B.move+"."+e.identifier,g,n),K(document,B.cancel+"."+e.identifier,h,n))}function g(t){var e=t.data,n=d(t,e);n&&X(t,e,n,l)}function h(t){var e=t.data,n=c(t.changedTouches,e.identifier);n&&l(e.identifier)}function l(t){L(document,"."+t,g),L(document,"."+t,h)}function X(t,e,n,a){var i=n.pageX-e.startX,o=n.pageY-e.startY;C*C>i*i+o*o||y(t,e,n,i,o,a)}function Y(){return this._handled=a,!1}function w(t){t._handled()}function y(t,e,n,a,i,o)(),z={textarea:!0,input:!0,select:!0,button:!0},Q={move:"mousemove",cancel:"mouseup dragstart",end:"mouseup"},B={move:"touchmove",cancel:"touchend",end:"touchend"};t.event.special.movestart={setup:R,teardown:x,add:b,remove:j,_default:function(t){function a(){D(o,r.touch,r.timeStamp),N(t.target,o)}var o,r;t._handled()&&(o={target:t.target,startX:t.startX,startY:t.startY,pageX:t.pageX,pageY:t.pageY,distX:t.distX,distY:t.distY,deltaX:t.deltaX,deltaY:t.deltaY,velocityX:t.velocityX,velocityY:t.velocityY,timeStamp:t.timeStamp,identifier:t.identifier,targetTouches:t.targetTouches,finger:t.finger},r={event:o,timer:new n(a),touch:e,timeStamp:e},t.identifier===e?(K(t.target,"click",i),K(document,Q.move,T,r),K(document,Q.end,S,r)):(t._preventTouchmoveDefault(),K(document,B.move+"."+t.identifier,_,r),K(document,B.end+"."+t.identifier,q,r)))}},t.event.special.move={setup:function(){K(this,"movestart.move",t.noop)},teardown:function(){L(this,"movestart.move",t.noop)}},t.event.special.moveend={setup:function(){K(this,"movestart.moveend",t.noop)},teardown:function(){L(this,"movestart.moveend",t.noop)}},K(document,"mousedown.move",m),K(document,"touchstart.move",p),"function"==typeof Array.prototype.indexOf&&!function(t){for(var e=["changedTouches","targetTouches"],n=e.length;n--;)-1===t.event.props.indexOf(e[n])&&t.event.props.push(e[n])}(t)});
458
459$('.twentytwenty-container').imagesLoaded(function(){
460  $(".twentytwenty-container").twentytwenty();
461});
462
463$(window).load(function() {
464  $("#beforeafter").twentytwenty();
465});
466</script>
466
467
468<!-- If you already loaded HE then you don't need this line-->
469<script src="https://cdnjs.cloudflare.com/ajax/libs/he/1.2.0/he.min.js"></script>
469
470<!-- decode CMS collection item embed -->
471<script type="text/javascript">
472$(document).ready(function () {
473       // targeting class of .podcast-embed
474       $(".podcast-embed").each(function () {
475           $(this).hide(); // hide so code is not displayed (better to hide in CSS)
476           $(this).html(he.decode($(this).html())); // decode the text
477           $(this).show(); // show the decoded element
478       });
479});
480</script>
480</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.