PageSourceSearch

https://hydroforecast.com/contact/

html hydroforecast.com collected 2026-10-07 06:01:30 UTC 34,996 bytes, 569 lines download raw bytes

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">
6  <title>Contact - HydroForecast by Upstream Tech</title>
7  <meta name="description" content="Get in touch with the HydroForecast team.">
8  
9  
10  
11  <link rel="preconnect" href="https://fonts.googleapis.com">
12  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
13  <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
14  <link rel="icon" type="image/x-icon" href="/images/favicon/favicon.ico?v=d930dfd2">
15  <link rel="icon" type="image/svg+xml" href="/images/favicon/favicon.svg?v=b7e0d42b">
16  <link rel="icon" type="image/png" sizes="96x96" href="/images/favicon/favicon-96x96.png?v=a203b36e">
17  <link rel="apple-touch-icon" sizes="180x180" href="/images/favicon/apple-touch-icon.png?v=ffb72c49">
18  <link rel="manifest" href="/images/favicon/site.webmanifest">
19  <link rel="stylesheet" href="/css/style.32e4843e.css">
20  
20<script src="https://fast.wistia.com/player.js" async></script>
20
21  
22
23<!-- Google Analytics 4 -->
vendor: 108 bytes, lines 23-24
23
24<script type="text/plain" data-category="analytics" async src="https://www.googletagmanager.com/gtag/js?id=
24G-68YYYT3EBN
vendor: 12 bytes, line 24
24"></script>
25<script type="text/plain" data-category="analytics">
26  
vendor: 133 bytes, lines 26-29
26window.dataLayer = window.dataLayer || [];
27  function gtag(){dataLayer.push(arguments);}
28  gtag('js', new Date());
29  gtag('config', '
29G-68YYYT3EBN
vendor: 4 bytes, line 29
29');
30</script>
30
31
32<!-- PostHog -->
33<script type="text/plain" data-category="analytics">
34!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
35posthog.init('phc_BXZk1wrHfz5E1h0anQjDWBW4dtFv4jETmpFaBo6oSlo', {
36    api_host: 'https://us.i.posthog.com',
37    person_profiles: 'identified_only'
38});
39</script>
39
40
41<!-- Meta (Facebook) Pixel -->
42<script type="text/plain" data-category="marketing">
vendor: 399 bytes, lines 42-51
42
43!function(f,b,e,v,n,t,s)
44{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
45n.callMethod.apply(n,arguments):n.queue.push(arguments)};
46if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
47n.queue=[];t=b.createElement(e);t.async=!0;
48t.src=v;s=b.getElementsByTagName(e)[0];
49s.parentNode.insertBefore(t,s)}(window, document,'script',
50'https://connect.facebook.net/en_US/fbevents.js');
51fbq('init', '
511823226748278748
vendor: 30 bytes, lines 51-52
51');
52fbq('track', 'PageView');
53</script>
53
54
55<!-- HubSpot -->
56<script type="text/plain" data-category="marketing" id="hs-script-loader" async defer src="//js.hs-scripts.com/20745831.js"></script>
56
57
58<!-- LinkedIn Insight Tag -->
59<script type="text/plain" data-category="marketing">
60_linkedin_partner_id = "7250858";
61window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
62window._linkedin_data_partner_ids.push(_linkedin_partner_id);
63</script>
vendor: 1 bytes, line 63
63
64<script type="text/plain" data-category="marketing">
65(function(l) {
66if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])};
67window.lintrk.q=[]}
68var s = document.getElementsByTagName("script")[0];
69var b = document.createElement("script");
70b.type = "text/javascript";b.async = true;
71b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
72s.parentNode.insertBefore(b, s);})(window.lintrk);
73</script>
73
74
75<!-- Google Ads (gtag.js) -->
vendor: 108 bytes, lines 75-76
75
76<script type="text/plain" data-category="marketing" async src="https://www.googletagmanager.com/gtag/js?id=
76AW-662763737
vendor: 12 bytes, line 76
76"></script>
77<script type="text/plain" data-category="marketing">
78  
vendor: 133 bytes, lines 78-81
78window.dataLayer = window.dataLayer || [];
79  function gtag(){dataLayer.push(arguments);}
80  gtag('js', new Date());
81  gtag('config', '
81AW-662763737
vendor: 4 bytes, line 81
81');
82</script>
82
83
84
85  
86<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/cookieconsent.css">
87<style>
88  /* Brand tokens → vanilla-cookieconsent CSS variables */
89  #cc-main {
90    --cc-font-family: var(--font-sans);
91    --cc-bg: var(--color-bg);
92    --cc-primary-color: var(--color-text);
93    --cc-secondary-color: var(--color-text-muted);
94    --cc-btn-border-radius: var(--radius);
95    --cc-modal-border-radius: var(--radius);
96    --cc-btn-primary-bg: var(--color-accent);
97    --cc-btn-primary-color: var(--color-bg);
98    --cc-btn-primary-border-color: var(--color-accent);
99    --cc-btn-primary-hover-bg: var(--color-accent-hover);
100    --cc-btn-primary-hover-color: var(--color-bg);
101    --cc-btn-primary-hover-border-color: var(--color-accent-hover);
102    --cc-btn-secondary-bg: transparent;
103    --cc-btn-secondary-color: var(--color-text);
104    --cc-btn-secondary-border-color: var(--color-border-strong);
105    --cc-btn-secondary-hover-bg: rgba(0, 0, 0, 0.03);
106    --cc-btn-secondary-hover-color: var(--color-text);
107    --cc-btn-secondary-hover-border-color: var(--color-text);
108    --cc-link-color: var(--color-accent);
109  }
110
111  /* Compact consent banner */
112  #cc-main .cm--box {
113    max-width: 340px;
114    box-shadow: var(--shadow-card-hover);
115  }
116  /* Keep "Learn more" from splitting across lines. */
117  #cc-main .cm--box .cm__desc a {
118    white-space: nowrap;
119  }
120  #cc-main .cm--box .cm__body {
121    padding: 0;
122  }
123  #cc-main .cm--box .cm__texts {
124    padding: var(--space-md);
125  }
126  #cc-main .cm--box .cm__title {
127    font-size: var(--text-sm);
128    font-weight: 700;
129    margin: 0 0 var(--space-xs);
130    padding: 0;
131  }
132  #cc-main .cm--box .cm__title:empty {
133    display: none;
134  }
135  /* Zero out the library's own 1.1em top margin and 1em bottom padding
136     on .cm__desc — .cm__texts already gives us the right outer padding. */
137  #cc-main .cm--box .cm__desc {
138    font-size: var(--text-sm);
139    line-height: 1.45;
140    margin: 0;
141    padding: 0;
142  }
143  /* Flatten the library's nested .cm__btn-group so Accept + Reject sit
144     side-by-side in a single flex row with consistent heights. */
145  #cc-main .cm--box .cm__btns {
146    display: flex !important;
147    flex-direction: row !important;
148    align-items: stretch;
149    gap: var(--space-sm);
150    padding: 0 var(--space-md) var(--space-md);
151    border-top: none;
152    margin: 0;
153  }
154  #cc-main .cm--box .cm__btn-group {
155    display: contents !important;
156  }
157  #cc-main .cm--box .cm__btn {
158    margin: 0 !important;
159    line-height: 1.2;
160    box-sizing: border-box;
161  }
162  /* Accept = flex-grow 2 (primary). Reject = flex-grow 1 (secondary).
163     2:1 ratio reads as intentional rather than "a wide button with a
164     stub next to it". */
165  #cc-main .cm--box .cm__btn[data-role="all"] {
166    flex: 2 1 0 !important;
167  }
168  #cc-main .cm--box .cm__btn[data-role="necessary"] {
169    flex: 1 1 0 !important;
170  }
171</style>
172<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cookieconsent.umd.js"></script>
vendor: 1 bytes, line 172
172
173<script defer>
174  window.__CC_PRIVACY_URL = 'https://www.upstream.tech/privacy/';
175</script>
vendor: 1 bytes, line 175
175
176<script defer>
177
178  // EU 27 + EEA (IS, LI, NO) + UK + Switzerland — the standard "GDPR
179  // region" set. Visitors outside this list get auto-accept; visitors
180  // inside it get the consent banner.
181  var GDPR_COUNTRIES = new Set([
182    'AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU',
183    'IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES',
184    'SE','IS','LI','NO','GB','CH'
185  ]);
186
187  function detectCountry() {
188    return fetch('/cdn-cgi/trace', { cache: 'no-store' })
189      .then(function (r) { return r.ok ? r.text() : ''; })
190      .then(function (text) {
191        var m = text.match(/loc=([A-Z]{2})/);
192        return m ? m[1] : null;
193      })
194      .catch(function () { return null; });
195  }
196
197  addEventListener('DOMContentLoaded', function () {
198    if (typeof CookieConsent === 'undefined') return;
199    detectCountry().then(function (country) {
200      // Default to GDPR-safe (show banner) if detection fails.
201      var requiresConsent = !country || GDPR_COUNTRIES.has(country);
202      CookieConsent.run({
203        autoShow: requiresConsent,
204        guiOptions: {
205          consentModal: { layout: 'box', position: 'bottom right', equalWeightButtons: false },
206          preferencesModal: { layout: 'box', equalWeightButtons: false }
207        },
208        categories: {
209          necessary: { enabled: true, readOnly: true },
210          analytics: {},
211          marketing: {}
212        },
213        language: {
214          default: 'en',
215          translations: {
216            en: {
217              consentModal: {
218                title: '',
219                description: 'We use cookies for analytics and marketing. <a href="' + window.__CC_PRIVACY_URL + '">Learn more</a>.',
220                acceptAllBtn: 'Accept',
221                acceptNecessaryBtn: 'Reject'
222              },
223              preferencesModal: {
224                title: 'Cookie preferences',
225                acceptAllBtn: 'Accept all',
226                acceptNecessaryBtn: 'Reject all',
227                savePreferencesBtn: 'Save preferences',
228                closeIconLabel: 'Close',
229                sections: [
230                  {
231                    title: 'Strictly necessary',
232                    description: 'Required for the site to function. Cannot be disabled.',
233                    linkedCategory: 'necessary'
234                  },
235                  {
236                    title: 'Analytics',
237                    description: 'Google Analytics and PostHog — help us understand how visitors use the site so we can improve it.',
238                    linkedCategory: 'analytics'
239                  },
240                  {
241                    title: 'Marketing',
242                    description: 'Meta Pixel, HubSpot, and LinkedIn Insight — used for advertising measurement and outreach.',
243                    linkedCategory: 'marketing'
244                  }
245                ]
246              }
247            }
248          }
249        }
250      }).then(function () {
251        // Outside GDPR regions: auto-accept all categories so pixels
252        // fire without showing the banner. Skip if the visitor already
253        // made an explicit choice (e.g., they previously opted out via
254        // the footer "Cookie preferences" link).
255        if (!requiresConsent && !CookieConsent.validConsent()) {
256          CookieConsent.acceptCategory('all');
257        }
258      });
259    });
260  });
261
262</script>
262
263
264</head>
265<body>
266  
267  <header>
268    <nav>
269      <a href="/" class="nav-logo"><img src="/images/hydroforecast-logo.svg?v=080bee06" alt="HydroForecast"></a>
270      <button class="nav-toggle" aria-label="Toggle menu" aria-expanded="false">
271        <span></span><span></span><span></span>
272      </button>
273      <ul>
274        <li><a href="/">Home</a></li>
275        <li class="nav-dropdown-wrap">
276          <button class="nav-dropdown-trigger" aria-expanded="false">Industries <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button>
277          <div class="nav-dropdown">
278            <a href="/hydropower/" class="nav-dropdown-item">
279              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/></svg>
280              Hydropower
281            </a>
282            <a href="/energy-traders/" class="nav-dropdown-item">
283              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"/></svg>
284              Energy Traders
285            </a>
286            <a href="/water-utilities/" class="nav-dropdown-item">
287              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg>
288              Water Utilities
289            </a>
290            <a href="/mining/" class="nav-dropdown-item">
291              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 7.5l-2.25-1.313m0 0l-2.25-1.312M18.75 6.187l-2.25 1.313M18.75 6.187V3.375m-9 5.25l-2.25-1.312m0 0L5.25 6l-2.25 1.313M7.5 7.313V4.5m0 0L5.25 3.187M7.5 4.5l2.25-1.313M12 21l-2.25-1.313m0 0l-2.25-1.312m2.25 1.312l-2.25 1.313M9.75 19.687V16.875m0 0l2.25-1.313m-2.25 1.313L7.5 15.562"/></svg>
292              Mining
293            </a>
294            <a href="/government-agencies/" class="nav-dropdown-item">
295              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21v-8.25M15.75 21v-8.25M8.25 21v-8.25M3 9l9-6 9 6m-1.5 12V10.332A48.36 48.36 0 0 0 12 9.75c-2.551 0-5.056.2-7.5.582V21M3 21h18M12 6.75h.008v.008H12V6.75Z"/></svg>
296              Government Agencies
297            </a>
298          </div>
299        </li>
300        <li class="nav-dropdown-wrap">
301          <button class="nav-dropdown-trigger" aria-expanded="false">Platform <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button>
302          <div class="nav-dropdown">
303            <a href="/features/" class="nav-dropdown-item">
304              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.
304074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.248a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.282c-.062-.373-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"/><path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"/></svg>
305              Features
306            </a>
307            <a href="/faq/" class="nav-dropdown-item">
308              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z"/></svg>
309              FAQ
310            </a>
311          </div>
312        </li>
313        <li class="nav-dropdown-wrap">
314          <button class="nav-dropdown-trigger" aria-expanded="false">Resources <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button>
315          <div class="nav-dropdown nav-dropdown--wide">
316            <div class="nav-dropdown-cols">
317              <div class="nav-dropdown-col nav-dropdown-col--featured">
318                <div class="nav-featured-carousel">
319                  
320                  <article class="resource-card nav-featured-post active">
321                    <a href="/resources/upstream-tech-partners-with-noaa-office-of-water-prediction/">
322                      <img src="/images/noaa-crada-hero.webp?v=88346c60" alt="Upstream Tech Partners with NOAA&#39;s Office of Water Prediction" loading="lazy">
323                      <div class="resource-card-body">
324                        <span class="resource-date">June 26, 2026 &middot; The HydroForecast Team</span>
325                        <p class="nav-featured-title">Upstream Tech Partners with NOAA&#39;s Office of Water Prediction</p>
326                      </div>
327                    </a>
328                  </article>
329                  
330                  <article class="resource-card nav-featured-post">
331                    <a href="/resources/forecasting-in-ungauged-basins/">
332                      <img src="/images/PNW-AR-Blog--4-.webp?v=8bf8ca5b" alt="Forecasting in ungauged basins" loading="lazy">
333                      <div class="resource-card-body">
334                        <span class="resource-date">March 25, 2026 &middot; Alex Truby</span>
335                        <p class="nav-featured-title">Forecasting in ungauged basins</p>
336                      </div>
337                    </a>
338                  </article>
339                  
340                  <article class="resource-card nav-featured-post">
341                    <a href="/resources/hydroforecast-provides-critical-decision-support-during-a-month-of-historic-atmospheric-rivers/">
342                      <img src="/images/PNW-AR-Blog.webp?v=1c459097" alt="HydroForecast provides critical decision support during a month of historic atmospheric rivers" loading="lazy">
343                      <div class="resource-card-body">
344                        <span class="resource-date">February 17, 2026 &middot; Hunter Johnson</span>
345                        <p class="nav-featured-title">HydroForecast provides critical decision support during a month of historic atmospheric rivers</p>
346                      </div>
347                    </a>
348                  </article>
349                  
350                </div>
351              </div>
352              <div class="nav-dropdown-col nav-dropdown-col--browse">
353            <div class="nav-dropdown-group">
354              <button type="button" class="nav-dropdown-item nav-dropdown-group-trigger" aria-expanded="true" aria-controls="nav-resources-learn">
355                <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25"/></svg>
356                Learn <svg class="nav-chevron nav-dropdown-group-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg>
357              </button>
358              <div class="nav-dropdown-group-items" id="nav-resources-learn">
359                <a href="/resources/#blog" class="nav-dropdown-item">
360                  <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 0 1-2.25 2.25M16.5 7.5V18a2.25 2.25 0 0 0 2.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 0 0 2.25 2.25h13.5M6 7.5h3v3H6v-3Z"/></svg>
361                  Blog
362                </a>
363                <a href="/resources/#webinar" class="nav-dropdown-item">
364                  <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M17.25 6.75 22.5 4.5v15l-5.25-2.25M4.5 6.75h9a1.5 1.5 0 0 1 1.5 1.5v9a1.5 1.5 0 0 1-1.5 1.5h-9a1.5 1.5 0 0 1-1.5-1.5v-9a1.5 1.5 0 0 1 1.5-1.5Z"/></svg>
365                  Webinars
366                </a>
367                <a href="/resources/#case-study" class="nav-dropdown-item">
368                  <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z"/></svg>
369                  Case studies
370                </a>
371                <a href="/resources/#product" class="nav-dropdown-item">
372                  <svg class="industry-icon" viewBox="0 0 130 130" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M55.5447 30.7572C57.8334 25.3079 65.6179 25.4938 67.6438 31.0463L86.1495 81.7655L103.537 86.1125C104.119 86.258 104.678 86.4834 105.199 86.7822L142.994 108.495L139.756 114.131L101.961 92.4184L84.573 88.0715C82.4799 87.5482 80.7828 86.0204 80.0433 83.9935L61.5376 33.2742L32.361 102.742C30.6469 106.823 25.4434 108.035 22.103 105.13L9.09243 93.8166L-10.7017 113.611L-15.2979 109.015L4.49623 89.2204C6.9105 86.8061 10.7811 86.6712 13.3576 88.9116L26.3681 100.225L55.5447 30.7572Z"/></svg>
373                  Product
374                </a>
375                <a href="/resources/#research" class="nav-dropdown-item">
376                  <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4.26 10.147a60.438 60.438 0 0 0-.491 6.347A48.62 48.62 0 0 1 12 20.904a48.62 48.62 0 0 1 8.232-4.41 60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.636 50.636 0 0 0-2.658-.813A59.906 59.906 0 0 1 12 3.493a59.903 59.903 0 0 1 10.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0 1 12 13.489a50.702 50.702 0 0 1 3.741-3.342M6.75 15a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/></svg>
377                  Research
378                </a>
379              </div>
380            </div>
381            <a href="/resources/#news" class="nav-dropdown-item">
382              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"/></svg>
383              Announcements
384            </a>
385            <a href="/forecast-face-off/" class="nav-dropdown-item">
386              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><path d="M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"/></svg>
387              Forecast Face-off game
388            </a>
389                <a href="/resources/" class="nav-dropdown-explore-all">
390                  Explore all <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="14" height="14"><path fill-rule="evenodd" d="M3 10a.75.75 0 0 1 .75-.75h10.638L10.23 5.29a.75.75 0 1 1 1.04-1.08l5.5 5.25a.75.75 0 0 1 0 1.08l-5.5 5.25a.75.75 0 1 1-1.04-1.08l4.158-3.96H3.75A.75.75 0 0 1 3 10Z" clip-rule="evenodd"/></svg>
391                </a>
392              </div>
393            </div>
394          </div>
395        </li>
396        <li class="nav-dropdown-wrap">
397          <button class="nav-dropdown-trigger" aria-expanded="false">About <svg class="nav-chevron" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" width="14" height="14"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg></button>
398          <div class="nav-dropdown">
399            <a href="/about/" class="nav-dropdown-item">
400              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="8.5" cy="7.5" r="2.5"/><circle cx="16" cy="8" r="2"/><path d="M3.5 19c0-3 2.5-5 5-5s5 2 5 5"/><path d="M13.5 15c2 0 4 1.5 4.5 4"/></svg>
401              Team
402            </a>
403            <a href="/press/" class="nav-dropdown-item">
404              <svg class="industry-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 1 1 0-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 0 1-1.44-4.282m3.102.069a18.03 18.03 0 0 1-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 0 1 8.835 2.535M10.34 6.66a23.847 23.847 0 0 1 8.835-2.535m0 0A23.74 23.74 0 0 1 18.795 3m.38 1.125a23.91 23.91 0 0 1 1.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 0 0 1.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 0 1 0 3.46"/></svg>
405              Press
406            </a>
407          </div>
408        </li>
409        <li><a href="/contact/" class="btn-contact">Contact</a></li>
410        <li><a href="https://dashboard.hydroforecast.com/" class="btn-login">Log in</a></li>
411      </ul>
412    </nav>
413  </header>
414
415  <main>
416    <div id="hubspot-form"></div>
417<script>
418  window.addEventListener('load', function() {
419    if (typeof hbspt !== 'undefined') {
420      hbspt.forms.create({
421        region: "na1",
422        portalId: "20745831",
423        formId: "f59c0f56-d2a4-4386-8870-4abe525e9145",
424        target: "#hubspot-form"
425      });
426    }
427  });
428</script>
428
429
430
431  </main>
432
433  <footer>
434    <div class="footer-top">
435      <div class="footer-brand">
436        <a href="https://www.upstream.tech" class="footer-logo"><img src="/images/upstream-tech-logo.svg?v=5fa5528a" alt="Upstream Tech"></a>
437        <div class="footer-newsletter-section">
438          <img src="/images/hydroforecast-logo.svg?v=080bee06" alt="HydroForecast" class="footer-newsletter-logo">
439          <p class="footer-newsletter-text">Stay up to date with the latest from HydroForecast</p>
440          <a href="/newsletter/" class="btn-primary footer-newsletter-btn">Subscribe to our newsletter</a>
441        </div>
442      </div>
443      <div class="footer-columns">
444        <div class="footer-col">
445          <strong>Product</strong>
446          <ul>
447            <li><a href="/features/">Features</a></li>
448            <li><a href="/faq/">FAQ</a></li>
449            <li><a href="/support/">Support</a></li>
450          </ul>
451        </div>
452        <div class="footer-col">
453          <strong>Industries</strong>
454          <ul>
455            <li><a href="/hydropower/">Hydropower</a></li>
456            <li><a href="/energy-traders/">Energy Traders</a></li>
457            <li><a href="/water-utilities/">Water Utilities</a></li>
458            <li><a href="/mining/">Mining</a></li>
459            <li><a href="/government-agencies/">Government Agencies</a></li>
460          </ul>
461        </div>
462        <div class="footer-col">
463          <strong>Resources</strong>
464          <ul>
465            <li><a href="/resources/#blog">Blog</a></li>
466            <li><a href="/resources/#webinar">Webinars</a></li>
467            <li><a href="/resources/#case-study">Case studies</a></li>
468            <li><a href="/resources/#product">Product</a></li>
469            <li><a href="/resources/#news">Announcements</a></li>
470          </ul>
471        </div>
472        <div class="footer-col">
473          <strong>Company</strong>
474          <ul>
475            <li><a href="/about/">Team</a></li>
476            <li><a href="https://www.upstream.tech/careers/">Careers</a></li>
477            <li><a href="/press/">Press</a></li>
478            <li><a href="/contact/">Contact</a></li>
479            <li><a href="/licenses/">Terms</a></li>
480            <li><a href="https://dashboard.hydroforecast.com/">Log in</a></li>
481          </ul>
482        </div>
483      </div>
484    </div>
485    <div class="footer-bottom">
486      <p>Copyright &copy; 2026 Upstream Tech, Inc.</p>
487      <div class="footer-bottom-right">
488        <a href="https://www.linkedin.com/company/upstream-pbc/" aria-label="LinkedIn" class="footer-social">
489          <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
490        </a>
491        <a href="https://www.youtube.com/channel/UCO4cjFHJFOygDM6UhsznUaA" aria-label="YouTube" class="footer-social">
492          <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>
493        </a>
494        <a href="/licenses/">Terms</a>
495        <a href="https://www.upstream.tech/privacy/">Privacy</a>
496        <a href="#" data-cc="show-preferencesModal">Cookie preferences</a>
497      </div>
498    </div>
499  </footer>
500
501  
501<script>
502// Toggle .nav-scrolled on <body> so the home-hero-nav transparent nav (CSS in
503// _shared/base.css) flips to its solid state once the user scrolls past the
504// hero. Scoped: no-op on pages that don't set bodyClass: home-hero-nav.
505(function () {
506  if (!document.body.classList.contains("home-hero-nav")) return;
507  var scrolled = false;
508  function update() {
509    var next = window.scrollY > 8;
510    if (next === scrolled) return;
511    scrolled = next;
512    document.body.classList.toggle("nav-scrolled", next);
513  }
514  update();
515  window.addEventListener("scroll", update, { passive: true });
516  window.addEventListener("resize", update);
517})();
518</script>
518
519
520  
520<script>
521  (function(){
522    var btn=document.querySelector('.nav-toggle');
523    var ul=document.querySelector('header nav ul');
524    btn.addEventListener('click',function(){
525      var open=btn.getAttribute('aria-expanded')==='true';
526      btn.setAttribute('aria-expanded',String(!open));
527      ul.classList.toggle('nav-open');
528    });
529    var wraps=document.querySelectorAll('.nav-dropdown-wrap');
530    wraps.forEach(function(wrap){
531      var trigger=wrap.querySelector('.nav-dropdown-trigger');
532      trigger.addEventListener('click',function(e){
533        e.stopPropagation();
534        wrap.classList.toggle('open');
535      });
536    });
537    document.addEventListener('click',function(){
538      wraps.forEach(function(wrap){ wrap.classList.remove('open'); });
539    });
540    // Expandable groups inside a dropdown (Resources → Learn). Stop the click
541    // reaching the document handler above, which would close the dropdown.
542    document.querySelectorAll('.nav-dropdown-group-trigger').forEach(function(t){
543      var items=document.getElementById(t.getAttribute('aria-controls'));
544      t.addEventListener('click',function(e){
545        e.stopPropagation();
546        var open=t.getAttribute('aria-expanded')==='true';
547        t.setAttribute('aria-expanded',String(!open));
548        items.hidden=open;
549      });
550    });
551  })();
552  // Featured post carousel
553  (function(){
554    var carousel = document.querySelector('.nav-featured-carousel');
555    if (!carousel) return;
556    var posts = carousel.querySelectorAll('.nav-featured-post');
557    if (posts.length < 2) return;
558    var idx = 0;
559    posts[idx].classList.add('active');
560    setInterval(function(){
561      posts[idx].classList.remove('active');
562      idx = (idx + 1) % posts.length;
563      posts[idx].classList.add('active');
564    }, 4000);
565  })();
566  </script>
566
567  
567<script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/embed/v2.js"></script>
567
568<!-- Cloudflare Pages Analytics -->
vendor: 99 bytes, line 568
568<script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "
5685445986602dd40848b6b342b01ca210f
vendor: 13 bytes, line 568
568"}'></script>
568<!-- Cloudflare Pages Analytics --></body>
569</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.