PageSourceSearch

https://www.hsha.org/contacts/login?redirect=%2Fpage%2F1997185-home

html hsha.org collected 2026-10-06 15:24:46 UTC 47,142 bytes, 1,207 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3	<head>
4
5		<!-- META -->
6		                <meta name="robots" content="noindex, follow">
7                    <meta property="og:type" content="website">
8                    <meta property="og:site_name" content="Springly">
9                    <title>Hawaii Speech Language Hearing Association - Login page</title>
10                    <meta name="description" content="Login to access the members&#039; area of Hawaii Speech Language Hearing Association">
11        <meta property="og:description" content="Login to access the members&#039; area of Hawaii Speech Language Hearing Association">
12                    <meta property="og:locale" content="en_US">
13                    <meta property="og:url" content="https://www.hsha.org/contacts/login?redirect=%2Fpage%2F1997185-home">
14                    <meta property="og:image" content="https://app.assoconnect.com/services/storage?id=3863747&amp;type=picture&amp;secret=7naJI4fey7A65DEqTLtPBc8JlUu5L6of4eGuGQO4&amp;timestamp=1776181436">
15                    <meta property="og:image:width" content="540">
16                    <meta property="og:image:height" content="282">
17    <meta name="viewport" property="viewport" content="width=device-width, initial-scale=1.0">
18<meta charset="utf-8">
19<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
20<meta name="google-signin-use_fedcm" content="true">
21    <link rel="canonical" href="https://www.hsha.org/contacts/login?redirect=%2Fpage%2F1997185-home">
22
23		<!-- Favicon -->
24					<link rel="icon" type="image/png" href="https://assets.assoconnect.com/legacy/springly.org/image/favicon.png">
25		
26		<!-- https://dev.twitter.com/web/overview/widgets-webpage-properties -->
27		<meta name="twitter:widgets:csp" content="on">
28
29		<!-- CSS -->
30		
31
32<!-- jQuery UI -->
33<!-- Le CSS de jQuery UI utilise des chemins relatifs pour les images, on ne peut donc pas l'inclure dans le CSS global -->
34<link
35    rel="stylesheet"
36    href="https://code.jquery.com/ui/1.14.1/themes/base/jquery-ui.css"
37    integrity="sha512-Ikr9iIb48ljzg7k903d77p0AITNsf4DxtxK4g5R4UiqHpCdroXAX0zqr0uPSWskJOJ1pQoAOXCb8WPkohWY3Bw=="    
38    crossorigin="anonymous"
39>
40
41<!-- Layout -->
42<link rel="stylesheet" href="https://cdn.assoconnect.com/public/build/css/common.-.layout.-.connexion.DESKTOP.e448b25.css">
43
44<!-- Template -->
45<style></style>
46
47<!-- Google Font -->
48    <!-- :400,700 for bold -->
49    <link href="https://fonts.googleapis.com/css?family=Roboto:400,500,700" rel="stylesheet">
50    
51
52<!-- Choices.js -->
53
54<!-- ContentTools -->
55
56<!-- Cropper -->
57
58<!-- FullCalendar -->
59
60<!-- Simplelightbox -->
61
62<!-- Leaflet -->
63<!-- Leaflet MarkerCluster -->
64
65<style nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
66	#teamblue-widget-container {
67		position: fixed;
68		bottom: 0;
69		left: 0;
70		width: 0;
71		height: 0;
72		overflow: hidden;
73	}
74</style>
75
76		<!-- JS -->
77		
77<script async nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
78	// Browser check
79	// https://stackoverflow.com/a/55655928/7671937
80	function isCrappyIE() {
81		var ua = window.navigator.userAgent;
82		var crappyIE = false;
83		var msie = ua.indexOf('MSIE ');
84		if (msie > 0) { // IE 10 or older => return version number
85			crappyIE = true;
86		}
87		var trident = ua.indexOf('Trident/');
88		if (trident > 0) { // IE 11 => return version number
89			crappyIE = true;
90		}
91		return crappyIE;
92	}
93
94	if(isCrappyIE()) {
95		alert("You are using an old version of Internet Explorer that is no longer maintained. For the comfort of your navigation, please use an up-to-date browser.");
96	}
97</script>
97
98
99<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
100	var SIZE_FIXED			= "fixed";
101	var SIZE_FREE			= "free";
102	var SIZE_MIN			= "min";
103	var SIZE_MIN_WIDTH		= "min-width";
104	var SIZE_MIN_HEIGHT		= "min-height";
105	var SIZE_MAX			= "max";
106	var SIZE_MAX_WIDTH		= "max-width";
107	var SIZE_MAX_HEIGHT		= "max-height";
108	var ORIGINAL_WIDTH		= 1200;
109	var ORIGINAL_HEIGHT		= 628;
110	var SIZE_STANDARD		= "standard";
111	var SIZE_USER			= "user";
112	var SIZE_VENDOR			= "vendor";
113	var THUMB_WIDTH			= 352;
114	var THUMB_HEIGHT		= 184;
115	var USER_NORMAL			= 200;
116</script>
vendor: 1 bytes, line 116
116
117<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
118    var HOST_PUBLIC = "https:\/\/assets.assoconnect.com\/legacy";
119    var HOST_SPARK = "https:\/\/assets.assoconnect.com\/legacy\/spark";
120    var SPARK_VERSION = "e448b25";
121    var SPARK_FORM_UPLOAD_MAX_SIZE = 10485760;
122    var SPARK_FORM_UPLOAD_MAX_NAME_LENGTH = 249;
123    var URI_CLIENT = "\/contacts\/login?redirect=%2Fpage%2F1997185-home";
124    var URI_SERVER = "\/membres\/connexion";
125    var VENDOR_ID = 424341;
126    var _GIFS = [];
127    var RECAPTCHA = "6Ldy5hwUAAAAAGrMqPOdhVGOLd79KcXDcHg7mjgH";
128    var MAPBOX_TOKEN = "pk.eyJ1IjoiYXNzb2Nvbm5lY3QiLCJhIjoiY2pycTlxaGh0MDEyMTQzcGZ0eTlidmdmciJ9.-lrrOF0HPATIKSl8luHqwA";
129    var CSP_NONCE = "e755256c-fcec-4a47-85f6-89d949d705bc";
130    var I18N_CURRENCY = "USD";
131    var I18N_LOCALE = "en-US";
132    var I18N_TIMEZONE = "US\/Hawaii";
133    var SITE_CODE = "y";
134</script>
134
135
136<!-- Translator Method -->
137<script
138    nonce="e755256c-fcec-4a47-85f6-89d949d705bc"
139    src="https://cdnjs.cloudflare.com/ajax/libs/intl-messageformat/5.1.0/intl-messageformat.min.js"
140    integrity="sha256-jkYwyAJTaU4esUDFkWA92xz+ARjXOmPO8ul5jjY3MWk="
141    crossorigin="anonymous"
142></script>
vendor: 1 bytes, line 142
142
143<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
144  window.trans = function trans(key, params) {
145      // Translation key not found
146      if(window.translations.hasOwnProperty(key) === false) {
147          return key;
148      }
149
150      var translation = window.translations[key];
151
152      var translator = new IntlMessageFormat.IntlMessageFormat(translation, I18N_LOCALE);
153
154      return translator.format(params);
155  };
156
157  window.transCurrency = new Intl.NumberFormat(
158      I18N_LOCALE,
159      { style: 'currency', currency: "USD"}
160  ).format;
161
162  window.transDate = new Intl.DateTimeFormat(I18N_LOCALE, {
163      timeZone: I18N_TIMEZONE,
164  }).format;
165
166  window.transDateFromYMD = function(value) {
167      value = String(value).replaceAll('-', '');
168      // YYYYMMDD or YYYYMMDDHHiiss
169      if (String(value).length !== 8 && String(value).length !== 14) {
170          return ''
171      }
172
173      var date = new Date(value.substr(0, 4) + "-" + value.substr(4, 2) + "-" + value.substr(6, 2));
174
175      // Invalid date
176      if (isNaN(date)) {
177          return ''
178      }
179
180      return transAbsoluteDate(date);
181  }
182
183  window.transDateTime = new Intl.DateTimeFormat(I18N_LOCALE, {
184      timeZone: I18N_TIMEZONE,
185      year: "numeric",
186      month: "2-digit",
187      day: "2-digit",
188      hour: "numeric",
189      minute: "numeric",
190      second: "numeric",
191  }).format;
192
193  // Trans date created with new Date('1986-06-02')
194  window.transAbsoluteDate = new Intl.DateTimeFormat(I18N_LOCALE, {
195      timeZone: "UTC",
196  }).format;
197
198  // Trans date formatted as YYYYMMDDHHiiss
199  window.transAbsoluteDateYMD = function (value) {
200      // YYYYMMDD or YYYYMMDDHHiiss
201      if (String(value).length !== 8 && String(value).length !== 14) {
202          return ''
203      }
204
205      var date = new Date(value.substr(0, 4) + "-" + value.substr(4, 2) + "-" + value.substr(6, 2));
206
207      // Invalid date
208      if (isNaN(date)) {
209          return ''
210      }
211
212      return transAbsoluteDate(date);
213  }
214
215      window.translations = Object.assign({"ckeditor.subtitle":"Subtitle","ckeditor.title":"Title","ckeditor.maintitle":"Main title","form.select.placeholder":"Select","form.uploadPicture.complete.delete":"Delete","form.uploadPicture.prepareInput.button":"Select","form.uploadPicture.prepareInput.drop":"Add an image","form.uploadPicture.prepareInput.send":"Select","form.uploadPicture.prepareInput.size":"Recommended size: { width } x { height } px","form.uploadPicture.remove.confirm.text":"Do you really want to delete the image \"{filename}\"?","jquery.ajax.error":"An error has occurred. This error may be due to your internet connection. Do not hesitate to contact us if this error remains unresolved.\n","jquery.ajax.forbidden":"You do not have access rights to perform this operation.","popup.blocked":"You must allow popups for this site in order to see the form preview","registration.addedMail":"Your subscription to the Newsletter has been confirmed. You'll hear from us soon!","registration.addMail":"Please provide an email address.","registration.failed":"Subscription failed!","registration.mailAlreadyExisting":"This email address is already subscribed to the newsletter.","spark.dirty.onBeforeUnload":"You have edited information. Leaving this page without saving them may result in their loss.","spark.form.bic.helper.country":"The SWIFT code is probably invalid: please check the 5th and 6th ( { country } ) characters.","spark.form.bic.helper.incorrect":"Invalid SWIFT code.","spark.form.country.helper.incorrect":"Unknown country.","spark.form.date.helper.format":"Incorrect date (format: MM\/DD\/YYYY).","spark.form.date.helper.futureDateNotAllowed":"Date in the future","spark.form.date.helper.yearInTwoDigits":"Year must be 4 digits","spark.form.date.helper.yearStartsWithZero":"Year cannot start with a zero","spark.form.datetime.checkLegalAge.error.age":"The legal representative must be of legal age","spark.form.datetime.update.error.incorrect":"Invalid date.","spark.form.datetime.update.error.max":"The date must be before: { max }","spark.form.datetime.update.error.min":"The date must be after: { min }","spark.form.domain.check.error":"Invalid domain name","spark.form.iban.helper.invalid":"Invalid IBAN.","spark.form.mail.check.question":"We have detected a potential typing error. Is your email address { suggest }?","spark.form.mail.check.yes":"Yes, correct the address","spark.form.mail.check.no":"No, keep the address provided","spark.form.mail.confirm.error":"Emails don't match.","spark.form.mail.helper.at":"The \"at\" sign (@) is missing in this email","spark.form.mail.helper.domain":"The email address' domain name is invali
215d.","spark.form.mail.helper.empty":"Please provide an email address.","spark.form.mail.helper.incorrect":"Invalid email.","spark.form.mail.helper.invalid":"This email contains invalid characters.","spark.form.model.addressSearch.city":"City","spark.form.model.addressSearch.country":"Country","spark.form.model.addressSearch.location":"Name of the place","spark.form.model.addressSearch.notFound":"Can't find the address?","spark.form.model.addressSearch.placeholder":"Here, search for the address you want to save ","spark.form.model.addressSearch.postal":"Zip code","spark.form.model.addressSearch.reset":"Delete address or provide a new one","spark.form.model.addressSearch.street1":"Street","spark.form.model.addressSearch.street2":"Additional address information","spark.form.model.category":"Category","spark.form.money.check.error":"Invalid amount. ","spark.form.password.confirm.error":"Passwords don't match.","spark.form.percent.check.error":"Invalid value.","spark.form.phone.helper.country":"Invalid country code.","spark.form.phone.helper.incorrect":"Invalid phone number.","spark.form.phone.helper.length.tooLong":"The phone number is too long.","spark.form.phone.helper.length.tooShort":"The phone number is too short.","spark.form.phone.helper.mobile":"Please provide a mobile phone.","spark.form.phone.helper.phone":"Please provide a landline phone number.","spark.form.phone.helper.refused":"Unsupported phone number type.","spark.form.phone.helper.unknown":"Unknown phone.","spark.form.postal.helper.country.required":"The country must be provided.","spark.form.postal.helper.country.unknown":"Unknown country: { country }","spark.form.postal.helper.incorrect":"Invalid zip code.","spark.form.postal.helper.required":"The zip code must be provided.","spark.form.postal.helper.unused":"This country doesn't use zip codes.","spark.form.textCount.update.character":"character","spark.form.upload.check.error.limit":"You have reached the maximum limit of files:  { limit } .","spark.form.upload.check.error.name":"The file name is too long (max. {limit} characters, extension excluded).","spark.form.upload.check.error.size":"The file is too large (max: { size } { unit } ).","spark.form.upload.check.error.type":"Unsupported file format.","spark.form.upload.DOMProgress.text":"Loading...","spark.form.upload.prepare.button.select":"Select","spark.form.upload.prepare.drop":"Add a file","spark.form.upload.remove.confirm.text":"Do you really want to delete the file \"{filename}\"?","spark.form.upload.uploadFile.callback.error":"An error has occurred during download.","spark.form.url.check.error":"Invalid URL.","spark.notification.button.nextNotice":"Next error","spark.notification.button.prevNotice":"Previous error","spark.template.accordion.button.title":"More","spark.template.button.cancel":"Cancel","spark.template.button.close":"Close","spark.template.button.continue":"Continue","spark.template.button.delete":"Delete","spark.template.button.edit":"Edit","spark.template.button.submit":"Send","spark.template.button.view":"View","spark.template.confirm.confirmText.label":"Please enter \"{ confirmText }\"","spark.template.confirm.error":"The text entered is incorrect","spark.template.editable.create.button.submit":"Confirm","spark.template.editable.create.save.error":"Unable to save changes.","spark.template.loading.text":"Loading...","spark.template.notification.save":"Saved","spark.template.table.count.checked.all.button":"All { nbDisplayed } lines on this page are selected. <u>Select all { truncatedNb } lines<\/u>.","spark.template.table.count.checked.all.buttonUntruncated":"All { nbDisplayed } lines on this page are selected. <u>Select all lines<\/u>.","spark.template.table.count.checked.all.text":"All rows are selected ","spark.template.table.count.checked.truncated":"{ nbChecked } row(s) selected of { nbTotal }","spark.template.table.count.checked.untruncated":"{ nbChecked } selected row(s) out of a large number of rows.","spark.template.table.count.displayed.empty":"No row(s)","spark.template.table.count.displayed.rows":"{ nbDisplayed } row(s).","spark.template.table.count.displayed.truncated":"{ nbDisplayed } displayed row(s) out of { truncatedNb }.","spark.template.table.count.displayed.untruncated":"{ nbDisplayed } displayed row(s) out of a large number of rows.","spark.template.table.exports.empty":"The table is empty!","spark.template.table.
215warning.partialSorting":"You have just displayed a maximum of 50 additional lines. The sorting does not apply to the newly loaded rows. Rerun the sorting on all displayed rows.","fraud.quickEmails.probationLimit":"You cannot contact these many people. You only have {remaining} possible emails today."},window.translations);
216    window.translations = Object.assign({"seePassword":"Show password"},window.translations);
217</script>
217
218
219<!-- jQuery -->
220<script
221    nonce="e755256c-fcec-4a47-85f6-89d949d705bc"
222    src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"
223    integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
224    crossorigin="anonymous"
225></script>
vendor: 1 bytes, line 225
225
226<script
227    nonce="e755256c-fcec-4a47-85f6-89d949d705bc"
228    src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.14.1/jquery-ui.min.js"
229    integrity="sha512-MSOo1aY+3pXCOCdGAYoBZ6YGI0aragoQsg1mKKBHXCYPIWxamwOE7Drh+N5CPgGI5SA9IEKJiPjdfqWFWmZtRA=="
230    crossorigin="anonymous"
231></script>
vendor: 1 bytes, line 231
231
232<script
233    nonce="e755256c-fcec-4a47-85f6-89d949d705bc"
234    src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.9.2/i18n/jquery-ui-i18n.min.js"
235    integrity="sha256-q/EiPw4hDxf7AKJEkIHWBspsML3nLL0VB729yuwz+cc="
236    crossorigin="anonymous"
237></script>
vendor: 1 bytes, line 237
237
238<script
239    nonce="e755256c-fcec-4a47-85f6-89d949d705bc"
240    src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-switch/3.3.2/js/bootstrap-switch.min.js"
241    integrity="sha256-sAkXLwDFSAB/S09JCOWRvnoOnhGYDu9VqMnbCKAhMzI="
242    crossorigin="anonymous"
243></script>
vendor: 1 bytes, line 243
243
244<script
245    nonce="e755256c-fcec-4a47-85f6-89d949d705bc"
246    src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.9/jquery.mousewheel.min.js"
247    integrity="sha256-+ZWJyex7JtGOxCSSRu/QgpDkiTWQEqBuE2O8xHMVZCQ="
248    crossorigin="anonymous"
249></script>
249
250
251<!-- Layout -->
252<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc" src="https://cdn.assoconnect.com/public/build/js/common.-.layout.-.connexion.e448b25.js"></script>
252
253
254<!-- CKEditor -->
255
256<!-- intl-tel-input -->
257
258<!-- reCAPTCHA -->
259
260<!-- Validator -->
261
262<!-- Algolia -->
263	<!-- Placé à l'extérieur pour l'annuaire -->
264	
264<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
265		var ALGOLIA_CONFIG = {
266			allowTyposOnNumericTokens:	false,
267			facets:						[],
268			facetFilters:				[],
269			query:						"",
270			page:						0,
271			numericFilters:				[],
272			removeWordsIfNoResults:		"lastWords",
273			tagFilters:					[],
274			typoTolerance:				"strict",
275			advancedSyntax:				true
276		};
277	</script>
277
278
279<!-- Charts.js -->
280
281<!-- Choices.js -->
282
283<!-- ContentTools -->
284
285<!-- Cropper -->
286
287<!-- Dompurify -->
288
289<!-- FullCalendar -->
290
291<!-- HTML2Canvas -->
292
293<!-- Parallax -->
294
295<!-- TimeAgo -->
296
297<!-- Simplelightbox -->
298
299<!-- Leafleft -->
300<!-- Leaflet MarkerCluster -->
301
302
303
304
305
306
307<!-- Iubenda -->
308<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
309    </script>
309
310
311<!-- Tracking -->
312<script async nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
313    
314
315    /**
316     * RudderStack common functions
317     */
318
319    /**
320     * This method allows you to track any actions that your users might perform. Each of these actions is commonly referred to as an event.
321     *
322     * https://docs.rudderstack.com/stream-sources/rudderstack-sdk-integration-guides/rudderstack-javascript-sdk#3-4-track
323     */
324    function track(event, properties, options, callback) {
325                    if(window.rudderanalytics) {
326                window.rudderanalytics.track(event, properties, options, callback);
327            }
328            }
329
330    /**
331     * This method lets you record information about the web page being viewed by the user.
332     *
333     */
334    function trackPage(event, properties, options, callback) {
335                    if(window.rudderanalytics) {
336                window.rudderanalytics.track(event, properties, options, callback);
337            }
338            }
339
340    /**
341     * This method allows you to track any click that your users might perform on a link.
342     *
343     * @param {string} selector	jQuery selector of the tracked link
344     * Otherwise same params of the track function: https://docs.rudderstack.com/stream-sources/rudderstack-sdk-integration-guides/rudderstack-javascript-sdk#3-4-track
345     */
346    function trackLink(selector, event, properties, options, callback) {
347                    $(selector).on("click", function(e) {
348                if(window.rudderanalytics) {
349                    var _this = $(this);
350                    window.rudderanalytics.track(event, properties, options, callback);
351                    // Wait for the tracking request to have time to go
352                    var timeoutDelay = 300;
353                    setTimeout(function() {
354                        var href = _this.attr("href");
355                        var target = _this.attr("target");
356                        // New tab
357                        if (target) {
358                            window.open(href, target || '_blank');
359                        }
360                        // Current tab
361                        else {
362                            window.location.href = href;
363                        }
364                    }, timeoutDelay);
365                    return false;
366                }
367            });
368            }
369
370    // GTM
371    </script>
371
372	</head>
373	<body>
374		<!-- Layout -->
375		<div id="layoutWrapper" class="nav">
376
377<!-- Thème -->
378<style nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
379
380	/**
381	 * Couleur principale
382	 */
383
384	/* Transforme @blue et @body en blanc en fonction de la couleur du menu */
385	
386	/* Color */
387	h1,
388	h3,
389	.textImportant,
390	a,
391	a:link,
392	a:visited,
393	a:active,
394	.colorBlue,
395	.checkbox input[type="checkbox"].custom-checkbox:checked + .icons,
396	.checkbox input[type="checkbox"].custom-checkbox:checked + .icons .icon-checked,
397	.radio input[type="radio"].custom-radio:checked + .icons,
398	.radio input[type="radio"].custom-radio:checked + .icons .icon-checked,
399	.accordion .accordionContent.accordionColor .accordionTitleWrapper .accordionTitle,
400	.buttonWhite,
401	.buttonWhiteAlt:active,
402	.buttonWhiteBlue,
403	.buttonTransparent:hover,
404	.radioAlt.colorWhite.radioAltSelected,
405    #thumbPostSlider .thumbPostSlide .thumbPostSlideContent h2,
406	.thumbPostWrapper h2,
407	.thumbWrapper .thumbCommon .thumbDetails .thumbName,
408	.thumbWrapper .thumbCommon .thumbDetails .thumbMore,
409	#templateBreadcrumb #breadCrumbItems .breadCrumbNextStep:not(.button):hover,
410	#templateBreadcrumb #breadCrumbItems .breadCrumbNextStep .breadCrumbItem.breadCrumbActive,
411	#templateTabulation .active,
412	#messagesWrapper .message .messageContent .messageIcon svg {
413		color: #22a7f0;
414	}
415	#agendaWrapper,
416	div:not(#agendaWrapper) > #agendaEvent,
417	#agendaWrapper #agendaEvent #agendaEventName,
418	div:not(#agendaWrapper) > #agendaEvent #agendaEventName,
419	#agendaWrapper #agendaList .agendaDate,
420	#donationPicture #donationInfoWrapper #donationInfo #donationSubmitButton {
421		color: #ffffff;
422	}
423
424    /* Fix event colors */
425    #agendaEvent #agendaEventDate, #agendaEvent #agendaEventDescription, #agendaEvent #agendaEventAddress {
426        color: #ffffff;
427    }
428
429    #agendaEventReturn svg path{
430        fill: #22a7f0;
431    }
432
433	#templateNavWrapper #templateNav ul li,
434	#templateNavWrapper #templateNav ul li a,
435	#templateNavBar,
436	#templateNavSubBarWrapper,
437	#templateNavSubBarWrapper #templateNavSubBar a,
438	#templateSubNavWrapper ul li a,
439	#agendaWrapper #agendaList .agendaListEvent.colorBodyOrWhite,
440	#agendaWrapper #agendaList h3.colorBodyOrWhite,
441	#agendaWrapper #agendaList .eventColor.colorBodyOrWhite,
442	#eventWrapper #eventDateLeftWrapper{
443		color: #ffffff;
444	}
445    #eventWrapper #eventPicture #eventCountdownWrapper #eventButton {
446        color: #ffffff;
447    }
448	.buttonWhiteBlue:hover {
449		color: #1e96d8;
450	}
451	.buttonWhiteBlue:active,
452	.buttonTransparent:active {
453		color: #1c8dcc;
454	}
455	#agendaWrapper #agendaList h3.colorBodyOrWhite,
456	#agendaWrapper #agendaList .eventColor.colorBodyOrWhite {
457		border-color: #ffffff;
458	}
459	.buttonBlue,
460	.backgroundBlue {
461		color: #ffffff;
462	}
463    .backgroundTheme {
464        background-color: #7e8b99;
465        color: #ffffff;
466    }
467	/* Background */
468	.backgroundBlue,
469	.accordion .accordionContent.accordionColor .accordionTitleWrapper .accordionTitleNumber,
470	.buttonBlue,
471	.dialogDotWrapper .dialogDot.dialogDotCurrent,
472	.progressbar-blue div,
473	.radioAlt.colorBlue:not(.eventColor), /* :not(.eventColor) pour ne pas modifier les puces de l'agenda */
474	#messagesWrapper .message,
475	#boxes .box[data-type="button"] .buttonDIYContainer .buttonDIYWrapper,
476	#gridWrapper .box .buttonDIYContainer .buttonDIYWrapper,
477	#eventWrapper #eventPicture #eventCountdownWrapper #eventButton,
478	#templateNavWrapper #templateNav #navBasket {
479		background-color: #22a7f0;
480	}
481	.formUpload .formUploadInputWrapper input:hover ~ div,
482	.buttonBlue:hover,
483	.radioAlt.colorBlue.radioAltSelected,
484	#messagesWrapper .message,
485	#eventWrapper #eventPicture #eventCountdownWrapper #eventButton:hover,
486	#templateNavWrapper #templateNav #navBasket:hover {
487		background-color: #1c8dcc;
488	}
489	.radioAlt.colorBlue:hover:not(.radioAltSelected):not(.eventColor) { /* :not(.eventColor) pour ne pas modifier les puces de l'agenda */
490		background-color: #27c0ff;
491	}
492	.dialogDotWrapper .dialogDot:hover {
493		background-color: #28c8ff;
494	}
495	.buttonBlue:active,
496	#eventWrapper #eventPicture #eventCountdownWrapper #eventButton:active {
497		background-color: #1b85c0;
498	}
499	.dialogDotWrapper .dialogDot {
500		background-color: #2cd9ff;
501	}
502	.buttonWhiteBlue:active {
503		background-color: #2de1ff;
504	}
505	.buttonWhiteBlue:hover {
506		background-color: #2fe9ff;
507	}
508	/* Border */
509	.backgroundBlueLight,
510	input[type="text"]:hover,
511	input[type="search"]:hover:not(.choices__input),
512	.choices:hover,
513	input[type="password"]:hover,
514	input[type="date"]:hover,
515	input[type="tel"]:hover,
516	input[type="number"]:hover,
517	input[type="datetime-local"]:hover,
518	input[type="email"]:hover,
519	input[type="url"]:hover,
520	textarea:hover,
521	select:hover,
522	input[type="text"]:focus,
523	input[type="search"]:focus:not(.choices__input),
524	.choices.is-focused,
525	input[type="password"]:focus,
526	input[type="date"]:focus,
527	input[type="tel"]:focus,
528	input[type="number"]:focus,
529	input[type="datetime-local"]:focus,
530	input[type="email"]:focus,
531	input[type="url"]:focus,
532	textarea:focus,
533	select:focus,
534	.radioImageWrapper.radioImageChecked,
535	.accordion .accordionContent.accordionColor .accordionTitleWrapper,
536	.buttonWhiteBlue,
537	.dropdownMenu div h2,
538	.radioAlt.colorWhite.radioAltSelected,
539	#templateBreadcrumb #breadCrumbItems .breadCrumbNextStep .breadCrumbItem.breadCrumbActive,
540	#postViewMore {
541		border-color: #22a7f0;
542	}
543	#agendaWrapper #agendaEvent #agendaEventReturn,
544	div:not(#agendaWrapper) > #agendaEvent #agendaEventReturn {
545		border-color: #ffffff;
546	}
547	.buttonWhiteBlue:hover {
548		border-color: #25b7ff;
549	}
550	.buttonWhiteBlue:active {
551		border-color: #27c0ff;
552	}
553	.radioAlt.colorWhite:hover:not(.radioAltSelected),
554	.radioAlt.colorBlue:hover:not(.radioAltSelected):not(.eventColor) { /* :not(.eventColor) pour ne pas modifier les puces de l'agenda */
555		border-color: #28c8ff;
556	}
557	.radioAlt.colorBlue.radioAltSelected {
558		border-color: #1774a8;
559	}
560	.buttonWhiteAlt:active {
561		outline-color: #22a7f0;
562	}
563	.buttonWhiteAlt:hover {
564		border-color: #28c8ff;
565	}
566
567	/**
568	 * Couleur du menu
569	 */
570					@media (min-width: 1151px) {
571		#templateNavWrapper,
572		#templateNavWrapper:before,
573		#templateNavBar {
574							background-color: #7e8b99;
575								}
576		#templateSubNavWrapper {
577			background-color:
578									#8491a0							;
579		}
580					#templateHeaderWrapper #templateHeader #templateHeaderMargin {
581				display: none;
582			}
583			}
584	@media (max-width: 1150px) {
585		#templateNavWrapper,
586		#templateNavWrapper:before,
587		#templateNavBar,
588		#templateSubNavWrapper {
589			background-color: #7e8b99;
590		}
591	}
592	#templateNavSubBarWrapper,
593	#templateNavSubBarWrapper #templateNavSubBarLeft,
594	#templateNavSubBarWrapper #templateNavSubBarRight {
595		background-color: #8491a0;
596	}
597	#agendaWrapper,
598	div:not(#agendaWrapper) > #agendaEvent,
599	#donationPicture #donationInfoWrapper #donationInfo #donationSubmitButton,
600	#eventWrapper #eventDateLeftWrapper {
601		background-color: #7e8b99;
602	}
603	#eventWrapper #eventPicture #eventInfos #eventName {
604		border-color: #7e8b99;
605	}
606	/* Couleur des hovers */
607			#templateNavWrapper #templateNav ul li.active a,
608		#templateNavWrapper #templateNav ul li:not(.hideHover):hover a {
609			color: #22a7f0;
610		}
611		@media (min-width: 1151px) {
612			#templateSubNavWrapper ul li.active a,
613			#templateSubNavWrapper ul li:hover a {
614				color: #22a7f0;
615			}
616		}
617		@media (max-width: 1150px) {
618			#templateNavSubBarWrapper #templateNavSubBar li.active a {
619				color: #22a7f0;
620			}
621		}
622	
623	/**
624	 * Couleur du fond
625	 */
626	body {
627		background-color: #ffffff;
628	}
629
630	/**
631	 * Couleur du bas de page
632	 */
633	#templateFooterWrapper {
634		background-color: #47505a;
635	}
636
637	/**
638	 * Texture du menu (non applicable si le menu est transparent)
639	 */
640				#templateNavWrapper,
641		#templateNavWrapper:before,
642		#templateSubNavWrapper,
643		#templateNavBar,
644		#templateNavSubBarWrapper,
645		#templateNavSubBarWrapper #templateNavSubBarLeft,
646		#templateNavSubBarWrapper #templateNavSubBarRight {
647			background-image: url("https://assets.assoconnect.com/legacy/common/image/layout/public/textures/_blank.png");
648		}
649	
650	/**
651	 * Texture du fond
652	 */
653	body {
654		background-image: url("https://assets.assoconnect.com/legacy/common/image/layout/public/textures/_blank.png");
655	}
656
657	/**
658	 * Texture du bas de page
659	 */
660	#templateFooterWrapper {
661		background-image: url("https://assets.assoconnect.com/legacy/common/image/layout/public/textures/_blank.png");
662	}
663
664	/**
665	 * Autres
666	 */
667
668	/* Permet d'afficher le haut de page dans l'édition */
669	
670	/* Hauteur du haut de page */
671				
672	/* Position de l'image de l'organisation dans le haut de page */
673				#templateHeaderWrapper #templateHeaderVendorPictureWrapper #templateHeaderVendorPicture {
674			text-align: left;
675		}
676	
677	/* Taille texte bloc */
678	#templateHeaderBlockTitleWrapper {
679		font-size: 23px;
680	}
681
682	/* Taille image bloc */
683	#templateHeaderBlockVendorPictureWrapper img {
684		width: 0px;
685	}
686
687	/* Type de bloc */
688	#templateHeaderWrapper #templateHeader #templateHeaderBlockContainer {
689				background-color: rgba(126, 139, 153, .5);
690	}
691
692	@media (min-width: 1151px) {
693		/* Position du logo dans le menu */
694		#templateNavWrapper #templateNav #navVendorWrapper {
695							display: none;
696					}
697
698		/* Place le haut de page sous le menu si le menu est transparent */
699		
700		/* Hauteur du menu (les ">" pour ignorer les sous-menus) */
701		#templateNavWrapper #templateNav > ul > li {
702			height: 50px;
703		}
704		#templateSubNavWrapper ul li {
705			height: 40px;
706			line-height: 40px;
707		}
708		#templateNavWrapper #templateNav > ul > #navVendorPicture > div > a > img {
709			max-height: 50px;
710		}
711
712		/* Type de bloc */
713					#templateHeaderWrapper #templateHeader #templateHeaderBlockContainer {
714				background-color: transparent;
715			}
716		
717		/* La largeur du haut de page ne dépasse pas la largeur du contenu du site */
718		
719		/* Arrondi les coins du menu, du haut de page et du contenu */
720		
721		/* Séparation des différents éléments */
722		
723		/* Position du bloc */
724							#templateHeaderWrapper #templateHeader {
725				text-align: right;
726			}
727		
728		/* Texte du menu en gras */
729		
730		/* Texte du menu en majuscule */
731					#templateNavWrapper #templateNav,
732			#templateSubNavWrapper {
733				text-transform: uppercase;
734			}
735		
736		/* Cache les icônes */
737					#templateNav ._gif:not(.noHide) {
738				display: none;
739			}
740		
741		/* Espacement entre les items du menu */
742							#templateNavWrapper #templateNav ul li a,
743			#templateNavWrapper #templateNav ul li ul li a,
744			#templateSubNavWrapper ul li a {
745				padding: 0 25px;
746			}
747		
748		/* Alignement du contenu du menu */
749							#templateNavWrapper #templateNav,
750			#templateSubNavWrapper {
751				text-align: center;
752			}
753		
754		/* Hauteur du logo de l'organisation dans le haut de page */
755					#templateHeaderWrapper #templateHeaderVendorPictureWrapper #templateHeaderVendorPicture img {
756				height: 250px;
757			}
758			}
759
760	@media (max-width: 1150px) {
761	    	    #templateNavBarVendorPicture {
762	        display: none;
763	    }
764		
765		/* Cache le bloc en responsive si le site dispose d'un logo d'organisation */
766							#templateHeaderWrapper #templateHeader #templateHeaderBlockContainer {
767				display: none;
768			}
769		
770		/* Alignement du menu en fonction de la barre d'administration */
771		#templateNavWrapper {
772					top: 55px;
773				}
774
775	}
776
777	/* Fond fullscreen dans les pages personnalisées */
778			#boxes .boxLandmarkBackground {
779			width: calc(100% + 27px);
780			margin-left: -13.5px !important;
781			max-width: 1131px !important;
782		}
783	
784	/* Arrondi des champs */
785	input[type="text"],
786	input[type="search"]:not(.choices__input),
787	.choices,
788	input[type="password"],
789	input[type="date"],
790	input[type="tel"],
791	input[type="number"],
792	input[type="datetime-local"],
793	input[type="email"],
794	input[type="url"],
795	textarea {
796					border-radius: 5px;
797			padding: 9px;
798			}
799	select {
800					border-radius: 5px;
801			}
802	.selected-flag,
803	.buttonBig,
804	.buttonLarge,
805	.buttonSmall,
806	.bootstrap-switch,
807	#gridWrapper .box .buttonDIYContainer .buttonDIYWrapper,
808	#gridWrapper .box .buttonDIYContainer .buttonDIYWrapper .buttonDIY,
809	#boxes .box[data-type="button"] .buttonDIYContainer .buttonDIYWrapper,
810	#boxes .box[data-type="button"] .buttonDIYContainer .buttonDIYWrapper .buttonDIY {
811					border-radius: 5px;
812			}
813	.buttonLarge {
814					padding: 10px;
815			}
816	.buttonSmall {
817			}
818</style>
819<!-- Message -->
820<!-- Affichage Spark\Notification::message -->
821<div id="messagesWrapper">
822        	</div>
823
824<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
825    $('.message-support .messageClose').click(function(event) {
826        _spark.cookie.set("supportMessage-" + $(this).data('message-id'), "true", 1);
827    });
828</script>
828
829<!-- Misc Spark -->
830
831<div class="displayNone" id="sparkTemplateTableExportColumns">
832    <form id="sparkTemplateTableExportColumnsForm" method="POST"><input type="hidden" name="_form" value="sparkTemplateTableExportColumns"><input type="hidden" name="_origin" value="/contacts/login?redirect=%2Fpage%2F1997185-home"><input type="hidden" name="_formMulti" value="6ac512beecbdb|04b28af2d7c4a93710b66a767d762ed70bf58375">
832<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
833            $("#sparkTemplateTableExportColumnsForm").on("submit", function(){
834                var _this = $(this);
835                var renable = false;
836                if(_this.data("multi-submit-protection")){
837                    return false;
838                }
839                else{
840                    // Blocage à la prochaine soumission
841                    _this.data("multi-submit-protection", true);
842                    // Blocage & chargement sur les boutons
843                    _this.find("button[type='submit']").each(function(){
844                        var text = $(this).text();
845                        var buttonDOM = $(this);
846                        var buttonInterval;
847                        buttonDOM
848                            .addClass("disabled")
849                            .prop("disabled", true)
850                            .css("width", buttonDOM.outerWidth() + "px")
851                            .text(".")
852                            .inDOM(function() {
853                                // Il ne faut pas utiliser de gif car Safari est incompatible (fix #12514)
854                                buttonInterval = setInterval(function() {
855                                    if(buttonDOM.text().length === 3) {
856                                        buttonDOM.text(".");
857                                    }
858                                    else {
859                                        buttonDOM.text(buttonDOM.text() + ".");
860                                    }
861                                }, 300);
862                            });
863                        // Déblocage au bout de 1 seconde
864                        if(renable){
865                            window.setTimeout(function(){
866                                clearInterval(buttonInterval);
867                                buttonDOM
868                                    .prop("disabled", false)
869                                    .removeClass("disabled")
870                                    .removeAttr("style")
871                                    .text(text);
872                            }, 1000);
873                        }
874                    });
875                    // Déblocage au bout de 1 seconde
876                    if(renable){
877                        window.setTimeout(function(){
878                            _this.data("multi-submit-protection", false);
879                        }, 1000);
880                    }
881                    // Retour
882                    return true;
883                }
884            });
885        </script>
885    <div id="sparkTableExportColumnWrapper" class=""><div class="notice fontBold" id="sparkTableExportColumnNotice"></div>
886                <label
887                    id="sparkTableExportColumnLabel"
888                >
889                    Export
890                    
891                    
892                </label>
893                <div class="formContent">
894        
895                <div id="sparkTableExportColumn_allWrapper" class="radioWrapper displayInlineBlock valignTop marginRight10 ">
896                    <label class="radio" for="sparkTableExportColumn_all">
897                        <input
898                            type="radio"
899                            name="sparkTableExportColumn"
900                            id="sparkTableExportColumn_all"
901                            value="all"
902                            
903                            
904                            class=""
905                        >
906                        <span id="sparkTableExportColumn_allLabel">Export with all columns</span>
907                    </label>
908                </div>
909                
909<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
910                    if(document.readyState === "complete"){
911                        $("#sparkTableExportColumn_all").radiocheck();
912                    }
913                </script>
913
914            
915                <div id="sparkTableExportColumn_filterWrapper" class="radioWrapper displayInlineBlock valignTop marginRight10 ">
916                    <label class="radio" for="sparkTableExportColumn_filter">
917                        <input
918                            type="radio"
919                            name="sparkTableExportColumn"
920                            id="sparkTableExportColumn_filter"
921                            value="filter"
922                            
923                            
924                            class=""
925                        >
926                        <span id="sparkTableExportColumn_filterLabel">Export with the currently displayed columns</span>
927                    </label>
928                </div>
929                
929<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
930                    if(document.readyState === "complete"){
931                        $("#sparkTableExportColumn_filter").radiocheck();
932                    }
933                </script>
933
934            </div></div>    </form>
935                
935<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
936                    _spark.form.mail.initMailGroup("sparkTemplateTableExportColumns");
937                </script>
937
938                </div>
939
940<!-- Image de fond -->
941
942<!-- Template -->
943<div id="loginContentWrapper">
944	<div id="loginContent" class="backgroundLarge backgroundWhite">
945		
946<div id="loginContentMargin">
947
948	<h1>Login</h1>
949	<div class="spaceHorizontalTall"></div>
950
951	<!-- Login sso / mail / userInfo / password -->
952	<form id="loginForm" method="POST"><input type="hidden" name="_form" value="login"><input type="hidden" name="_origin" value="/contacts/login?redirect=%2Fpage%2F1997185-home"><input type="hidden" name="_formMulti" value="6ac512beeccdc|260fee5c22c8446bb08000464f01903978186e08">
952<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
953            $("#loginForm").on("submit", function(){
954                var _this = $(this);
955                var renable = false;
956                if(_this.data("multi-submit-protection")){
957                    return false;
958                }
959                else{
960                    // Blocage à la prochaine soumission
961                    _this.data("multi-submit-protection", true);
962                    // Blocage & chargement sur les boutons
963                    _this.find("button[type='submit']").each(function(){
964                        var text = $(this).text();
965                        var buttonDOM = $(this);
966                        var buttonInterval;
967                        buttonDOM
968                            .addClass("disabled")
969                            .prop("disabled", true)
970                            .css("width", buttonDOM.outerWidth() + "px")
971                            .text(".")
972                            .inDOM(function() {
973                                // Il ne faut pas utiliser de gif car Safari est incompatible (fix #12514)
974                                buttonInterval = setInterval(function() {
975                                    if(buttonDOM.text().length === 3) {
976                                        buttonDOM.text(".");
977                                    }
978                                    else {
979                                        buttonDOM.text(buttonDOM.text() + ".");
980                                    }
981                                }, 300);
982                            });
983                        // Déblocage au bout de 1 seconde
984                        if(renable){
985                            window.setTimeout(function(){
986                                clearInterval(buttonInterval);
987                                buttonDOM
988                                    .prop("disabled", false)
989                                    .removeClass("disabled")
990                                    .removeAttr("style")
991                                    .text(text);
992                            }, 1000);
993                        }
994                    });
995                    // Déblocage au bout de 1 seconde
996                    if(renable){
997                        window.setTimeout(function(){
998                            _this.data("multi-submit-protection", false);
999                        }, 1000);
1000                    }
1001                    // Retour
1002                    return true;
1003                }
1004            });
1005        </script>
1005
1006            <div  class="mailInputWrapper isSecondaryWrapper"><div class="notice fontBold" id="userMailNotice"></div>
1007                <label
1008                    id="userMailLabel"
1009                    for="userMail"
1010                >
1011                Your email address 
1012                
1013                
1014                </label>
1015                <input
1016                    type="email"
1017                    data-typo-check="false"
1018                    name="userMail"
1019                    class=""
1020                    value=""
1021                    placeholder="Your email address "
1022                    autocomplete="email"
1023                    
1024                    
1025                    id="userMail"
1026                >
1027                
1028                <div class="clearBoth"></div>
1029            </div>
1030            
1030<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
1031                $("#userMail").on("change", function() {
1032                    _spark.form.mail.check("userMail");
1033                });
1034            </script>
1034
1035            
1036    <div class="spaceHorizontalTall"></div>
1037
1038    <div id="userPasswordWrapper">
1039        <div id="userPasswordWrapper"><div class="notice fontBold" id="userPasswordNotice"></div>
1040                <label
1041                    id="userPasswordLabel"
1042                    for="userPassword"
1043                >Your Hawaii Speech Language Hearing Association password</label>
1044                <input
1045                    autocomplete="current-password"
1046                    id="userPassword"
1047                    placeholder="Your Hawaii Speech Language Hearing Association password"
1048                    name="userPassword"
1049                    type="password"
1050                >
1051            </div>
1052                <div id="forgottenPasswordDesktop" class="floatRight marginTopMinus20">
1053            <a href="/contacts/password/reset?userMail=&amp;userInfoValue=">Forgot your password?</a>        </div>
1054    </div>
1055    <div class="clearBoth"></div>
1056    <div id="loginSubmitWrapper">
1057        <div class="spaceHorizontalTall"></div>
1058        
1059            <button
1060                type="submit"
1061                id="loginSubmit"
1062                class="
1063                    button
1064                    buttonOrange
1065                    textAlignCenter
1066                    buttonLarge
1067                    
1068                    
1069                "
1070                
1071            >
1072                
1073                <span class="valignInitial">Login</span>
1074            </button>
1075            </div>
1076    <div id="forgottenPasswordMobile" class="marginTop5 displayNone">
1077        <a href="/contacts/password/reset?userMail=&amp;userInfoValue=">Forgot your password?</a>    </div>
1078
1079        <div id="miscWrapper">
1080        <div class="spaceHorizontalTall"></div>
1081        Or:        <div class="spaceHorizontalTall"></div>
1082    </div>
1083        
1084            <iframe
1085                src="https://app.springly.org/services/sso/google/424341?scope[]=id&amp;scope[]=email"
1086                width="100%"
1087                height="50"
1088                style="margin:8px;overflow:hidden;"
1089                allow="identity-credentials-get"
1090                scrolling="no"
1091                class=""
1092            ></iframe>
1093                <div class="notice fontBold" id="ssoTokenNotice"></div>
1094            <input
1095                type="hidden"
1096                name="ssoToken"
1097                id="ssoToken"
1098                value=""
1099            >
1100            
1101	</form>
1102                
1102<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
1103                    _spark.form.mail.initMailGroup("login");
1104                </script>
1104
1105                
1106			<div class="separatorHorizontal"></div>
1107		
1108                <a
1109                    id="registerButtonLink"
1110                    href="https://www.hsha.org/contacts/registration?redirect=%2Fpage%2F1997185-home"
1111                    class=""
1112                    target=""
1113                    rel="noopener"
1114                >
1115            <div
1116                id="registerButton"
1117                class="
1118                    button
1119                    textAlignCenter
1120                    buttonBlue
1121                    buttonLarge
1122                    
1123                    valignMiddle
1124                "
1125            ><span class="valignInitial">Create an account </span></div></a>
1126            	
1127</div>
1128					            				<div class="marginTop20" id="propelledBy">
1129                    Powered by Springly, the software for nonprofits by nonprofit experts				</div>
1130						</div>
1131	</div>
1132<div id="loginBackground"></div>
1133
1134<!-- Footer - Global -->
1135		</div>
1136		
1137		<!-- JS -->
1138		    
1138<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
1139        
1140/**
1141 * SSO
1142 */
1143window.addEventListener("message", function(event) {
1144    // Vérification de la source
1145    if (
1146        event.origin === "https:\/\/app.springly.org"        && event.data.action === "sso.login"
1147    ) {
1148        // Remplissage
1149        $("#ssoToken").val(event.data.token);
1150        // Soumission
1151        $("#loginForm").submit();
1152    }
1153});
1154
1155document.querySelector('#userMail').addEventListener('input', function (event) {
1156    let userMail = event.target.value;
1157    let patterns = {
1158        'PROD' : /^[a-z\.]*[^+]@(assoconnect\.com|springly\.org)/
1159    }
1160    let env = "PROD";
1161    console.log(patterns[env], env);
1162    if (undefined === patterns[env]) {
1163        return;
1164    }
1165
1166    let items = document
1167        .querySelectorAll('#userPasswordWrapper, #forgottenPasswordMobile, #loginSubmitWrapper, #miscWrapper');
1168    if (null !== userMail.match(patterns[env])) {
1169        items.forEach((item) => $(item).hide());
1170    } else {
1171        items.forEach((item) => $(item).show());
1172    }
1173});
1174
1175(function() {
1176    let userPassword = document.querySelector('#userPassword'),
1177        checkboxSeePassword = _spark.form.model.checkbox('seePassword', trans("seePassword"), 1, 0).get(0),
1178        div = document.createElement('div')
1179
1180    div.classList = 'textAlignLeft';
1181    div.append(checkboxSeePassword);
1182    userPassword.after(div);
1183
1184    checkboxSeePassword.querySelector('input').addEventListener('change', function(){
1185        if(this.checked) {
1186            userPassword.type = 'text';
1187        } else {
1188            userPassword.type = 'password';
1189        }
1190    })
1191})();
1192    </script>
vendor: 1 bytes, line 1192
1192
1193<script nonce="e755256c-fcec-4a47-85f6-89d949d705bc">
1194    if(window.console && window.console.log){
1195        // Affichage des notices non capturées
1196            }
1197</script>
1197
1198
1199		
1200					
1200<script
1201				nonce="e755256c-fcec-4a47-85f6-89d949d705bc"
1202				src="https://cdn.hub-prod.team.blue/loader/widget-loader.js"
1203				data-teamblue-footer
1204				data-footer="hidden"
1205			></script>
1205
1206			</body>
1207</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.