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 – 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&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>Δ<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.