PageSourceSearch

https://stfundraising.com/contact-us/

html stfundraising.com collected 2026-10-09 23:01:41 UTC 73,062 bytes, 1,286 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-CA">
3
4<head>
5    <meta charset="UTF-8">
6    <meta name="viewport" content="width=device-width, initial-scale=1.0">
7    <title>Contact Us &#8211; ST Fundraising</title>
8<meta name='robots' content='max-image-preview:large' />
9<script id="cookieyes" type="text/javascript" src="https://cdn-cookieyes.com/client_data/fca953104228e59d1080984e82cebdab/script.js"></script>
9
10<!-- Google Tag Manager for WordPress by gtm4wp.com -->
11<script data-cfasync="false" data-pagespeed-no-defer type="text/javascript">
12	var gtm4wp_datalayer_name = "dataLayer";
13	var dataLayer = dataLayer || [];
14	(function(){dataLayer.push(arguments);})('set', 'developer_id.dNGJiYT', true);
15</script>
15
16<!-- End Google Tag Manager for WordPress by gtm4wp.com --><link rel='dns-prefetch' href='//cdnjs.cloudflare.com' />
17
18<!-- Google Tag Manager for WordPress by gtm4wp.com -->
19<!-- GTM Container placement set to footer -->
20<script data-cfasync="false" data-pagespeed-no-defer type="text/javascript">
21	var dataLayer_content = {"pagePostType":"page","pagePostType2":"single-page","pagePostAuthor":"ordexdev"};
22	dataLayer.push( dataLayer_content );
23</script>
vendor: 1 bytes, line 23
23
24<script data-cfasync="false" data-pagespeed-no-defer type="text/javascript">
vendor: 322 bytes, lines 24-29
24
25(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
26new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
27j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
28'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
29})(window,document,'script','dataLayer','
29GTM-K8GJ8FQG
vendor: 4 bytes, line 29
29');
30</script>
30
31<!-- End Google Tag Manager for WordPress by gtm4wp.com --><link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://stfundraising.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fstfundraising.com%2Fcontact-us%2F" />
32<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://stfundraising.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fstfundraising.com%2Fcontact-us%2F&#038;format=xml" />
33<style id="wp-img-auto-sizes-contain-inline-css">
34img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
35/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
36</style>
37<style id="wp-emoji-styles-inline-css">
38
39	img.wp-smiley, img.emoji {
40		display: inline !important;
41		border: none !important;
42		box-shadow: none !important;
43		height: 1em !important;
44		width: 1em !important;
45		margin: 0 0.07em !important;
46		vertical-align: -0.1em !important;
47		background: none !important;
48		padding: 0 !important;
49	}
50/*# sourceURL=wp-emoji-styles-inline-css */
51</style>
52<style id="wp-block-library-inline-css">
53:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
53--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
54
55/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
56</style>
57<style id="classic-theme-styles-inline-css">
58/*! This file is auto-generated */
59.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
60/*# sourceURL=/wp-includes/css/classic-themes.min.css */
61</style>
62
63<style id="global-styles-inline-css">
64:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
640) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
64.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
65/*# sourceURL=global-styles-inline-css */
66</style>
67
68<link rel='stylesheet' id='contact-form-7-css' href='https://stfundraising.com/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=6.2' media='all' />
69<link rel='stylesheet' id='font-awesome-6-css' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css?ver=6.4.2' media='all' />
70<link rel='stylesheet' id='bk-responsive-css' href='https://stfundraising.com/wp-content/themes/stephenthomas/css/responsive.css?ver=1.0.0' media='all' />
71<link rel='stylesheet' id='bk-style-css' href='https://stfundraising.com/wp-content/themes/stephenthomas/style.css?ver=7.1.3' media='all' />
72<link rel='stylesheet' id='js_composer_custom_css-css' href='//stfundraising.com/wp-content/uploads/js_composer/custom.css?ver=9.0.1' media='all' />
73<script id="jquery-core-js" src="https://stfundraising.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 73
73
74<script id="jquery-migrate-js" src="https://stfundraising.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 74
74
75<script>/* Dynamic Video Backgrounds */
76document.addEventListener('DOMContentLoaded', () => {
77  // Find all rows that should have a video background
78  const videoRows = document.querySelectorAll('.mp4-bg-video-row');
79  
80  videoRows.forEach(row => {
81    // Get the specific video URL for this row
82    const videoUrl = row.getAttribute('data-bg-video');
83    
84    //console.log(videoUrl);
85    
86    // Ensure the URL exists and we haven't already injected a video
87    if (videoUrl && !row.querySelector('.custom-video-background')) {
88      row.insertAdjacentHTML('afterbegin', `
89        <video autoplay muted loop playsinline class="custom-video-background">
90          <source src="${videoUrl}" type="video/mp4">
91        </video>
92      `);
93    }
94  });
95});
96
97/* Home Hero */
98document.addEventListener('DOMContentLoaded', () => {
99  const row = document.querySelector('.mp4-bg-row'); //  singular, returns one element
100
101  const videoUrl_new = videoBgData.videoUrl_bg;
102
103  if (row && !row.querySelector('.custom-video-background')) {
104    row.insertAdjacentHTML('afterbegin', `
105      <video autoplay muted loop playsinline class="custom-video-background">
106        <source src="${videoUrl_new}" type="video/mp4">
107      </video>
108    `);
109  }
110});
111
112/* Result Section */
113document.addEventListener('DOMContentLoaded', () => {
114  const row = document.querySelector('.mp4-bg-row-result'); //  singular, returns one element
115
116  const videoUrl_new = videoBgData_result.videoUrl_bg_result;
117
118  if (row && !row.querySelector('.custom-video-background')) {
119    row.insertAdjacentHTML('afterbegin', `
120      <video autoplay muted loop playsinline class="custom-video-background">
121        <source src="${videoUrl_new}" type="video/mp4">
122      </video>
123    `);
124  }
125});
126
127/* Result Details Section 
128//document.addEventListener('DOMContentLoaded', () => {
129  // Find all rows that should have a video background
130  //const videoRows = document.querySelectorAll('.mp4-bg-row-result-details');
131  
132  //const videoUrl_new_r = videoBgData_result_details.videoUrl_bg_result_details;
133  
134  //videoRows.forEach(row => {
135
136    //console.log(videoUrl);
137    
138    // Ensure the URL exists and we haven't already injected a video
139    if (videoRows && !row.querySelector('.custom-video-background')) {
140      row.insertAdjacentHTML('afterbegin', `
141        <video autoplay muted loop playsinline class="custom-video-background">
142          <source src="${videoUrl_new_r}" type="video/mp4">
143        </video>
144      `);
145    }
146  });
147});*/
148
149
150/*Webinars Dynamic Video Backgrounds */
151document.addEventListener('DOMContentLoaded', () => {
152  // Find all rows that should have a video background
153  const videoRows = document.querySelectorAll('.mp4-bg-video-row-webinars');
154  
155  videoRows.forEach(row => {
156    // Get the specific video URL for this row
157    const videoUrl = row.getAttribute('data-bg-video');
158     console.log(videoUrl);
159    // Ensure the URL exists and we haven't already injected a video
160    if (videoUrl && !row.querySelector('.custom-video-background')) {
161      row.insertAdjacentHTML('afterbegin', `
162        <video autoplay muted loop playsinline class="custom-video-background">
163          <source src="${videoUrl}" type="video/mp4">
164        </video>
165      `);
166    }
167  });
168});
169
170/*Webinars Dynamic Video Backgrounds */
171document.addEventListener('DOMContentLoaded', () => {
172  // Find all rows that should have a video background
173  const videoRows = document.querySelectorAll('.mp4-bg-video-row-career');
174  
175  videoRows.forEach(row => {
176    // Get the specific video URL for this row
177    const videoUrl = row.getAttribute('data-bg-video');
178     console.log(videoUrl);
179    // Ensure the URL exists and we haven't already injected a video
180    if (videoUrl && !row.querySelector('.custom-video-background')) {
181      row.insertAdjacentHTML('afterbegin', `
182        <video autoplay muted loop playsinline class="custom-video-background">
183          <source src="${videoUrl}" type="video/mp4">
184        </video>
185      `);
186    }
187  });
188});
189
190/*Blog Dynamic Video Backgrounds */
191document.addEventListener('DOMContentLoaded', () => {
192  // Find all rows that should have a video background
193  const videoRows = document.querySelectorAll('.mp4-bg-video-row-blog');
194  
195  videoRows.forEach(row => {
196    // Get the specific video URL for this row
197    const videoUrl = row.getAttribute('data-bg-video');
198     console.log(videoUrl);
199    // Ensure the URL exists and we haven't already injected a video
200    if (videoUrl && !row.querySelector('.custom-video-background')) {
201      row.insertAdjacentHTML('afterbegin', `
202        <video autoplay muted loop playsinline class="custom-video-background">
203          <source src="${videoUrl}" type="video/mp4">
204        </video>
205      `);
206    }
207  });
208});
209
210/*Contact Us Page Dynamic Video Backgrounds */
211document.addEventListener('DOMContentLoaded', () => {
212  // Find all rows that should have a video background
213  const videoRows = document.querySelectorAll('.mp4-bg-video-row-contact');
214  
215  videoRows.forEach(row => {
216    // Get the specific video URL for this row
217    const videoUrl = row.getAttribute('data-bg-video');
218     console.log(videoUrl);
219    // Ensure the URL exists and we haven't already injected a video
220    if (videoUrl && !row.querySelector('.custom-video-background')) {
221      row.insertAdjacentHTML('afterbegin', `
222        <video autoplay muted loop playsinline class="custom-video-background">
223          <source src="${videoUrl}" type="video/mp4">
224        </video>
225      `);
226    }
227  });
228});
229
230
231/*go-to-down second section*/
232document.addEventListener("DOMContentLoaded", function() {
233
234  const trigger = document.querySelector('a[href="#go-to-down"]');
235
236  if (trigger) {
237    trigger.addEventListener("click", function(e) {
238      e.preventDefault();
239
240      const target = document.querySelector("#go-to-down");
241
242      if (target) {
243        const targetPosition = target.getBoundingClientRect().top + window.pageYOffset - 130;
244
245        window.scrollTo({
246          top: targetPosition,
247          behavior: "smooth"
248        });
249      }
250    });
251  }
252
253});
254
255/*go-to-down second section*/
256
257/* in active services submenu on page load*/
258document.addEventListener("DOMContentLoaded", () => {
259    // 1. Select all links inside the sub-menu that have the nav-active class
260    const activeSubLinks = document.querySelectorAll('.sub-menu .nav-link.nav-active');
261    
262    // 2. Loop through and remove the class
263    activeSubLinks.forEach(link => {
264        link.classList.remove('nav-active');
265    });
266});
267
268document.addEventListener("click", function (e) {
269    if (e.target.classList.contains("attachment-thumbnail")) {
270        document.querySelector(".page-container-second").classList.add("!-mt-6");
271    }
272});
273
274document.addEventListener("DOMContentLoaded", function () {
275    const results = document.querySelector("#results");
276    const services = document.querySelector("#services");
277    if (!results || !services) return;
278
279    let isFirstCallback = true;
280
281    const observer = new IntersectionObserver(
282        ([entry]) => {
283            if (isFirstCallback) {
284                isFirstCallback = false;
285                return; // ignore the initial, load-time callback
286            }
287            if (entry.intersectionRatio < 0.5) {
288                services.scrollIntoView({
289                    behavior: "smooth",
290                    block: "start",
291                });
292            }
293        },
294        {
295            threshold: [0.5]
296        }
297    );
298
299    observer.observe(results);
300});
301
302document.addEventListener('DOMContentLoaded', () => {
303    // 1. Get all menu links that point to an anchor
304    const menuLinks = document.querySelectorAll('.main-navigation a[href^="#"]');
305    
306    // 2. Track the sections these links point to
307    const sections = [];
308    menuLinks.forEach(link => {
309        const targetId = link.getAttribute('href');
310        if (targetId !== '#') {
311            const section = document.querySelector(targetId);
312            if (section) sections.push(section);
313        }
314    });
315
316    // 3. Intersection Observer Options
317    const options = {
318        root: null,
319        rootMargin: '-20% 0px -60% 0px', // Adjusts the "sweet spot" in the viewport
320        threshold: 0
321    };
322
323    // 4. Callback function when section enters viewport
324    const observer = new IntersectionObserver((entries) => {
325        entries.forEach(entry => {
326            if (entry.isIntersecting) {
327                const id = entry.target.getAttribute('id');
328                
329                // Remove active class from all links
330                menuLinks.forEach(link => link.classList.remove('active-menu-item'));
331                
332                // Add active class to the current link
333                const activeLink = document.querySelector(`.main-navigation a[href="#${id}"]`);
334                if (activeLink) {
335                    activeLink.classList.add('active-menu-item');
336                }
337            }
338        });
339    }, options);
340
341    // 5. Observe each section
342    sections.forEach(section => observer.observe(section));
343});
344
345document.addEventListener('DOMContentLoaded', () => {
346  var container = document.querySelector('.snap-container');
347  var sections = Array.prototype.slice.call(document.querySelectorAll('.snap-section'));
348  var SNAP_DURATION = 1400; // ms — raise to slow down further
349  var isSnapping = false, wheelTimeout = null;
350
351  function easeInOutCubic(t) {
352    return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
353  }
354
355  function currentIndex() {
356    var pos = container.scrollTop, closest = 0, closestDist = Infinity;
357    sections.forEach(function (sec, i) {
358      var dist = Math.abs(sec.offsetTop - pos);
359      if (dist < closestDist) { closestDist = dist; closest = i; }
360    });
361    return closest;
362  }
363
364  function snapToIndex(index) {
365    if (index < 0 || index >= sections.length) return;
366    var startY = container.scrollTop, endY = sections[index].offsetTop;
367    var distance = endY - startY;
368    if (distance === 0) return;
369    isSnapping = true;
370    var startTime = null;
371    function step(ts) {
372      if (startTime === null) startTime = ts;
373      var progress = Math.min((ts - startTime) / SNAP_DURATION, 1);
374      container.scrollTop = startY + distance * easeInOutCubic(progress);
375      if (progress < 1) requestAnimationFrame(step);
376      else isSnapping = false;
377    }
378    requestAnimationFrame(step);
379  }
380
381  // Walk up from the event target; if any ancestor (up to container) is
382  // independently scrollable, let the browser handle the wheel event
383  // natively instead of hijacking it for section-snapping.
384  function isInsideScrollableElement(target) {
385    var el = target;
386    while (el && el !== container && el !== document.body) {
387      var style = window.getComputedStyle(el);
388      var canScroll = (style.overflowY === 'auto' || style.overflowY === 'scroll');
389      if (canScroll && el.scrollHeight > el.clientHeight) {
390        return true;
391      }
392      el = el.parentElement;
393    }
394    return false;
395  }
396
397  container.addEventListener('wheel', function (e) {
398    if (isInsideScrollableElement(e.target)) return;
399
400    var idx = currentIndex();
401    var targetIdx = e.deltaY > 0 ? idx + 1 : idx - 1;
402
403    if (targetIdx < 0 || targetIdx >= sections.length) return;
404
405    e.preventDefault();
406    if (isSnapping) return;
407
408    clearTimeout(wheelTimeout);
409    wheelTimeout = setTimeout(function () {
410      snapToIndex(targetIdx);
411    }, 10);
412  }, { passive: false });
413
414  // Also handle the case where the modal is appended outside .snap-container
415  // (e.g. directly under <body>) — attach the same guard at the document level.
416  document.addEventListener('wheel', function (e) {
417    if (!container.contains(e.target) && isInsideScrollableElement(e.target)) {
418      // native scroll happens automatically; nothing to do
419    }
420  }, { passive: true });
421});</script>
421<link rel="https://api.w.org/" href="https://stfundraising.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://stfundraising.com/wp-json/wp/v2/pages/395" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://stfundraising.com/xmlrpc.php?rsd" />
422<link rel="canonical" href="https://stfundraising.com/contact-us/" />
423<link rel='shortlink' href='https://stfundraising.com/?p=395' />
424<meta name="generator" content="Redux 4.5.15" />    
424<script>
425        const videoBgData = {
426            videoUrl_bg: ""
427        };
428    </script>
428
429        
429<script>
430        const videoBgData_result = {
431            videoUrl_bg_result: ""
432        };
433    </script>
433
434        
434<script>
435        const videoBgData_result_details = {
436            videoUrl_bg_result_details: ""
437        };
438    </script>
438
439    <meta name="generator" content="Powered by WPBakery Page Builder - drag and drop page builder for WordPress."/>
440<link rel="icon" href="https://stfundraising.com/wp-content/uploads/2026/04/ST-ICON-HEADER.png" sizes="32x32" />
441<link rel="icon" href="https://stfundraising.com/wp-content/uploads/2026/04/ST-ICON-HEADER.png" sizes="192x192" />
442<link rel="apple-touch-icon" href="https://stfundraising.com/wp-content/uploads/2026/04/ST-ICON-HEADER.png" />
443<meta name="msapplication-TileImage" content="https://stfundraising.com/wp-content/uploads/2026/04/ST-ICON-HEADER.png" />
444<noscript><style> .wpb_animate_when_almost_visible { opacity: 1; }</style></noscript>
445    <!-- STella! logo: slide/fade in next to the ST logo (Digital Services section only) -->
446    <style>
447        .stella-wrap {
448            display: inline-flex;
449            align-items: center;
450            overflow: hidden;
451            max-width: 0;                 /* collapsed: ST logo is alone */
452            transition: max-width .6s ease;
453        }
454        .stella-logo {
455            height: 73px;                 /* matches ST logo (81x73) */
456            width: auto;
457            max-width: none !important;   /* stop Tailwind img max-width:100% from squashing it */
458            flex-shrink: 0;
459            margin-left: 14px;
460            opacity: 0;
461            transform: translateX(-18px);
462            transition: opacity .6s ease, transform .6s ease;
463        }
464        body.show-stella .stella-wrap { max-width: 260px; }
465        body.show-stella .stella-logo { opacity: 1; transform: translateX(0); }
466
467        @media (max-width: 640px) {
468            .stella-logo { height: 48px; margin-left: 8px; }
469            body.show-stella .stella-wrap { max-width: 160px; }
470        }
471        @media (prefers-reduced-motion: reduce) {
472            .stella-wrap, .stella-logo { transition: none; }
473        }
474		
475    </style>
476</head>
477
478<body class="wp-singular page-template page-template-page-contact page-template-page-contact-php page page-id-395 wp-custom-logo wp-theme-stephenthomas wpb-js-composer js-comp-ver-9.0.1 vc_responsive">
479    	
480	<div id="loader-wrapper">
481		<img src="https://stfundraising.com/wp-content/themes/stephenthomas/images/Spinner-1s-200px.gif" alt="Loading..." class="loader-img">
482	</div>
483	
484    <header 
485    id="mainHeader" 
486    class="fixed top-0 left-0 w-full z-50 sm:p-0 p-3 bg-transparent backdrop-blur-0 transition-all duration-500"
487>
488        <div class="page-container mx-auto px-4 lg:px-12 !py-4 flex items-center justify-between">
489        <div class="flex items-center">
490
491            <a href="https://stfundraising.com/" class="rounded-md focus:outline-none focus:ring-4 focus:ring-[#A1409E]"> 
492                <img class="logo-header max-h-[48px] w-auto md:w-[revert-layer] md:max-h-[81px]" src="https://stfundraising.com/wp-content/uploads/2026/09/st-logo_2.png" alt="Logo">
493            </a>
494
495            <!-- STella! logo: only revealed on the Digital Services section -->
496            <span class="stella-wrap" aria-hidden="true">
497                <img class="stella-logo"
498                     src="https://stintegrated.wpenginepowered.com/wp-content/uploads/2026/09/st-logo_lockup_reverse-1.png"
499                     alt="STella!" decoding="async">
500            </span>
501
502        </div>
503
504<div class="flex justify-end">
505
506
507
508
509        <nav
510            class="hidden md:flex items-center bg-white rounded-full p-1 ml-2 shadow-sm border border-gray-100 space-x-1 navigation-buttons">
511            <ul id="menu-main-menu" class="main-menu"><li id="menu-item-40" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-40"><a href="#hero" class="nav-link">Home</a></li>
512<li id="menu-item-41" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-41"><a href="#results" class="nav-link">Results</a></li>
513<li id="menu-item-42" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-42"><a href="#services" class="nav-link">Services</a>
514<ul class="sub-menu">
515	<li id="menu-item-358" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-358"><a href="/#integrated" class="nav-link">Integrated</a></li>
516	<li id="menu-item-357" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-357"><a href="/#digital" class="nav-link">Digital</a></li>
517	<li id="menu-item-356" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-356"><a href="/#direct" class="nav-link">Direct Mail</a></li>
518	<li id="menu-item-355" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-355"><a href="/#data" class="nav-link">Data</a></li>
519	<li id="menu-item-354" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-354"><a href="/#strategy" class="nav-link">Strategy</a></li>
520	<li id="menu-item-353" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-353"><a href="/#creative" class="nav-link">Creative</a></li>
521</ul>
522</li>
523<li id="menu-item-169" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-169"><a href="#insights" class="nav-link">Insights</a>
524<ul class="sub-menu">
525	<li id="menu-item-3710" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3710"><a href="/fundraisefwd/" class="nav-link">Fundraise FWD>></a></li>
526	<li id="menu-item-459" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-459"><a href="https://stfundraising.com/blog/" class="nav-link">Blog</a></li>
527</ul>
528</li>
529<li id="menu-item-527" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-527"><a href="https://stfundraising.com/team/" class="nav-link">Team</a></li>
530<li id="menu-item-528" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-395 current_page_item menu-item-528"><a href="https://stfundraising.com/contact-us/" aria-current="page" class="nav-link nav-active">Contact</a></li>
531</ul>        </nav>
532        <button
533    id="openMenu"
534    aria-label="Open menu"
535    class="md:hidden w-12 h-12 bg-[#A1409E] rounded-full flex items-center justify-center text-white text-2xl
536    focus:outline-none focus:ring-4 focus:ring-white focus:ring-offset-2 focus:ring-offset-[#A1409E]"
537>
538            <i class="fa-solid fa-bars text-white"></i>
539        </button>
540		</div>
541		</div>
542
543    </header>
544
545    <div id="mobileMenu"
546    class="fixed inset-0 bg-white z-50 transform -translate-y-full transition-transform duration-500 ease-in-out overflow-y-auto">
547
548			<div class="relative flex items-center justify-center p-6 border-b border-gray-200">
549
550				<a href="https://stfundraising.com/" class="rounded-md focus:outline-none focus:ring-4 focus:ring-[#A1409E]">
551						<img src="https://stfundraising.com/wp-content/uploads/2026/09/st-logo_2.png" alt="Logo" class="h-[10vh]">
552					</a>
553
554				<button
555    id="closeMenu"
556    aria-label="Close menu"
557    class="text-3xl leading-normal rounded-md
558    focus:outline-none focus:ring-4 focus:ring-[#A1409E] absolute right-[10px] top-[10px]"
559>
560					<i class="fa-solid fa-xmark"></i>
561				</button>
562
563			</div>
564
565			<div class="p-6">
566
567				<nav class="flex flex-col space-y-6 text-lg font-medium">
568					<ul class="mobile-menu"><li id="menu-item-173" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-173"><a href="#hero" class="nav-link">Home</a></li>
569<li id="menu-item-174" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174"><a href="#results" class="nav-link">Results</a></li>
570<li id="menu-item-175" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-175"><a href="/#services" class="nav-link">Services</a><button class="submenu-toggle" aria-label="Toggle submenu"><i class="fa-solid fa-chevron-down"></i></button>
571<ul class="sub-menu">
572	<li id="menu-item-388" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-388"><a href="/#integrated" class="nav-link">Integrated</a></li>
573	<li id="menu-item-389" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-389"><a href="/#digital" class="nav-link">Digital</a></li>
574	<li id="menu-item-390" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-390"><a href="/#direct" class="nav-link">Direct Mail</a></li>
575	<li id="menu-item-391" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-391"><a href="/#data" class="nav-link">Data</a></li>
576	<li id="menu-item-392" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-392"><a href="/#strategy" class="nav-link">Strategy</a></li>
577	<li id="menu-item-393" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-393"><a href="/#creative" class="nav-link">Creative</a></li>
578</ul>
579</li>
580<li id="menu-item-176" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-176"><a href="#insights" class="nav-link">Insights</a><button class="submenu-toggle" aria-label="Toggle submenu"><i class="fa-solid fa-chevron-down"></i></button>
581<ul class="sub-menu">
582	<li id="menu-item-3841" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3841"><a href="https://stephenthomas.ca/rsvp/fundraisefwd/" class="nav-link">Fundraise FWD>></a></li>
583	<li id="menu-item-691" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-691"><a href="/blog" class="nav-link">Blog</a></li>
584</ul>
585</li>
586<li id="menu-item-525" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-525"><a href="https://stfundraising.com/team/" class="nav-link">Team</a></li>
587<li id="menu-item-526" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-395 current_page_item menu-item-526"><a href="https://stfundraising.com/contact-us/" aria-current="page" class="nav-link nav-active">Contact</a></li>
588</ul>				</nav>
589
590			</div>
591
592	</div>
593
594<script>
595window.stActiveKeys = [];
596
597// true when a menu link points at this detail page's section, e.g. "#digital", "/#digital",
598// "/services/digital" or "#results" / "/results"
599window.stIsKeyMatch = function (link) {
600    const keys = (window.stActiveKeys || []).map(function (k) { return String(k).toLowerCase(); });
601    if (!keys.length) return false;
602
603    const raw = link.getAttribute('href');
604    if (!raw || raw === '#') return false;
605
606    let url;
607    try { url = new URL(raw, window.location.origin); } catch (e) { return false; }
608    if (url.origin !== window.location.origin) return false;
609
610    const hash = url.hash.replace('#', '').toLowerCase();
611    if (hash && keys.indexOf(hash) !== -1) return true;
612
613    const segs = url.pathname.split('/').filter(Boolean).map(function (x) { return x.toLowerCase(); });
614    if (!hash && segs.length && keys.indexOf(segs[segs.length - 1]) !== -1) return true;
615
616    return false;
617};
618</script>
618
619
620<script>
621document.addEventListener("DOMContentLoaded", function () {
622
623    // --- MOBILE MENU OPEN / CLOSE ---
624    const mobileMenu = document.getElementById("mobileMenu");
625    const openMenuBtn = document.getElementById("openMenu");
626    const closeMenuBtn = document.getElementById("closeMenu");
627
628    let scrollPosition = 0;
629
630function openMobileMenu() {
631    // Store current scroll position
632    scrollPosition = window.scrollY;
633
634    mobileMenu.classList.remove("-translate-y-full");
635    mobileMenu.classList.add("translate-y-0");
636
637    // Lock background scroll
638    document.body.style.overflow = "hidden";
639    document.body.style.position = "fixed";
640    document.body.style.top = `-${scrollPosition}px`;
641    document.body.style.left = "0";
642    document.body.style.right = "0";
643    document.body.style.width = "100%";
644}
645
646function closeMobileMenu() {
647    mobileMenu.classList.remove("translate-y-0");
648    mobileMenu.classList.add("-translate-y-full");
649
650    // Restore body styles
651    document.body.style.overflow = "";
652    document.body.style.position = "";
653    document.body.style.top = "";
654    document.body.style.left = "";
655    document.body.style.right = "";
656    document.body.style.width = "";
657
658    // Restore previous scroll position
659    window.scrollTo(0, scrollPosition);
660}
661
662    if (openMenuBtn) openMenuBtn.addEventListener("click", openMobileMenu);
663    if (closeMenuBtn) closeMenuBtn.addEventListener("click", closeMobileMenu);
664	
665	
666	// Hide any icon inside the parent <a> of has-children items (duplicate chevron)
667	document.querySelectorAll('#mobileMenu .menu-item-has-children > a i, #mobileMenu .menu-item-has-children > a svg').forEach(function(icon) {
668		icon.style.display = 'none';
669	});
670
671	// --- MOBILE SUBMENU ACCORDION TOGGLE ---
672	document.querySelectorAll('#mobileMenu .menu-item-has-children').forEach(function (item) {
673		const toggleBtn = item.querySelector(':scope > .submenu-toggle');
674		const subMenu   = item.querySelector(':scope > .sub-menu');
675
676		if (!toggleBtn || !subMenu) return;
677
678		// Always start closed
679		subMenu.style.overflow   = 'hidden';
680		subMenu.style.maxHeight  = '0';
681		subMenu.style.transition = 'max-height 0.35s ease';
682
683		toggleBtn.addEventListener('click', function (e) {
684			e.preventDefault();
685			e.stopPropagation();
686
687			const isOpen = item.classList.contains('submenu-open');
688
689			// Close ALL open submenus
690			document.querySelectorAll('#mobileMenu .menu-item-has-children.submenu-open').forEach(function (openItem) {
691				openItem.classList.remove('submenu-open');
692				const openSub = openItem.querySelector(':scope > .sub-menu');
693				if (openSub) openSub.style.maxHeight = '0';
694				const openIcon = openItem.querySelector(':scope > .submenu-toggle i');
695				if (openIcon) openIcon.style.transform = '';
696			});
697
698			// If it WAS closed, open it now
699			if (!isOpen) {
700				item.classList.add('submenu-open');
701				subMenu.style.maxHeight = (subMenu.scrollHeight + 30) + 'px';
702				const icon = toggleBtn.querySelector('i');
703				if (icon) icon.style.transform = 'rotate(180deg)';
704			}
705		});
706	});
707
708    // Close drawer when any mobile menu link is clicked (but NOT parent toggle links)
709    // Close drawer only when navigating to a destination page
710// --- MOBILE MENU ROW CLICK ---
711// Clicking anywhere on a parent menu row opens/closes its submenu.
712// Clicking an actual submenu link navigates normally.
713
714document.querySelectorAll('#mobileMenu .menu-item-has-children').forEach(function (item) {
715
716    const toggleBtn = item.querySelector(':scope > .submenu-toggle');
717    const subMenu = item.querySelector(':scope > .sub-menu');
718
719    if (!subMenu) return;
720
721    item.addEventListener('click', function (e) {
722
723        // If click happened inside the submenu itself,
724        // don't toggle the parent.
725        if (subMenu.contains(e.target)) {
726            return;
727        }
728
729        // Prevent parent link navigation
730        e.preventDefault();
731
732        // Use the existing toggle button logic
733        if (toggleBtn) {
734            toggleBtn.click();
735        }
736    });
737});
738
739
740// Close drawer when normal menu/submenu links are clicked
741// --- MOBILE MENU DESTINATION LINKS ---
742document.querySelectorAll('#mobileMenu a').forEach(function (link) {
743
744    link.addEventListener('click', function (e) {
745
746        const parentLi = link.parentElement;
747
748        // Parent menu item with children:
749        // Do NOT navigate when clicking the parent row.
750        if (
751            parentLi &&
752            parentLi.classList.contains('menu-item-has-children') &&
753            parentLi.parentElement.classList.contains('mobile-menu')
754        ) {
755            return;
756        }
757
758        // This is an actual submenu/destination link
759        const href = link.getAttribute('href');
760
761        if (!href || href === '#') {
762            return;
763        }
764
765        // Stop the browser from trying to navigate
766        // while the mobile menu is still fixed/open.
767        e.preventDefault();
768        e.stopPropagation();
769
770        // Close the mobile menu first
771        closeMobileMenu();
772
773        // Wait until the body is unlocked, then navigate.
774        setTimeout(function () {
775    const targetUrl = new URL(link.href, window.location.origin);
776
777    // Same page + hash
778    if (
779        targetUrl.origin === window.location.origin &&
780        targetUrl.pathname.replace(/\/$/, '') ===
781        window.location.pathname.replace(/\/$/, '') &&
782        targetUrl.hash
783    ) {
784        window.location.hash = targetUrl.hash;
785
786        // Force scroll after mobile browser finishes updating the URL
787        setTimeout(function () {
788            const target = document.querySelector(targetUrl.hash);
789
790            if (target) {
791                target.scrollIntoView({
792                    behavior: "smooth",
793                    block: "start"
794                });
795            }
796        }, 50);
797
798        return;
799    }
800
801    // Normal page navigation
802    window.location.href = targetUrl.href;
803
804}, 100);
805    });
806});
807    // --- YOUR EXISTING HEADER BLUR SCRIPT ---
808    // --- HEADER FROSTED BACKGROUND ONLY WHILE ACTIVELY SCROLLING DOWN ---
809// --- HEADER FROSTED BACKGROUND WHILE ACTIVELY SCROLLING ---
810const header = document.getElementById("mainHeader");
811
812let scrollTimeout;
813
814function showHeaderBlur() {
815    header.style.backgroundColor = "rgba(255, 255, 255, 0.05)";
816    header.style.backdropFilter = "blur(12px)";
817    header.style.webkitBackdropFilter = "blur(12px)";
818    header.style.boxShadow = "0 8px 32px rgba(0, 0, 0, 0.15)";
819}
820
821function removeHeaderBlur() {
822    header.style.backgroundColor = "transparent";
823    header.style.backdropFilter = "blur(0px)";
824    header.style.webkitBackdropFilter = "blur(0px)";
825    header.style.boxShadow = "none";
826}
827
828window.addEventListener("scroll", function () {
829
830    // Don't show frosted effect at the very top
831    if (window.scrollY <= 50) {
832        removeHeaderBlur();
833        clearTimeout(scrollTimeout);
834        return;
835    }
836
837    // User is actively scrolling — UP or DOWN
838    showHeaderBlur();
839
840    // Remove frosted effect when scrolling stops
841    clearTimeout(scrollTimeout);
842
843    scrollTimeout = setTimeout(function () {
844        removeHeaderBlur();
845    }, 150);
846});
847
848    // --- CONDITIONAL URL FIXER, SCROLL SPY, & PARENT HIGHLIGHTER ---
849    const menuLinks = document.querySelectorAll('.navigation-buttons a, .mobile-menu a');
850    const activeClasses = ['bg-[#004a88]', 'text-white', 'rounded-full', 'px-4', 'py-2'];
851    
852        // --- 2. CODE FOR INNER PAGES (NOT HOME) ---
853    const currentPath = window.location.pathname.replace(/\/$/, ''); // strip trailing slash
854
855    menuLinks.forEach(link => {
856        const href = link.getAttribute('href');
857        // Format anchor links so they point back to home correctly
858        if (href && href.startsWith('#') && href !== '#') {
859            link.setAttribute('href', '/' + href);
860        }
861
862        let isActive = false;
863
864        // Native WordPress current-item classes (added extra ones: current_page_parent, current-menu-parent, current_page_ancestor)
865        const liItem = link.closest('.menu-item');
866        if (liItem && (
867            liItem.classList.contains('current-menu-item') ||
868            liItem.classList.contains('current-menu-ancestor') ||
869            liItem.classList.contains('current_page_item') ||
870            liItem.classList.contains('current_page_parent') ||
871            liItem.classList.contains('current-menu-parent') ||
872            liItem.classList.contains('current_page_ancestor')
873        )) {
874            isActive = true;
875        }
876
877        // Detail pages: /services/<slug>/ -> that service (+ Services parent), /results/<slug>/ -> Results
878        if (!isActive && window.stIsKeyMatch(link)) {
879            isActive = true;
880        }
881
882        // NEW: URL-prefix fallback — highlights e.g. /blog/ when on /blog/some-post/
883        if (!isActive && href) {
884            try {
885                const linkPath = new URL(href, window.location.origin).pathname.replace(/\/$/, '');
886                if (linkPath && linkPath !== '' && currentPath.startsWith(linkPath + '/')) {
887                    isActive = true;
888                }
889            } catch (e) {}
890        }
891
892        if (isActive) {
893            link.classList.add(...activeClasses);
894
895            // Highlight parental trees on inner page pathways
896            const parentLi = link.closest('.menu-item')?.parentElement.closest('.menu-item-has-children');
897            if (parentLi) {
898                const parentLink = parentLi.querySelector('a');
899                if (parentLink) {
900                    parentLink.classList.add(...activeClasses);
901                }
902            }
903        }
904    });
905	
906    // --- SHOW STELLA! LOGO ONLY ON THE DIGITAL SERVICES SECTION ---
907    // The services shortcode renders every service as:
908    //   <div id="{post-title-slug}" class="snap-section"> <section class="mp4-bg-video-row"> <h2>{title}</h2> ...
909    // A section counts as "Digital" if its id OR its hero <h2> title contains a keyword below.
910    const DIGITAL_KEYWORDS = ['digital'];
911    const stellaWrap = document.querySelector('.stella-wrap');
912
913    // Server-side flag: on the Digital service page the logo is visible from the start
914    if (stellaWrap && document.body.classList.contains('show-stella')) {
915        stellaWrap.setAttribute('aria-hidden', 'false');
916    }
917
918    function isDigitalSection(section) {
919        const heroTitle = section.querySelector('h2');
920        const haystack = ((section.id || '') + ' ' + (heroTitle ? heroTitle.textContent : '')).toLowerCase();
921        return DIGITAL_KEYWORDS.some(function (k) { return haystack.indexOf(k) !== -1; });
922    }
923
924    function initStella() {
925        const allSections = Array.from(document.querySelectorAll('.snap-container .snap-section, .snap-section'));
926        const digitalSections = allSections.filter(function (s, i, arr) {
927            return arr.indexOf(s) === i && isDigitalSection(s);
928        });
929
930        // Debug helper: shows every service section and which one matched
931        console.log('[STella] sections:', allSections.map(function (s) {
932            const h = s.querySelector('h2');
933            return s.id + ' | ' + (h ? h.textContent.trim() : '') + (isDigitalSection(s) ? '  <== MATCH' : '');
934        }));
935
936        if (!stellaWrap || !digitalSections.length) return false;
937
938        const visible = new Set();
939
940        const observer = new IntersectionObserver(function (entries) {
941            entries.forEach(function (entry) {
942                if (entry.isIntersecting) visible.add(entry.target);
943                else visible.delete(entry.target);
944            });
945            const show = visible.size > 0;
946            document.body.classList.toggle('show-stella', show);
947            stellaWrap.setAttribute('aria-hidden', show ? 'false' : 'true');
948        }, { rootMargin: '-45% 0px -45% 0px', threshold: 0 });
949
950        digitalSections.forEach(function (s) { observer.observe(s); });
951        return true;
952    }
953
954    // Try now; if the sections aren't in the DOM yet, retry once everything has loaded
955    if (!initStella()) {
956        window.addEventListener('load', initStella, { once: true });
957    }
958
959});
960</script>
960
961<section class="min-h-screen flex flex-col items-center justify-center px-4 pt-28 pb-12 relative set-result-scrolling mp4-bg-video-row-contact" data-bg-video="https://stfundraising.com/wp-content/uploads/2026/09/full-site_background-video.mov">
962
963
964  <div class="relative z-10 w-full max-w-2xl min-[1921px]:max-w-4xl flex flex-col items-center">
965
966    		<h1 class="text-white text-3xl sm:text-4xl font-normal text-center !leading-normal mb-8 tracking-tight">
967							Ready to grow<br/>
968						
969							<span>your fundraising?</span>
970					</h1>
971	
972    <!-- Card -->
973    <div class="w-full bg-[#F3F3F3] rounded-md shadow-2xl p-6 sm:p-10 grid grid-cols-1 sm:grid-cols-2">
974
975      
976		<div class="flex flex-col gap-4">
977
978			<!-- Image upload box -->
979			<label for="photoUpload" class="upload-box">
980									<img
981						id="previewImg"
982						src="https://stfundraising.com/wp-content/uploads/2026/10/scott-jeffries.avif"
983						alt="Scott Jeffries"
984						class="preview-image"
985						width="250"
986						height="200"
987					/>
988							</label>
989
990			<!-- Person Info -->
991			<div class="flex flex-col gap-1">
992									<p class="text-[#004A86] font-semibold text-lg !leading-normal">Scott Jeffries</p>
993								
994									<p class="text-[#666666] text-base !leading-normal">Senior Director, Strategic Growth</p>
995								
996									<div class="mt-4 flex flex-col gap-1">
997													<a href="mailto:[email protected]" class="text-[#666666] text-base !leading-normal flex items-center gap-1.5 hover:text-[#004a88] transition-colors">
998								<svg class="w-3.5 h-3.5 text-gray-400 flex-shrink-0" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
999									<rect x="2" y="4" width="20" height="16" rx="2"/><path d="M2 7l10 7 10-7"/>
1000								</svg>
1001								[email protected]							</a>
1002						
1003													<a href="tel:4169336760" class="text-gray-600 text-base flex !leading-normal items-center gap-1.5 hover:text-[#004a88] transition-colors">
1004								<svg class="w-3.5 h-3.5 text-gray-400 flex-shrink-0" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" viewBox="0 0 24 24">
1005									<path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 10.8 19.79 19.79 0 012 2.22 2 2 0 014 .02h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 7.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 14.9z"/>
1006								</svg>
1007								416‑933‑6760							</a>
1008											</div>
1009							</div>
1010		</div>
1011
1012      <!-- RIGHT: Form -->
1013      <div class="flex flex-col">
1014        <p class="text-[#666666] text-lg mb-6 !leading-normal">
1015          Send us your contact information and we'll get the conversation started.
1016        </p>
1017
1018				
1019<div class="wpcf7 no-js" id="wpcf7-f595-o1" lang="en-US" dir="ltr" data-wpcf7-id="595">
1020<div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div>
1021<form action="/contact-us/#wpcf7-f595-o1" method="post" class="wpcf7-form init" aria-label="Contact form" novalidate="novalidate" data-status="init">
1022<fieldset class="hidden-fields-container"><input type="hidden" name="_wpcf7" value="595" /><input type="hidden" name="_wpcf7_version" value="6.2" /><input type="hidden" name="_wpcf7_locale" value="en_US" /><input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f595-o1" /><input type="hidden" name="_wpcf7_container_post" value="0" /><input type="hidden" name="_wpcf7_posted_data_hash" value="" />
1023</fieldset>
1024<!-- First Name -->
1025<div class="form-group-contact">
1026	<p><label>First Name</label><span class="wpcf7-form-control-wrap" data-name="first-name"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" value="" type="text" name="first-name" /></span>
1027	</p>
1028</div>
1029<div class="form-group-contact">
1030	<p><label>Last Name</label><span class="wpcf7-form-control-wrap" data-name="last-name"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" value="" type="text" name="last-name" /></span>
1031	</p>
1032</div>
1033<div class="form-group-contact">
1034	<p><label>Business Email</label><span class="wpcf7-form-control-wrap" data-name="business-email"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email" aria-required="true" aria-invalid="false" value="" type="email" name="business-email" /></span>
1035	</p>
1036</div>
1037<div class="form-group-contact">
1038	<p><label>Comment</label><span class="wpcf7-form-control-wrap" data-name="comment"><textarea cols="40" rows="3" maxlength="2000" class="wpcf7-form-control wpcf7-textarea" aria-invalid="false" name="comment"></textarea></span>
1039	</p>
1040</div>
1041<p>
1041<input class="wpcf7-form-control wpcf7-submit has-spinner contact-submit" type="submit" value="Submit" />
1042</p><p style="display: none !important;" class="akismet-fields-container" data-prefix="_wpcf7_ak_"><label>&#916;<textarea name="_wpcf7_ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="_wpcf7_ak_js" value="76"/>
1042<script>
1043document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );
1044</script>
1044
1045</p><div class="wpcf7-response-output" aria-hidden="true"></div>
1046</form>
1047</div>
1048
1049
1050        <!-- Submit -->
1051        <!-- <button
1052          onclick="handleSubmit()"
1053          class="w-full bg-violet-700 hover:bg-violet-800 active:scale-95 text-white text-sm font-semibold py-2.5 rounded-xl transition-all duration-200 tracking-wide mt-1"
1054        >
1055          Get the conversation started →
1056        </button> -->
1057      </div>
1058
1059    </div>
1060  </div>
1061  </section>
1062
1063
1064
1065
1066	<footer class="bg-[#707071] -mt-12 text-white sm:p-20 p-5 pt-10 pb-28">
1067        <div class="page-container">
1068		<div class="mx-auto grid grid-cols-1 md:grid-cols-3 items-center">
1069
1070			<div class="sm:block flex justify-center sm:mb-0 my-8">
1071				<ul class="space-y-4 text-white sm:text-[1.125rem] text-[1rem] !leading-normal set-text-hover sm:text-left text-center"><li id="menu-item-44" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44 list-none"><a href="#hero">Home</a></li>
1072<li id="menu-item-45" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45 list-none"><a href="#results">Results</a></li>
1073<li id="menu-item-188" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-188 list-none"><a href="#services">Services</a></li>
1074<li id="menu-item-692" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-692 list-none"><a href="/blog">Insights</a></li>
1075<li id="menu-item-519" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-519 list-none"><a href="https://stfundraising.com/team/">Team</a></li>
1076<li id="menu-item-520" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-395 current_page_item menu-item-520 list-none"><a href="https://stfundraising.com/contact-us/" aria-current="page">Contact</a></li>
1077<li id="menu-item-522" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-522 list-none"><a href="https://stfundraising.com/careers/">Careers</a></li>
1078</ul>			</div>
1079
1080			<div class="flex flex-col items-center justify-center text-center space-y-6 w-full mx-auto">
1081				<div>
1082					<a href="/">
1083						<img src="https://stfundraising.com/wp-content/uploads/2026/09/st-logo_lockup_reverse.png" alt="Logo" class="mb-8"
1084 loading="lazy"
1085 decoding="async">
1086					</a>
1087				</div>
1088
1089				<div class="bg-[#5E5E5E] px-8 py-5 rounded-md flex items-center space-x-8 text-white text-2xl">
1090					<a href="https://www.facebook.com/StephenThomasDigital" class="focus:outline-none focus:ring-2 focus:ring-[#A1409E]
1091focus:ring-offset-2 focus:ring-offset-transparent rounded-md"><i
1092							class="fa-brands fa-facebook-f text-4xl"></i></a>
1093					<a href="https://www.linkedin.com/company/stephen-thomas/" class="focus:outline-none focus:ring-2 focus:ring-[#A1409E]
1094focus:ring-offset-2 focus:ring-offset-transparent rounded-md"><i
1095							class="fa-brands fa-linkedin-in text-4xl"></i></a>
1096					<a href="https://www.youtube.com/user/StephenThomasDigital" class="focus:outline-none focus:ring-2 focus:ring-[#A1409E]
1097focus:ring-offset-2 focus:ring-offset-transparent
1098
1099
1100
1101
1102
1103 rounded-md"><i
1104							class="fa-brands fa-youtube text-4xl"></i></a>
1105				</div>
1106
1107				<p class="text-[1.125rem] !leading-normal font-bold">
1108					184 Front Street East, Suite 401 Toronto, ON M5A 4N3				</p>
1109
1110				<p class="text-[1rem] !leading-normal !mt-2">
1111					©
1112					2026					Copyright ST (Stephen Thomas Ltd) 
1113					<br><a
1114						href="/privacy-policy/" class="focus:outline-none focus:ring-2 focus:ring-[#A1409E]
1115focus:ring-offset-2 focus:ring-offset-transparent hover:text-[#004a88]">
1116						Privacy Policy					</a> | 
1117					<!--<a
1118						href="#" class="focus:outline-none focus:ring-2 focus:ring-[#A1409E]
1119focus:ring-offset-2 focus:ring-offset-transparent hover:text-[#004a88]">
1120					Terms of Use</a> |-->  
1121					<a
1122						href="#" class="cky-banner-element focus:outline-none focus:ring-2 focus:ring-[#A1409E]
1123focus:ring-offset-2 focus:ring-offset-transparent hover:text-[#004a88]">Cookie Settings</a> 
1124				</p>
1125			</div>
1126
1127			<!--<div class="hidden md:block"></div>-->
1128
1129		</div>
1130
1131	    </div>
1132	</footer>
1133	
1133<script src="https://cdn.tailwindcss.com"></script>
1133
1134
1135<script>
1136		document.addEventListener("DOMContentLoaded", function () {
1137			const footerLinks = document.querySelectorAll('.set-text-hover a');
1138			const hoverFooterClasses = [
1139				'hover:bg-white/10',
1140			'hover:rounded-3xl',
1141			'hover:px-4',
1142			'hover:py-2',
1143			'transition-all',
1144			'duration-500',
1145			'focus:outline-none',
1146			'focus:ring-1',
1147			'focus:ring-[#A1409E]',
1148			'focus:ring-offset-1',
1149			'focus:ring-offset-transparent',
1150			];
1151
1152			footerLinks.forEach(link => {
1153				link.classList.add(...hoverFooterClasses);
1154			});
1155		const activeFooterClasses = [
1156		  'inline-flex',
1157		  'items-center',
1158		  'justify-center',
1159		  'text-white',
1160		  'font-medium',
1161		  'text-[1.125rem]',
1162		  'leading-normal',
1163		  'px-4',
1164		  'py-2',
1165		  'rounded-full',
1166		  'bg-white/15',
1167		  'border',
1168		  'hover:py-2',
1169		  'border-white/20',
1170		  'transition-all',
1171		  'duration-300',
1172		  'hover:bg-white/20',
1173		  'hover:border-white/30',
1174		  'focus:outline-none',
1175		  'focus:ring-2',
1176		  'focus:ring-[#A1409E]',
1177		  'focus:ring-offset-2',
1178		  'focus:ring-offset-transparent',
1179		];
1180
1181        // --- 2. CODE FOR INNER PAGES (NOT HOME) ---
1182    const currentPath = window.location.pathname.replace(/\/$/, ''); // strip trailing slash
1183
1184    footerLinks.forEach(link => {
1185        const href = link.getAttribute('href');
1186        if (href && href.startsWith('#') && href !== '#') {
1187            link.setAttribute('href', '/' + href);
1188        }
1189
1190        let isActive = false;
1191        const finalHref = link.getAttribute('href');
1192
1193        // 1. Native WP current-item classes
1194        const liItem = link.closest('.menu-item');
1195         if (liItem && (
1196            liItem.classList.contains('current-menu-item') ||
1197            liItem.classList.contains('current-menu-ancestor') ||
1198            liItem.classList.contains('current_page_item') ||
1199            liItem.classList.contains('current_page_parent') ||
1200            liItem.classList.contains('current-menu-parent') ||
1201            liItem.classList.contains('current_page_ancestor')
1202        )) {
1203            isActive = true;
1204        }
1205
1206        // 1b. Detail pages: /services/<slug>/ -> that service (+ Services parent), /results/<slug>/ -> Results
1207        if (!isActive && window.stIsKeyMatch && window.stIsKeyMatch(link)) {
1208            isActive = true;
1209        }
1210
1211        // 2. URL match — exact OR nested
1212        if (!isActive && finalHref && !finalHref.startsWith('#') && !finalHref.includes('#')) {
1213            try {
1214                const linkPath = new URL(finalHref, window.location.origin).pathname.replace(/\/$/, '');
1215                if (linkPath && (currentPath === linkPath || currentPath.startsWith(linkPath + '/'))) {
1216                    isActive = true;
1217                }
1218            } catch (e) {}
1219        }
1220
1221        // 3. Hardcoded rule: force "Insights" active if on /blog or /events
1222        if (!isActive && finalHref === '/blog' &&
1223            (currentPath === '/blog' || currentPath.startsWith('/blog/') ||
1224             currentPath === '/events' || currentPath.startsWith('/events/'))) {
1225            isActive = true;
1226        }
1227
1228        if (isActive) {
1229            link.classList.add(...activeFooterClasses);
1230
1231            const parentSubMenu = link.closest('.sub-menu');
1232            if (parentSubMenu) {
1233                const parentLi = parentSubMenu.closest('.menu-item-has-children');
1234                if (parentLi) {
1235                    const parentLink = parentLi.querySelector('a');
1236                    if (parentLink) {
1237                        parentLink.classList.add(...activeFooterClasses);
1238                    }
1239                }
1240            }
1241        }
1242    });
1243});
1244</script>
1244
1245
1246	
1246<script type="speculationrules">
1247{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/stephenthomas/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1248</script>
1248
1249
1250<!-- GTM Container placement set to footer -->
1251<!-- Google Tag Manager (noscript) -->
1252				<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-K8GJ8FQG" height="0" width="0" style="display:none;visibility:hidden" aria-hidden="true"></iframe></noscript>
1253<!-- End Google Tag Manager (noscript) -->
1253<script id="wp-hooks-js" src="https://stfundraising.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 1253
1253
1254<script id="wp-i18n-js" src="https://stfundraising.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 1254
1254
1255<script id="wp-i18n-js-after">
1256wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
1257//# sourceURL=wp-i18n-js-after
1258</script>
vendor: 1 bytes, line 1258
1258
1259<script id="swv-js" src="https://stfundraising.com/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.2"></script>
vendor: 1 bytes, line 1259
1259
1260<script id="contact-form-7-js-before">
1261var wpcf7 = {
1262    "api": {
1263        "root": "https:\/\/stfundraising.com\/wp-json\/",
1264        "namespace": "contact-form-7\/v1"
1265    },
1266    "cached": 1
1267};
1268//# sourceURL=contact-form-7-js-before
1269</script>
vendor: 1 bytes, line 1269
1269
1270<script id="contact-form-7-js" src="https://stfundraising.com/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.2"></script>
vendor: 1 bytes, line 1270
1270
1271<script id="bk-script-js-extra">
1272var BK = {"ajaxurl":"https://stfundraising.com/wp-admin/admin-ajax.php"};
1273//# sourceURL=bk-script-js-extra
1274</script>
vendor: 1 bytes, line 1274
1274
1275<script id="bk-script-js" src="https://stfundraising.com/wp-content/themes/stephenthomas/js/script.js?ver=1.0.0"></script>
vendor: 1 bytes, line 1275
1275
1276<script id="wp-emoji-settings" type="application/json">
1277{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://stfundraising.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.3"}}
1278</script>
vendor: 1 bytes, line 1278
1278
1279<script type="module">
1280/*! This file is auto-generated */
1281var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
1282//# sourceURL=https://stfundraising.com/wp-includes/js/wp-emoji-loader.min.js
1283</script>
vendor: 1 bytes, line 1283
1283
1284<script></script>
1284<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a48102319fd819b0',t:'MTc5MTU4NjkwMA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
1284</body>
1285
1286</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.