1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Heyo Platform Register</title> 7 <meta name="Description" content="The Heyo Platform enables brands, small businesses, agencies and publishes to create, publish and run social media promotions including photo contests, video contests, sweepstakes and other promotions apps for Facebook that enable our clients to engage customers on Facebook and other social media networks." /> 8 <meta name="keywords" content="video contest, video contests, photo contest, photo contests, sweepstakes, promotions apps for Facebook, self-service promotions platform, build promotions, Facebook promotions, viral promotions, create promotions, publish promotions, promotions apps" /> 9 <link rel="icon" type="image/x-icon" href="https://d29lj5hr15j4oc.cloudfront.net/Heyo.Favicon.410.ico?v=1527588575"> 10 <!-- Bootstrap 5 CSS --> 11 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"> 12 <!-- Font Awesome --> 13 <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" rel="stylesheet"> 14 <!-- flatpickr --> 15 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css"> 16 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/themes/material_green.css"> 17 <!-- Custom CSS (versioned) --> 18 <link rel="stylesheet" type="text/css" href="https://dcveehzef7grj.cloudfront.net/css/common/socialcommentapp.css?v=1790304913" /> 19 <link rel="stylesheet" type="text/css" href="https://dcveehzef7grj.cloudfront.net/css/common/heyo.css?v=1790304913" /> 20 <style type="text/css"> 21 html, body#login_users, body#resetpassword_users{height:100%;} 22 body.unified-social-platform{display:flex;flex-direction:column;background-color:#f8f9fa;} 23 main.main-content{flex-grow:1;display:flex;align-items:center;justify-content:center;padding:2rem;} 24 25 .containerwrap{width:100%;} 26 .containerwrap .contcard{border:1px solid #e2e8f0;border-radius:0.75rem;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);padding:2rem;background-color:#ffffff;} 27 .containerwrap .headertxt{font-size:24px;font-weight:700;color:#1e293b;} 28 .containerwrap .subheadertxt{font-size:14px;color:rgb(75, 85, 99);margin-bottom:1.5rem;} 29 .containerwrap .form-label{font-weight:500;color:#334155;} 30 .containerwrap .form-label .text-danger{font-weight:normal;} 31 .containerwrap .password-wrapper{position:relative;} 32 .containerwrap #togglePassword{position:absolute;top:50%;right:1rem;transform:translateY(-50%);cursor:pointer;color:#64748b;} 33 .containerwrap #UserPswd{padding-right:2.5rem;} 34 .containerwrap .btn-primary{background:var(--inner-btns-bg);border:none;font-size:14px;font-weight:500;padding:0.75rem;} 35 .containerwrap .btn-primary:hover{opacity:0.9;background:var(--inner-btns-bg);} 36 .containerwrap .btn.disabled, .containerwrap .btn:disabled{background:var(--inner-btns-bg);} 37 .containerwrap .anchlink,.containerwrap .registerLnk a{font-size:14px;font-weight:500;} 38 .containerwrap .registerLnk{font-size:14px;text-align:center;} 39 .containerwrap #flashMessage.message{padding:1rem;margin-bottom:1.5rem;border:1px solid #ffecb5;border-radius:0.5rem;color:#664d03;background-color:#fff3cd;text-align:left;} 40 41 .captchaerr,.errorspan{font-size:13px;color:#FF0000;padding-top:5px;} 42 43 .form-grid{display:grid;grid-template-columns:repeat(2, 1fr);column-gap:16px;} 44 .form-grid .fullwid{grid-column:span 2;} 45 @media (max-width: 576px) { 46 main.main-content { 47 padding: 1rem; 48 } 49 .containerwrap .contcard { 50 padding: 1.5rem; 51 } 52 } 53 @media (min-width: 448px) { 54 .containerwrap{width:448px;} 55 } 56 @media (min-width: 810px) { 57 .reg-container{width:810px;} 58 } 59 </style> 60 <style> 61 body { 62 font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 63 } 64 .footer { 65 background-color: #ffffff; 66 padding: 1.5rem 0; 67 font-size: 14px; 68 color: #6c757d; 69 border-top: 1px solid #e9ecef; 70 } 71 .footer a { 72 text-decoration: underline; 73 margin: 0 0.5rem; 74 } 75 .footer a:hover { 76 text-decoration: underline; 77 } 78 .gdpr-compliant { 79 display: inline-flex; 80 align-items: center; 81 } 82 .gdpr-compliant .fa-shield-halved { 83 margin-right: 0.5rem; 84 color: #334155; 85 } 86 .campaign-title-standalone h2 strong { 87 font-weight: 700; 88 } 89 .type-badge-alt.retweet, 90 .type-badge-alt.repost, 91 .type-badge-alt.retweets, 92 .type-badge-alt.quoted_tweet, 93 .type-badge-alt.quoted_post, 94 .type-badge-alt.quotes { 95 background-color: #f3f4f6; /* gray-100 */ 96 color: #374151; /* gray-700 */ 97 } 98 99 .type-badge-alt.reply, 100 .type-badge-alt.replies { 101 background-color: #f3f4f6; /* gray-100 */ 102 color: #374151; /* gray-700 */ 103 } 104 .type-badge-alt.comment, .type-badge-alt.comments {
105 background-color: #e0f2fe; /* sky-100 */ 106 color: #0c4a6e; /* sky-800 */ 107 } 108 .type-badge-alt.reaction, .type-badge-alt.reactions { 109 background-color: #dbeafe; /* blue-100 */ 110 color: #1e40af; /* blue-800 */ 111 } 112 .type-badge-alt.like, .type-badge-alt.likes { 113 background-color: #fee2e2; /* red-100 */ 114 color: #991b1b; /* red-800 */ 115 } 116 .twitter-stats-grid .stat-item { 117 border-bottom: none; 118 padding-top: 0.25rem; 119 padding-bottom: 0.25rem; 120 } 121 .stat-item:last-child { 122 border-bottom: none; 123 } 124 .tooltip.tooltip-wide { 125 --bs-tooltip-max-width: 350px; 126 } 127 </style> 128 <!-- Google Tag Manager --> 129
129<script>
vendor: 343 bytes, lines 129-133
129(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 130 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 131 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 132 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 133 })(window,document,'script','dataLayer','
133GTM-MMSF64TX
vendor: 3 bytes, line 133
133');
133</script>
133 134 <!-- End Google Tag Manager --> 135 </head> 136<body class="unified-social-platform" id="add_users"> 137 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 137-138
137 138 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
138GTM-MMSF64TX
vendor: 91 bytes, lines 138-140
138" 139 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 140
140<!-- End Google Tag Manager (noscript) --> 141 <div class="navheader"> 142 <div class="header-bar"> 143 <!-- Left: Logo --> 144 <div class="header-left"> 145 <a href="/campaigns" class="brandlogo"> 146 <img src="/img/heyo/heyo_icon_orange.png?v=1" alt="" class="prebrandlogoimg me-2" role="presentation"> 147 <img src="/img/heyo/logo_heyo.png?v=1" alt="Heyo" class="brandlogoimg"> 148 </a> 149 </div> 150 151 </div> 152 </div> 153 <!-- Main content card comes below (handled in view) --> 154 <main class="main-content"> 155 156<div class="reg-container containerwrap"> 157 <div class="card reg-card contcard"> 158 <div class="text-center mb-4"> 159 <h1 class="reg-header headertxt">Create Your Account</h1> 160 <p class="reg-subheader subheadertxt d-none">Access your dashboard and campaigns</p> 161 </div> 162 <form action="/register" autocomplete="off" id="UserAddForm" method="post" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="POST"/><input type="hidden" name="data[_Token][key]" value="ee6946e21676dac27492d537a47a697ef9765d20f44f94cddf71adda899c1d9fa20e2e1d6febfded97f41d416d9f77461f987ae2afed3189ed01d73786341a94" id="Token437888663" autocomplete="off"/></div> <div class="d-none hiddeninputs"> 163 <input type="hidden" value="register" id="origin" name="origin"> 164 <input type="hidden" value="409" id="UserPlan1" name="data[User][plan]"> 165 <input type="hidden" name="data[User][cemail]" type="text" id="UserCemail"/><input type="hidden" name="data[User][cpswd]" type="password" id="UserCpswd"/><input type="hidden" name="data[Contestantfield][field1]" type="text" id="ContestantfieldField1"/> </div> 166 <div class="form-grid"> 167 <div class="mb-3"> 168 <label for="UserFirstName" class="form-label">First Name<span class="text-danger">*</span></label> 169 <input name="data[User][first_name]" class="form-control" required="required" type="text" id="UserFirstName"/> </div> 170 <div class="mb-3"> 171 <label for="UserLastName" class="form-label">Last Name<span class="text-danger">*</span></label> 172 <input name="data[User][last_name]" class="form-control" required="required" type="text" id="UserLastName"/> </div> 173 <div class="mb-3"> 174 <label for="UserEmail" class="form-label">Email Address<span class="text-danger">*</span></label> 175 <input name="data[User][email]" class="form-control" required="required" maxlength="255" type="email" id="UserEmail"/> </div> 176 <div class="mb-3"> 177 <label for="UserPswd" class="form-label">Password<span class="text-danger">*</span></label> 178 <div class="password-wrapper"> 179 <input name="data[User][pswd]" class="form-control" required="required" id="UserPswd" type="password"/> <i class="fa-regular fa-eye-slash" id="togglePassword"></i> 180 </div> 181 </div> 182 <div class="mb-3"> 183 <label for="ContestantfieldField10" class="form-label">How did you hear about HEYO?<span class="text-danger">*</span></label> 184 <select name="data[Contestantfield][field10]" class="form-select" required="required" id="ContestantfieldField10"> 185<option value="">Select</option> 186<option value="Blog">Blog</option> 187<option value="Search">Search</option> 188<option value="Word of mouth">Word of mouth</option> 189<option value="From a promotion or campaign">From a promotion or campaign</option> 190</select> </div> 191 <div class="mb-3"> 192 <label for="ContestantfieldField11" class="form-label">What is your budget?<span class="text-danger">*</span></label> 193 <select name="data[Contestantfield][field11]" class="form-select" required="required" id="ContestantfieldField11"> 194<option value="">Select</option> 195<option value="Less than $250">Less than $250</option> 196<option value="$250 - $500">$250 - $500</option> 197<option value="$500 - $1,000">$500 - $1,000</option> 198<option value="$1,000 - $10,000">$1,000 - $10,000</option> 199<option value="Over $10,000">Over $10,000</option> 200</select> </div> 201 <div class="mb-3 fullwid" id="cmpgTyp"> 202 <label for="ContestantfieldField12" class="form-label">Which campaign type are you interested in running?<span class="text-danger">*</span></label> 203 <select name="data[Contestantfield][field12]" class="form-select" required="required" id="ContestantfieldField12"> 204<option value="">Select</option> 205<option value="Want to Enter Sweepstakes">I want to enter a Sweepstakes</option> 206<option value="Sweepstakes">Sweepstakes</option> 207<option value="Photo Contest">Photo Contest</option> 208<option value="Video Contest">Video Contest</option> 209<option value="Quiz">Quiz</option> 210<option value="Poll">Poll</option> 211<option value="Landing Page">Landing Page</option>
212<option value="Other Campaign Type">Other Campaign type</option> 213</select> </div> 214 <div class="mb-3 d-none" id="othCmpgTyp"> 215 <label for="ContestantfieldField13" class="form-label">Other Campaign Type<span class="text-danger">*</span></label> 216 <input name="data[Contestantfield][field13]" class="form-control" type="text" id="ContestantfieldField13"/> <span class="errorspan d-none">Please enter a value to proceed.</span> 217 </div> 218 </div> 219 <!-- Captcha Section --> 220 <div class="mb-3" id="captcha-section"> 221 <label class="form-label">Verification <span class="text-danger">*</span></label> 222 <div class="d-flex justify-content-start"> 223 <div class="h-captcha" data-sitekey="3071b2a1-e62d-4d3e-8fbb-fa9548651567"></div> 224 </div> 225
225<script src='https://js.hcaptcha.com/1/api.js' async defer></script>
225 226 <span class="captchaerr d-none">Please solve the captcha.</span> 227 </div> 228 <div class="mb-3"> 229 <div class="form-check"> 230 <input type="hidden" name="data[User][optin]" id="UserOptin_" value="0"/><input type="checkbox" name="data[User][optin]" class="form-check-input border border-dark" value="1" id="UserOptin"/> <label for="UserOptin" class="form-label">Get the latest news and updates from Heyo.</label> 231 <div class="fs12px w-100"> 232 Your data will only be used for the administration of the campaigns you create on Heyo. Specifically, it will be used to notify you of new entries in a contest, sweepstakes or other interactive marketing campaign. If you opt-in to receive email marketing from Heyo, you are agreeing to receive further marketing emails from us. We promise we will never share or sell your data with 3rd parties. 233 </div> 234 </div> 235 </div> 236 <div class="mb-3"> 237 <div class="form-check"> 238 <input type="hidden" name="data[User][tos]" id="UserTos_" value="0"/><input type="checkbox" name="data[User][tos]" class="form-check-input border border-dark" required="required" value="1" id="UserTos"/> <label for="UserTos" class="form-label"> 239 I agree to the Heyo <a href='https://www.heyo.com/terms' target='_blank'>Terms of Service</a> and <a href='https://www.heyo.com/privacy' target='_blank'>Privacy Policy</a>. </label> 240 </div> 241 </div> 242 <div class="d-flex justify-content-center my-3"> 243 <button type="submit" class="btn btn-primary btn-lg text-white"> 244 <i class="fa-solid fa-user-plus me-2"></i>Create Your Account 245 </button> 246 </div> 247 <div class="text-center"> 248 <a href="/login" class="login-link anchlink">Back to Login</a> 249 </div> 250 <hr class="my-3"> 251 <div class="text-center text-muted small" style="font-size: 12px;"> 252 <span class="text-danger">*</span> Required field 253 </div> 254 <div style="display:none;"><input type="hidden" name="data[_Token][fields]" value="1c179d0396d6b25b752a5928e90f1f03a8184a67%3AContestantfield.field1%7CUser.cemail%7CUser.cpswd" id="TokenFields996942662" autocomplete="off"/><input type="hidden" name="data[_Token][unlocked]" value="" id="TokenUnlocked1905775866" autocomplete="off"/></div></form> </div> 255</div>
256<script type="text/javascript" src="https://dcveehzef7grj.cloudfront.net/js/libs/fp2_2.1.0.min.js?v=700"></script>
vendor: 1 bytes, line 256
256
257<script type="text/javascript"> 258 document.addEventListener('DOMContentLoaded', function() { 259 const togglePassword = document.querySelector('#togglePassword'); 260 const password = document.querySelector('#UserPswd'); // Updated selector for CakePHP ID 261 262 if(togglePassword && password) { 263 togglePassword.addEventListener('click', function (e) { 264 // toggle the type attribute 265 const type = password.getAttribute('type') === 'password' ? 'text' : 'password'; 266 password.setAttribute('type', type); 267 // toggle the icon 268 this.classList.toggle('fa-eye-slash'); 269 this.classList.toggle('fa-eye'); 270 }); 271 } 272 273 document.querySelector('#UserAddForm').addEventListener('submit', function(event) { 274 event.preventDefault(); 275 const UserAddForm = event.target; 276 277 document.querySelector("#captcha-section .captchaerr").classList.add("d-none"); 278 if(document.querySelector("textarea[name='g-recaptcha-response']").value == ""){ 279 event.preventDefault(); 280 document.querySelector("#captcha-section .captchaerr").classList.remove("d-none"); 281 return false; 282 } 283 284 const campaignType = document.querySelector("#ContestantfieldField12"); 285 if(campaignType.value == "Other Campaign Type" && document.querySelector("#ContestantfieldField13").value == ""){ 286 event.preventDefault(); 287 document.querySelector("#othCmpgTyp .errorspan").classList.remove("d-none"); 288 return false; 289 } 290 291 UserAddForm.querySelector("#UserCemail").value = UserAddForm.querySelector("#UserEmail").value; 292 UserAddForm.querySelector("#UserCpswd").value = UserAddForm.querySelector("#UserPswd").value; 293 294 UserAddForm.querySelector('button[type=submit]').setAttribute('disabled', 'disabled'); 295 UserAddForm.submit(); 296 }); 297 298 document.addEventListener("visibilitychange", function () { 299 if (document.visibilityState === 'visible') { 300 // The page is becoming visible again (e.g., back button or tab switch) 301 document.querySelector('#UserAddForm button[type=submit]').removeAttribute('disabled'); 302 } 303 }); 304 305 const campaignType = document.querySelector("#ContestantfieldField12"); 306 toggleOtherCampaignType(campaignType); 307 308 campaignType.addEventListener("change", function(){ 309 toggleOtherCampaignType(campaignType); 310 }); 311 }); 312 313 function toggleOtherCampaignType(campaignType){ 314 const campaignTypeCont = document.querySelector("#cmpgTyp"); 315 const otherCampaignTypeCont = document.querySelector("#othCmpgTyp"); 316 317 campaignTypeCont.classList.add('fullwid'); 318 otherCampaignTypeCont.classList.add('d-none'); 319 320 if(campaignType.value == "Other Campaign Type"){ 321 campaignTypeCont.classList.remove('fullwid'); 322 otherCampaignTypeCont.classList.remove('d-none'); 323 } 324 } 325 326 let _ipAddress = ""; 327 function getIP() { 328 fetch('/getip.php', { 329 method: 'GET', 330 headers: { 331 'Accept': 'application/json' 332 }, 333 cache: 'no-store' 334 }) 335 .then(response => response.json()) 336 .then(ipAddress => { 337 // Handle undefined ipAddress 338 if (typeof ipAddress === 'undefined') { 339 ipAddress = { ip: '181.215.65.70' }; 340 } else { 341 // If memCacheCaptchaKey exists, perform actions 342 if (typeof ipAddress['memCacheCaptchaKey'] !== 'undefined') { 343 const captchaElement = document.getElementById('PsYhx4s9B'); 344 if (captchaElement) { 345 captchaElement.value = ipAddress['memCacheCaptchaKey']; 346 uniqueKeyIdentifier = ipAddress['memCacheCaptchaKey']; 347 refreshCaptcha(); 348 } 349 } 350 } 351 352 // Handle the vtg_vck cookie 353 if (!getCookie("vtg_vck")) { 354 let tmpCkValue = Date.now(); 355 if (ipAddress.vtgVck !== undefined) { 356 tmpCkValue = ipAddress.vtgVck; 357 } 358 359 // Set the cookie
360 setCookie("vtg_vck", tmpCkValue, 1); // expires in 1 day 361 } 362 363 _ipAddress = ipAddress['ip']; 364 setIPforFingerPrint(); 365 }) 366 .catch(error => { 367 console.log("Error fetching IP: ", error); 368 }); 369 } 370 371 // Function to get a cookie value by name 372 function getCookie(name) { 373 const value = `; ${document.cookie}`; 374 const parts = value.split(`; ${name}=`); 375 if (parts.length === 2) return parts.pop().split(';').shift(); 376 return null; 377 } 378 379 // Function to set a cookie with a specific name, value, and expiry in days 380 function setCookie(name, value, days) { 381 const d = new Date(); 382 d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000)); // Set expiry time 383 const expires = "expires=" + d.toUTCString(); 384 document.cookie = `${name}=${value}; ${expires}; path=/`; 385 } 386 387 document.addEventListener('DOMContentLoaded', function() { 388 getIP(); 389 }); 390 391 function setIPforFingerPrint(){ 392 if (window.requestIdleCallback) { 393 requestIdleCallback(function () { 394 initFP(); 395 }); 396 } else { 397 setTimeout(function () { 398 initFP(); 399 }, 500); 400 } 401 } 402 403 function initFP(){ 404 const options = { 405 extraComponents : [{key: 'ip', 406 getData: function (done, options) { 407 done(_ipAddress); 408 } 409 }] 410 }; 411 Vtgfp2.get(options,function (components) { 412 const result = Vtgfp2.x64hash128(components.map(function (pair) { return pair.value }).join(), 31); 413 fetch("/sections/encryptfingerprint/"+result, { 414 method: 'POST', 415 headers: { 416 'Content-Type': 'application/json', 417 'X-Requested-With': 'XMLHttpRequest' 418 }, 419 cache: 'no-cache', 420 }) 421 .then(response => response.json()) 422 .then(data => { 423 console.log("success."); 424 }) 425 .catch(error => { 426 console.log('Oops, something bad happened and the fetch call failed!'); 427 }); 428 }); 429 } 430</script>
430 </main> 431 <footer class="footer mt-auto"> 432 <div class="container text-center"> 433 <span class="copy mb-2 d-inline-block">2010 - 2026 All Rights Reserved, a Votigo Company</span><br /> 434 <a href="https://www.heyo.com/" target="_blank">heyo</a> · 435 <a href="https://blog.heyo.com/" target="_blank">blog</a> · 436 <a href="https://www.heyo.com/terms" target="_blank">tos</a> · 437 <a href="https://www.heyo.com/privacy" target="_blank">privacy</a> · 438 <a href="https://www.heyo.com/eula" target="_blank">eula</a> 439 <div class="mt-2"> 440 <div class="gdpr-compliant d-inline-flex align-items-center"> 441 <i class="fa-solid fa-shield-halved me-2"></i> 442 <span>GDPR Compliant</span> 443 </div> 444 </div> 445 </div> 446 </footer> 447 <!-- Bootstrap 5 JS Bundle --> 448
448<script src="https://dcveehzef7grj.cloudfront.net/js/2.0/bootstrap.bundle.min.js"></script>
448 449 <!-- Zepto.js --> 450
450<script src="https://dcveehzef7grj.cloudfront.net/js/2.0/zepto.min.js"></script>
450 451 <!-- Process readyQueue --> 452
452<script> 453 $(function() { 454 if (window.readyQueue) { 455 for (var i = 0; i < window.readyQueue.length; i++) { 456 window.readyQueue[i](); 457 } 458 } 459 }); 460 </script>
460 461 <!-- flatpickr --> 462
462<script src="https://dcveehzef7grj.cloudfront.net/js/2.0/flatpickr.js"></script>
462 463 <!-- Custom JS (versioned) --> 464
464<script src="https://dcveehzef7grj.cloudfront.net/js/socialcommentapp.js?v=1790304913"></script>
464 465
465<script> 466 // Mobile navigation toggle 467 function toggleMobileNav() { 468 const mobileNav = document.getElementById('mobileNav'); 469 mobileNav.classList.toggle('show'); 470 } 471 // Active state management for sub-navigation 472 document.addEventListener('DOMContentLoaded', function() { 473 const subNavLinks = document.querySelectorAll('.sub-nav .nav-link'); 474 subNavLinks.forEach(link => { 475 link.addEventListener('click', function(e) { 476 e.preventDefault(); 477 // Remove active class from all links 478 subNavLinks.forEach(l => l.classList.remove('active')); 479 // Add active class to clicked link 480 this.classList.add('active'); 481 }); 482 }); 483 // Main navigation hover effects 484 const mainNavLinks = document.querySelectorAll('.nav-link-custom'); 485 mainNavLinks.forEach(link => { 486 link.addEventListener('mouseenter', function() { 487 this.style.transform = 'translateY(-1px)'; 488 }); 489 link.addEventListener('mouseleave', function() { 490 this.style.transform = 'translateY(0)'; 491 }); 492 }); 493 494 }); 495 </script>
495 496 <!-- DataLayer Events --> 497
497<script> 498 // Initialize dataLayer before GTM loads 499 window.dataLayer = window.dataLayer || []; 500 501 // Push a page_view event with custom parameters. 502 // For these to be usable in GA4 reports, they must be registered 503 // as "Custom Definitions" in the Google Analytics UI. 504 dataLayer.push({ 505 'event': 'page_view', 506 'partner_id': '410', 507 'partner_name': 'heyo', 508 'page_title': 'Platform Register', 509 'page_url': '/register', 510 'user_type': 'guest' 511 }); 512 513 // Debug output 514 //console.log('GTM Data Layer:', JSON.stringify(window.dataLayer, null, 2)); 515 </script>
515 516</body> 517</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.