CINXE.COM
Hotjar
<!doctype html> <html> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://insights.hotjar.com/login?demo","20210812065422","https://web.archive.org/","web","/_static/", "1628751262"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <base href="/web/20210812065422/https://insights.hotjar.com/"/> <title>Hotjar</title> <meta charset="UTF-8"/> <meta content="width=device-width,initial-scale=1" name="viewport"/> <meta content="origin" name="referrer"/> <meta content="origin-when-cross-origin" name="referrer"/> <meta content="See how users are really using your website, collect feedback and turn more users into customers." name="description"/> <meta content="Hotjar" property="og:title"/> <meta content="See how users are really using your website, collect feedback and turn more users into customers." property="og:description"/> <meta content="https://web.archive.org/web/20210812065422/https://insights.hotjar.com/" property="og:url"/> <meta content="Hotjar" property="og:site_name"/> <meta content="6524996da2667e519fadf8e2b4baade0" name="detectify-verification"/> <link href="/web/20210812065422im_/https://insights.hotjar.com/static/favicon.hash-ff283a.ico" rel="shortcut icon" id="favicon"/> <script>function runCodeAfterCheck(t,o,n){var i=0;n=n||150,function e(){t()?o():i<=3&&(i++,setTimeout(e,n))}()}function tryRunThirdPartyMethod(t,o,n){try{t()}catch(i){0<=--n&&setTimeout((function(){tryRunThirdPartyMethod(t,o,n)}),o)}}function getBasedOnEnvironment(t){return"insights.hotjar.com"===document.location.host&&"prod"in t?t.prod:document.location.host.match(/^insights-(.+).live.eks.hotjar.com$/)&&"staging"in t||"insights-staging.hotjar.com"===document.location.host&&"staging"in t?t.staging:"local.hotjar.com"===document.location.host?-1===document.cookie.indexOf("TEST_ENV=1")&&!0!==window.__TESTS__||!("test"in t)?"dev"in t?t.dev:t.default:t.test:t.default}</script> <link href="/web/20210812065422cs_/https://insights.hotjar.com/static/chunk.hash-0fb6c1.css" rel="stylesheet"><link href="/web/20210812065422cs_/https://insights.hotjar.com/static/chunk.hash-a04b8c.css" rel="stylesheet"><link href="/web/20210812065422cs_/https://insights.hotjar.com/static/chunk.hash-fda372.css" rel="stylesheet"><link href="/web/20210812065422cs_/https://insights.hotjar.com/static/chunk.hash-fcd58c.css" rel="stylesheet"><link href="/web/20210812065422cs_/https://insights.hotjar.com/static/chunk.hash-694177.css" rel="stylesheet"><link href="/web/20210812065422cs_/https://insights.hotjar.com/static/insights.hash-d1fd0e.css" rel="stylesheet"></head> <script id="modal_billing_warning.html" type="text/ng-template"> <div class="center modal-body"> <button class=close ng-click=close() type=button>×</button> <h2 class="center modal-title" ng-if="model.warningType === 'recurring-payment-failed'">Payment failure.</h2> <h2 class="center modal-title" ng-if="model.warningType === 'card-expiring'">Card will soon expire.</h2> <payment-method-warning-card expiration-date=model.paymentMethod.expiryDate failed-attempts-count=model.recurringPayment.failureCount payment-method-label=model.paymentMethod.label payment-method-type=model.paymentMethod.type> </payment-method-warning-card> <div class=payment-method-warning-message ng-if="model.warningType === 'recurring-payment-failed'"> <span ng-if="model.recurringPayment.failureCount === 1"> We were unable to process the payment for the subscription of {{ model.siteNames }}. <span ng-class="{semibold: model.isAccountOwner}">In order to not disrupt data collection for you and your team, it's important that the payment method is updated if necessary.</span> </span> <span ng-if="model.recurringPayment.failureCount === 2"> We attempted to process payment twice for the subscription of {{ model.siteNames }} but were unsuccessful. <span ng-class="{semibold: model.isAccountOwner}">In order to not disrupt data collection for you and your team, it's important that the payment method is updated.</span> </span> <span ng-if="model.recurringPayment.failureCount === 3 && !model.gracePeriodOver"> After several attempts, we were still unable to process payment for the subscription of {{ model.siteNames }}. The last attempt was on {{ model.recurringPayment.lastFailureDate | stringDate: true }}. <span ng-class="{semibold: model.isAccountOwner}">Unless the payment method is updated and payment is settled, your site plan(s) will be downgraded to Basic after 14 days since the last attempt.</span> </span> <span ng-if="model.recurringPayment.failureCount === 3 && model.gracePeriodOver"> After several attempts, we were still unable to process payment for the subscription of {{ model.siteNames }}. The last attempt was on {{ model.recurringPayment.lastFailureDate | stringDate: true }}. <span ng-class="{semibold: model.isAccountOwner}">Since the payment method was not updated within 14 days after the last attempt, your site plans have been downgraded to Basic.</span> </span> </div> <div class=payment-method-warning-message ng-if="model.warningType === 'card-expiring'"> The card being used for {{ model.siteNames }} will soon expire. In order to retain your Hotjar subscription active, <span ng-class="{semibold: model.isAccountOwner}">it's important that the payment method is updated by the end of {{ model.paymentMethod.expiryDate | monthNameFromEpoch }}.</span> </div> <div class=center id=payment-method-warning-action> <span ng-if=model.isAccountOwner> <button class="btn btn-lg btn-primary" ng-click=updatePaymentMethod() type=button id=continue-from-billing-warning> Update payment method </button> </span> <span ng-if=!model.isAccountOwner> <span class=semibold> As the account owner, only '{{ model.owner.name }}' ({{ model.owner.email }}) can update the payment method. </span> We have already sent them an email but suggest you reach out to them as well in case they missed it. </span> </div> </div> </script> <script id="modal_company_details_v2.html" type="text/ng-template"> <react-company-details-modal is-open="ctrl.model.modalVersion === 'zuoraModal'" on-close=$dismiss on-submit=ctrl.onSubmitCompanyDetailsWithZuora></react-company-details-modal> <span ng-if="ctrl.model.modalVersion === 'legacyReactModal'"> <react-legacy-company-details on-close=$dismiss on-submit=ctrl.onSubmitCompanyDetailsWithDS opened="ctrl.model.modalVersion === 'legacyReactModal'"></react-legacy-company-details> </span> <div class="modal-body pan" ng-if="ctrl.model.modalVersion === 'legacyAngularModal'" id=modal-company-details> <button class="close white" type=button ng-click=$dismiss()>×</button> <h2 class=modal-title>Edit Organization details</h2> <div class="form-info relative"> <form autocomplete=off class=form-landscape name=ctrl.model.forms.companyDetails ng-submit-with-loader=ctrl.onSubmitCompanyDetails() novalidate> <p class=note-top> For tax and invoicing purposes, please enter and verify this information about your Organization: </p> <div class="form-group clearfix mth" ng-class="{error: ctrl.model.forms.companyDetails.submitted && ctrl.model.forms.companyDetails.companyName.$invalid}"> <label for=companyName class=not-required>Org. Name</label> <div class=pull-left> <input class="form-control companyName" id=companyName maxlength=50 name=companyName ng-model=ctrl.model.companyDetails.company placeholder="e.g. SomeCompany Inc."/> <div class=clear></div> <div class=form-error ng-if="ctrl.model.forms.companyDetails.submitted && ctrl.model.forms.companyDetails.companyName.$invalid"> This field is required. </div> </div> </div> <div class="form-group clearfix"> <label for=address class=not-required>Org. Address</label> <div class=pull-left> <textarea class=form-control id=address maxlength=255 name=address ng-model=ctrl.model.companyDetails.address></textarea> </div> </div> <div class="form-group clearfix" ng-class="{error: ctrl.model.forms.companyDetails.submitted && ctrl.model.forms.companyDetails.country.$invalid}"> <label for=country>Country<span class=required-marker>*</span></label> <div class=pull-left> <select class="form-control country" id=country name=country ng-change=ctrl.onCountryChange() ng-model=ctrl.model.companyDetails.countryCode ng-options="country.value as country.label for country in ctrl.model.countries" required> <option value="">Please select...</option> </select> <div class=form-error ng-if="ctrl.model.forms.companyDetails.submitted && ctrl.model.forms.companyDetails.country.$invalid"> This field is required. </div> </div> </div> <div class="form-group clearfix" id=company-details-vat-field ng-class="{ 'form-group-with-addon': ctrl.model.salesTax.numberPrefix, 'error': ctrl.model.forms.companyDetails.submitted && (ctrl.model.forms.companyDetails.vatNumber.$error.invalid === true || ctrl.model.forms.companyDetails.vatNumber.$error.failure === true) }" ng-show=ctrl.model.salesTax> <label for=vatNumber class=not-required>{{ ctrl.model.salesTax.type.label }} Number</label> <div class=pull-left> <span class=addon ng-if=ctrl.model.salesTax.numberPrefix> {{ ctrl.model.salesTax.numberPrefix }} </span> <input class="form-control vatNumber" id=vatNumber maxlength=50 name=vatNumber ng-model=ctrl.model.companyDetails.vatNumber /> <div class=clear></div> <div class=form-error ng-if="ctrl.model.forms.companyDetails.submitted && ctrl.model.forms.companyDetails.vatNumber.$error.invalid === true"> This {{ ctrl.model.salesTax.type.label }} number is invalid. </div> <div class=form-error ng-if="ctrl.model.forms.companyDetails.submitted && ctrl.model.forms.companyDetails.vatNumber.$error.failure === true"> The 3rd party service we use to validate {{ ctrl.model.salesTax.type.label }} numbers is unavailable. Kindly try again in a few hours. </div> </div> <div class="form-group clearfix" ng-show=ctrl.model.showNotification> <div class="alert alert-info alert-multiline man mtb" ng-if=!ctrl.model.salesTax.reverseChargeInapplicable> Failure to supply a {{ ctrl.model.salesTax.type.fullName }} ({{ ctrl.model.salesTax.type.label }}) number requires us to add {{ ctrl.model.salesTax.rate }}% {{ ctrl.model.salesTax.label }} to your total bill. </div> <div class="alert alert-info alert-multiline man mtb" ng-if=ctrl.model.salesTax.reverseChargeInapplicable> We are required to add {{ ctrl.model.salesTax.rate }}% {{ ctrl.model.salesTax.type.label }} to your total bill. All charges we effect will have a corresponding invoice in your account's Invoices page. </div> </div> </div> <div class="form-group mbn mts"> <label> </label> <div class=pull-left> <button class="btn btn-lg btn-primary" type=submit id=continue> <span class=spinner></span> <span class=text-default>Continue</span> <span class=text-loading>Please wait...</span> </button> </div> <div class=clear></div> <div class="center font12 mtm" ng-if=ctrl.model.forms.showVatCheckText id=vatValidationText> We're validating your {{ ctrl.model.salesTax.type.label }} number. This can take up to 30 seconds. </div> </div> </form> </div> </div> </script> <script id="modal_expired_v2.html" type="text/ng-template"> <div class="modal-body pan"> <h2 class=modal-title ng-if="!model.paymentExpired && model.sites.length === 1"> Your trial of Hotjar {{ model.sites[0].plan.featureGroup.toUpperCase() }} has ended. </h2> <h2 class=modal-title ng-if="!model.paymentExpired && model.sites.length > 1">Your Hotjar trial has ended.</h2> <h2 class=modal-title ng-if=model.paymentExpired>Your account has expired.</h2> <div class=form-expired> <div class=payment-loading ng-if=!model.loaded> <span class=spinner></span> <br/>Please wait... </div> <form name=model.forms.expired ng-if=model.loaded novalidate> <div class="expired-content expired-single" ng-if="model.sites.length === 1"> <h2 class=font18> Subscribe to Hotjar <span class=uppercase>{{ model.sites[0].plan.featureGroup }}</span> to continue enjoying<br/>uninterrupted Insights. </h2> <button class="btn btn-lg" id=btn-continue-expired-plan ng-click-with-loader=updatePlans() type=button ng-class="{'btn-purple': model.sites[0].plan.featureGroup === 'plus', 'btn-gold': model.sites[0].plan.featureGroup === 'business'}"> <span class=spinner></span> <span class=text-default>Continue with Hotjar {{ model.sites[0].plan.featureGroup.toUpperCase() }}</span> <span class=text-loading>Please wait...</span> </button> <h2 class=font14 ng-show=model.currencySymbol> Only <span class=sums ng-if="model.sites[0].percentage_discount > 0"> <div class="inline underline-dashed" data-tooltip-append-to-body=true data-tooltip-placement=top tooltip-html-unsafe="This site benefits from a discount of {{ model.sites[0].percentage_discount }}%.</div>"> {{ prettifyCost(costSpec(model.sites[0]).totalMonthly) }} </div> </span> <span class="sums semibold" ng-if="model.sites[0].percentage_discount === 0"> {{ prettifyCost(model.cost.discountedTotal) }} </span> per month for unlimited team members and uninterrupted insights. </h2> <hr/> <p class=note> Or <a id=link-downgrade ng-click=downgradeSiteToBasic(model.sites[0])>downgrade</a> to our limited free account – Hotjar Basic </p> <a href=https://www.hotjar.com/pricing target=_blank class="black underline">Compare BASIC and <span class=uppercase>{{ model.sites[0].plan.featureGroup }}</span></a> </div> <div class=expired-content ng-if="model.sites.length > 1"> <h2 class=font16 ng-if=!model.paymentExpired> To continue enjoying uninterrupted insights and advanced features with Hotjar, you need to add a payment method to your account. </h2> <h2 class=font16 ng-if=model.paymentExpired> To continue enjoying uninterrupted insights and advanced features with Hotjar, you need to either downgrade to Basic or reactivate your subscription. </h2> <div class=site-plans> <div class="mth org-box"> <div class=site-box ng-class="{'first-site': $first}" ng-repeat="site in model.sites track by site.id"> <div class=details> <div class="ellipsis site-name">{{ site.name }}</div> <div class=mtb> <div class=data-collection> <a href=https://help.hotjar.com/hc/en-us/articles/360012620453 target=_blank data-tooltip-append-to-body=true tooltip="When traffic reaches set thresholds, Hotjar will automatically use a sample of your users to generate your results. Click to learn more."> <label>Plan</label> <span class="icon-after icon-info icon-s"></span> </a> <react-plan-select-dropdown account=model.account active-plan-id=site.plan.identifier id="expiredSampleRateDropdown{{ $index }}" ng-if=!site.lock_plan on-change=site.changePlanId></react-plan-select-dropdown> <div class=ptm ng-if=site.lock_plan> <span class="badge badge-plan-md badge-plan mln mrm {{ site.plan.featureGroup }}"> {{ site.plan.featureGroup | capitalize }} </span> <span ng-if=site.plan.ccDailyAllowance> {{ site.plan.ccDailyAllowance | abbrNumber }} daily sessions </span> <span ng-if=!site.plan.ccDailyAllowance> {{ site.plan.sampleRate | abbrNumber }} daily pageviews </span> <span class="icon-after icon-lock red" ng-if=site.lock_plan data-tooltip-append-to-body=true tooltip="Site plan details are locked. Please contact support for more information."></span> </div> </div> <div class=clear></div> </div> </div> <div class="cost transparent"> <div ng-class="{'single-line': site.plan.featureGroup === 'basic' || costSpec(site).percentage_discount === 0}"> <span class=total>{{ prettifyCost(costSpec(site).totalMonthly) }}</span> <span class=full ng-hide="site.plan.featureGroup === 'basic' || costSpec(site).fullMonthly === costSpec(site).totalMonthly">{{ prettifyCost(costSpec(site).fullMonthly) }}</span> <br/> <span class=note ng-show="site.plan.featureGroup !== 'basic' && costSpec(site).percentage_discount">{{ costSpec(site).percentage_discount }}% Discount applies.</span> </div> </div> <div class=clear></div> </div> <div class="site-box total-cost"> <div class=total-cost-label-container> <span class=total-cost-label>Total cost per month:</span> </div> <div class=total-cost-value-container> <span class=sums ng-if="model.cost.total !== model.cost.discountedTotal"> <div class="inline underline-dashed" data-tooltip-append-to-body=true data-tooltip-placement=top tooltip-html-unsafe="Your account benefits from a discount of {{ prettifyCost(totalMonetaryDiscount()) }}.</div>"> {{ prettifyCost(model.cost.discountedTotal) }} <span class=full>{{ prettifyCost(model.cost.total) }}</span> </div> </span> <span class="sums semibold" ng-if="model.cost.total === model.cost.discountedTotal"> {{ prettifyCost(model.cost.discountedTotal) }} </span> </div> </div> </div> </div> </div> </form> </div> </div> <div class=modal-footer> <div class="money-back pull-left"> <div class="mrm money-back-badge"> <img src=/static/money-back.hash-1ada86.png width=40 /> </div> <p class=money-back-text>30 Day Money Back Guarantee.<br/>100% satisfied or your money back.</p> </div> <div class=pull-right> <button class="btn btn-lg btn-primary" id=btn-continue-expired-plan ng-click-with-loader=updatePlans() type=button> <span class=spinner></span> <span class=text-default>Continue To Payment</span> <span class=text-loading>Please wait...</span> </button> </div> </div> </script> <script id="modal_update_purchase_order_number.html" type="text/ng-template"> <form name=forms.updatePurchaseOrderNumber ng-submit=$close(ctrl.model.po_number) novalidate> <div class=modal-body> <button class=close ng-click=$dismiss() type=button>×</button> <h2 class=modal-title>Update Purchase Order number</h2> You can enter a Purchase Order (PO) number for invoice {{ ctrl.model.invoice.id }} here. If you set one, it will also be present on the invoice when you download it. <div class="form-group mbn mtb"> <div> <input class=form-control id=po_number maxlength=250 name=po_number ng-model=ctrl.model.po_number placeholder="Enter your Purchase Order number…" required/> </div> </div> </div> <div class=modal-footer> <button class="btn btn-clean pull-left" ng-click=$dismiss() type=button>Cancel</button> <button class="btn btn-primary pull-right" id=submitPurchaseOrderNumber> <span class=text-default>Update</span> </button> </div> </form> </script> <script id="modal_payments_v2.html" type="text/ng-template"> <div ng-if="ctrl.model.modalVersion === 'zuoraModal'"> <react-payment-details account=ctrl.model.account cost-specs=ctrl.model.costSpecs initial-billing-cycle=ctrl.model.paymentFrequency on-close=$dismiss on-error=ctrl.onError on-success=ctrl.onSuccess></react-payment-details> </div> <div ng-if="ctrl.model.modalVersion === 'legacyReactModal'"> <react-legacy-payment-details on-close=$dismiss on-success=ctrl.onSuccess opened=true></react-legacy-payment-details> </div> <div class="modal-body pan" ng-if="ctrl.model.modalVersion === 'legacyAngularModal'" id=modal-payments id=modal-payments> <button class="close white" ng-click=$dismiss() type=button>×</button> <h2 class=modal-title>Set payment details</h2> <div ng-if=ctrl.model.isYearlyAccount style=padding:30px> Your billing cycle does not support payments through the Hotjar interface directly. Please contact support through the Help menu so we can help settle the payment. </div> <div ng-if=!ctrl.model.isYearlyAccount> <div ng-if=ctrl.model.showBillingCycleChange id=billing-cycle-change ng-show=ctrl.model.forms.payment.ready> <react-billing-cycle-selector billing-cycle=ctrl.model.paymentFrequency monthly-amounts=ctrl.model.displayCosts.monthly ng-if="ctrl.model.initialPaymentFrequency === 'monthly'" on-change=ctrl.applyBillingCycle yearly-amounts=ctrl.model.displayCosts.yearly /> <div class=form-error ng-if=ctrl.model.fieldErrors.paymentFrequency> Please select whether you would like to pay monthly or yearly. </div> </div> <div class=payment-loading ng-hide=ctrl.model.forms.payment.ready> <span class=spinner></span> <br/>Please wait... </div> <div class="bottom-section section" ng-show=ctrl.model.forms.payment.ready> <div class="alert alert-danger" ng-show="ctrl.model.forms.payment.errorMessage && ctrl.model.cardTypeAccepted"> Payment failed: {{ ctrl.paymentErrorInfo(ctrl.model.forms.payment.errorMessage) }} </div> <div ng-show=ctrl.model.editPaymentMethod> <div class="mtn payment-method-selector" ng-if="!ctrl.model.currentPaymentMethod.available || ctrl.model.editPaymentMethod"> <div class=custom-check> <input id=payment-method-credit-card name=paymentMethod ng-model=ctrl.model.paymentMethod type=radio ng-change=ctrl.onChangePaymentMethod() value=credit_card /> <label class=man for=payment-method-credit-card>Credit Card</label> </div> <div class=custom-check> <input id=payment-method-paypal name=paymentMethod ng-model=ctrl.model.paymentMethod type=radio ng-change=ctrl.onChangePaymentMethod() value=paypal /> <label class=man for=payment-method-paypal><span class="icon-after icon-paypal"></span></label> </div> </div> <div> <form autocomplete=off class=payment-form id=modal-payment-form ng-keypress=ctrl.updatePaymentDetailsOnEnterKeypress($event) ng-show="ctrl.paymentMethodToShow() === 'braintree'" ng-submit=ctrl.updatePaymentDetails()> <div ng-show="ctrl.model.paymentMethod === 'credit_card'"> <div class="mbh alert alert-danger mtb" ng-if=!ctrl.model.cardTypeAccepted> We do not accept {{ ctrl.model.cardType }} credit cards yet. Please use <a ng-click="ctrl.model.paymentMethod = 'paypal'">PayPal</a> instead or <a href=https://www.hotjar.com/contact target=_blank>Contact us</a> for assistance. </div> <div class="form-group form-group-name-on-card mbb" id=card-name-container ng-class="{error: ctrl.model.fieldErrors.givenName}"> <label class=grey9 for=card-name>Name on card</label> <div class="ellipsis inline-block reuse-card" ng-if="ctrl.model.showBillingCycleChange && ctrl.model.editPaymentMethod && ctrl.model.allowEditPaymentMethod" style=width:200px> <a ng-click=ctrl.setEditPaymentMethod(false); class="grey9 font12 underline" id=use-card-ending-in> <span ng-if="ctrl.model.currentPaymentMethod.type === 'credit_card'"> Use card ending in {{ ctrl.model.currentPaymentMethod.label }} </span> <span ng-if="ctrl.model.currentPaymentMethod.type === 'paypal'"> Use {{ ctrl.model.currentPaymentMethod.label }} </span> </a> </div> <div> <input id=card-name name=card-name ng-model=ctrl.model.cardVerificationFields.givenName class=form-control maxlength=250 placeholder="e.g. John Doe"/> <div class="inline mlm payment-options" data-tooltip="Accepted Credit Cards: American Express, Visa, Master Card, Maestro, Maestro UK and Discover." data-tooltip-append-to-body=true></div> <div class=clear></div> <div class=form-error ng-if=ctrl.model.fieldErrors.givenName> Field required. </div> </div> </div> <div class="form-group form-group-card-number" id=card-number-container ng-class="{error: ctrl.model.fieldErrors.number}"> <label class=grey9 for=modal-payment-form-number>Card number</label> <div> <div class="payment-field number" id=modal-payment-form-number></div> <div class="form-error payment-field-error" ng-if=ctrl.model.fieldErrors.number> Invalid card number. </div> </div> </div> <div class="form-group clearfix" id=card-expiration-container ng-class="{error: ctrl.model.fieldErrors.expirationMonth || ctrl.model.fieldErrors.expirationYear}"> <label class=grey9 for=modal-payment-form-expiration-month>Expiration Date</label> <div class=""> <div class="payment-field expiration-month" id=modal-payment-form-expiration-month></div> <div class="payment-field expiration-year mls" id=modal-payment-form-expiration-year></div> <div class="form-error payment-field-error" ng-if="ctrl.model.fieldErrors.expirationMonth || ctrl.model.fieldErrors.expirationYear"> Invalid date. </div> </div> </div> <div class="form-group clearfix cvv-placeholder" id=card-cvc-container ng-class="{error: ctrl.model.fieldErrors.cvv}"> <label class=grey9 for=modal-payment-form-cvv>CVC</label> <div> <div class="payment-field cvv" id=modal-payment-form-cvv></div> <span class="grey9 font14 icon-info inline info-cvc mlm" data-tooltip="The CVC number is a 3 or 4 digit security code printed on the front or back of your card." data-tooltip-append-to-body=true></span> <div class=clear></div> <div class="form-error payment-field-error" ng-if=ctrl.model.fieldErrors.cvv> Invalid CVC. </div> </div> </div> <div id=card-verification-fields> <div class=card-verification-title> Card billing address: <span class="grey9 font14 icon-info inline" data-tooltip="Your bank might require the card's billing address for verification." data-tooltip-append-to-body=true></span> </div> <div class="form-group form-group-country" ng-class="{error: ctrl.model.fieldErrors.countryCodeAlpha2}"> <label class=grey9 for=card-country>Country</label> <select class=form-control id=card-country name=card-country ng-model=ctrl.model.cardVerificationFields.countryCodeAlpha2 ng-options="country.value as country.label for country in ctrl.model.countries"> <option value="">Please select...</option> </select> <div class=form-error ng-if=ctrl.model.fieldErrors.countryCodeAlpha2> Field required. </div> </div> <div class="form-group form-group-city" ng-class="{error: ctrl.model.fieldErrors.locality}"> <label class=grey9 for=card-city>City / Town</label> <input id=card-city name=card-city ng-model=ctrl.model.cardVerificationFields.locality class=form-control maxlength=250 /> <div class=form-error ng-if=ctrl.model.fieldErrors.locality> Field required. </div> </div> <div class="form-group form-group-post-code" ng-class="{error: ctrl.model.fieldErrors.postalCode}"> <label class=grey9 for=card-post-code>ZIP / Postal code</label> <input id=card-post-code name=card-post-code ng-model=ctrl.model.cardVerificationFields.postalCode class=form-control maxlength=250 /> <div class=form-error ng-if=ctrl.model.fieldErrors.postalCode> Field required. </div> </div> <div class=clear></div> </div> </div> <div ng-show="!ctrl.model.currentPaymentMethod.available || ctrl.model.editPaymentMethod"> <div ng-show="ctrl.model.paymentMethod === 'paypal' && !ctrl.model.isPaypalLoggedIn"> <div id=modal-payment-form-paypal-button></div> </div> <div ng-show="ctrl.model.paymentMethod === 'paypal' && ctrl.model.isPaypalLoggedIn"> <div id=paypal-logo> <span class="ellipsis email"> {{ ctrl.model.paypalToken.details.email }} </span> <button class="btn-clean btn-sm logout-button" ng-click=ctrl.clearPaypalToken() type=button> Cancel </button> </div> </div> <div class=paypal-login-info ng-if="ctrl.model.paymentMethod === 'paypal' && !ctrl.model.isPaypalLoggedIn"> <span ng-if=!ctrl.model.currentPaymentMethod.available> Click on the PayPal button above to continue. </span> <span ng-if=ctrl.model.currentPaymentMethod.available> Click on the PayPal button above to enter new PayPal details or<br/> </span> <a ng-click=ctrl.setEditPaymentMethod(false); class="underline inherit-color" ng-if=ctrl.model.currentPaymentMethod.available> <span ng-if="ctrl.model.currentPaymentMethod.type === 'credit_card'"> use card ending in {{ ctrl.model.currentPaymentMethod.label }} </span> <span ng-if="ctrl.model.currentPaymentMethod.type === 'paypal'"> use {{ ctrl.model.currentPaymentMethod.label }} </span> </a> </div> </div> </form> </div> </div> <div class="payment-form existing-payment-details" ng-show="ctrl.model.currentPaymentMethod.available && !ctrl.model.editPaymentMethod"> <div class="mbh mth pull-left card-number"> <label class=grey9 ng-if="ctrl.model.currentPaymentMethod.type === 'credit_card'">Credit card</label> <label class=grey9 ng-if="ctrl.model.currentPaymentMethod.type === 'paypal'">PayPal account</label> <div class=font20 ng-if="ctrl.model.currentPaymentMethod.type === 'credit_card'"> xxxx xxxx xxxx {{ ctrl.model.currentPaymentMethod.label }} </div> <div class=font20 ng-if="ctrl.model.currentPaymentMethod.type !== 'credit_card'"> {{ ctrl.model.currentPaymentMethod.label }} </div> </div> <div class="mbh mth pull-left expiry" ng-if="ctrl.model.currentPaymentMethod.type === 'credit_card'"> <label class=grey9>Expiry Date</label> <div class=font20>{{ ctrl.model.currentPaymentMethod.expiryDate | epochDate:'MM / YY' }}</div> </div> <div class="mbh mth pull-left change"> <a ng-click=ctrl.setEditPaymentMethod(true); class="grey9 font12 underline mlh normal" ng-if=ctrl.model.allowEditPaymentMethod>Change</a> </div> </div> <div class="custom-check mtb" ng-if=ctrl.showUnderstandCheckbox() id=can-understand-annual-billing ng-class="{error: ctrl.model.fieldErrors.canUnderstandAnnualBilling}"> <input id=understand-annual-billing name=check-s ng-model=ctrl.model.canUnderstandAnnualBilling class="ng-pristine ng-untouched ng-valid" type=checkbox /> <label class=understand-annual-billing-label for=understand-annual-billing ng-if=!ctrl.model.costs.yearly.charge.isProrated> I understand I will be charged <strong>{{ ctrl.model.costs.yearly.charge.total | prettifyCost }} / year</strong><span ng-if=ctrl.model.isVatCountry> (excl. VAT)</span>. </label> <label class=understand-annual-billing-label for=understand-annual-billing ng-if=ctrl.model.costs.yearly.charge.isProrated> I understand I will be charged <strong>{{ ctrl.model.costs.yearly.charge.total | prettifyCost }}</strong><span ng-if=ctrl.model.isVatCountry> (excl. VAT)</span> today for the first year and renew for <strong>{{ ctrl.model.costs.yearly.future.total | prettifyCost }}</strong><span ng-if=ctrl.model.isVatCountry> (excl. VAT)</span>. </label> </div> <div class="mtb center"> <button class="btn btn-lg btn-primary" ng-click=ctrl.updatePaymentDetails() id=set-payment-details ng-disabled=ctrl.model.forms.payment.submitting ng-show="(ctrl.model.paymentMethod !== 'paypal' || ctrl.model.isPaypalLoggedIn) && !ctrl.model.forms.payment.submitting"> SET PAYMENT DETAILS </button> <button class="btn btn-lg btn-primary btn-loading" type=button ng-show=ctrl.model.forms.payment.submitting> <span class=spinner></span>Please wait... </button> </div> <react-modal-yearly-offer costs=ctrl.model.displayCosts is-open=ctrl.model.isYearlyOfferOpen on-submit=ctrl.onYearlyOfferSubmit /> </div> </div> </div> </script> <script id="modal_plan_change_confirmation.html" type="text/ng-template"> <div class="modal-body modal-plan-confirmation pan" id=modal-plan-confirmation> <button class=close ng-click=$dismiss() type=button>×</button> <h2 class="pah modal-title">Account change summary</h2> <div class=payment-loading ng-show=model.isLoading> <span class=spinner></span> <br/>Please wait... </div> <div class="form-payment relative" ng-hide=model.isLoading> <div class="pah ptm" ng-if=model.downgradeCount> <div class="font16 pbm semibold"> {{ model.downgradeCount }} <ng-pluralize count=model.downgradeCount when="{1: 'downgrade', other: 'downgrades'}"></ng-pluralize> <span class="mls icon-arrow-circle-down red"></span> </div> <div class=grey6> Current rates will remain in effect until the <span class=underline-dashed data-tooltip-apped-to-body=true ng-if=model.nextBillingDate tooltip="The date when the current billing period ends.">{{ model.nextBillingDate | stringDate }}</span>. <span ng-if=!model.nextBillingDate>end of the current billing period (or when the trial ends).</span> </div> <react-churn-survey ng-if=model.isChurning on-plan-change-submit=submit></react-churn-survey> </div> <div class="pah ptm" ng-if=model.upgradeCount ng-class="{'darker pth': model.downgradeCount}"> <div class="font16 pbm semibold"> {{ model.upgradeCount }} <ng-pluralize count=model.upgradeCount when="{1: 'upgrade', other: 'upgrades'}"></ng-pluralize> <span class="mls green icon-arrow-circle-up"></span> </div> <div id=upgrade-note ng-switch=model.isEarlyRenewal> <div ng-switch-when=false> <span class=grey6> Plan <ng-pluralize count=model.upgradeCount when="{1: 'upgrade', other: 'upgrades'}"></ng-pluralize> will be effective immediately and you will be charged <br/> <span class=underline-dashed data-tooltip-apped-to-body=true data-tooltip="You will only be charged for the days left in your current period.">pro rata</span> for the current billing period: <strong class=black>{{prettifyCost(model.proRata)}} <span ng-if=model.isVatCountry> (excl. VAT)</span>. </strong> </span> </div> <div ng-switch-when=true> <span class=grey6> A renewal invoice of <strong class=black>{{prettifyCost(model.proRata)}} <span ng-if=model.isVatCountry> (excl. VAT)</span> </strong> will be generated which covers the cost of your subscription (including this upgrade) for a full year. </span> </div> </div> </div> <div class="pah flex ptn" ng-if=!model.isChurning ng-class="{darker: model.downgradeCount && model.upgradeCount}"> <div class=money-back ng-if=model.upgradeCount> <span class=badge /> <span class="grey6 font12 inline mlm"> 30 Day Money Back Guarantee. <br/> 100% satisfied or your money back. </span> </div> <div class=button-container> <react-ds-button children="(model.upgradeCount && model.hasPaymentDetails) ? 'Confirm Payment' : 'Continue'" is-disabled=model.isSubmitting is-loading=model.isSubmitting loading-text="'Please wait...'" on-click=submit size="'l'"></react-ds-button> </div> </div> </div> </div> </script> <script id="modal_prompt.html" type="text/ng-template"> <react-generic-message-modal cancel=negButton dangerously-set-description-as-h-t-m-l=dangerouslySetDescriptionAsHTML description=text is-open=true size=400 submit=posButton title=header /> </script> <script id="modal-grant-support-access.html" type="text/ng-template"> <div class=modal-body> <button class=close ng-click=close() type=button>×</button> <h2>Grant access for support</h2> 鈥孴o ensure we've got everything we need to help you, please grant us access to your Organization. You can revoke access at any time. <br/><br/> <div class=custom-check> <input id=cb-grant-access ng-model=model.grantAccess type=checkbox /> <label for=cb-grant-access id=lbl-cb-grant-access> Grant Hotjar access to {{ UserData.currentSite.organization.name }} for troubleshooting. <div class="font13 grey9 pts"> You can revoke this access at any time from Settings > Users, and removing {{ model.supportAccountEmail }}. </div> </label> </div> </div> <div class=modal-footer> <button class="btn btn-primary pull-right" ng-click=continue() id=btn-contact-support>Continue to help</button> <div class=clear></div> </div> </script> <script id="modal_targeting.html" type="text/ng-template"> <div class=modal-body> <h2 class="modal-title pbb">Page targeting</h2> <div class="page-targeting page-targeting-list"> <div> <p class=man> <span ng-hide="model.module === 'playbacks'">The {{ model.widgetText[model.module] }} will show on the following URLs or custom events:</span> <span ng-show="model.module === 'playbacks'">Users will only start being recorded when they use the following URLs or custom events:</span> <span class="icon-info icon-s icon-after" data-tooltip-append-to-body=true tooltip="Please note that fields are case sensitive."></span> </p> <form name=targetingForm novalidate> <div class=targeting-rule ng-repeat="targetingRule in model.positiveTargetingRules track by $index"> <div class="pull-left rule-details"> <div class="pull-left dropdown dropdown-select" dropdown> <div class=dropdown-toggle dropdown-toggle> <span ng-show="targetingRule.component === 'url'">{{ model.matchOperationText[targetingRule.match_operation].label }}</span> <span ng-show="targetingRule.component === 'trigger'">{{ model.matchOperationText[targetingRule.component].label }}</span> <span class=caret></span> </div> <ul class=dropdown-menu role=menu> <li ng-mouseover="matchHover = 'simple'"> <a ng-click="setMatchOperation(targetingRule, 'simple')">Simple URL match</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target a URL regardless of any # and ? values it may include.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'simple'}"></span> </a> </li> <li ng-mouseover="matchHover = 'exact'"> <a ng-click="setMatchOperation(targetingRule, 'exact')">Exact URL match</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target a URL exactly as specified.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'exact'}"></span> </a> </li> <li ng-mouseover="matchHover = 'starts_with'"> <a ng-click="setMatchOperation(targetingRule, 'starts_with')">URL starts with</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URLs start in a certain way.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'starts_with'}"></span> </a> </li> <li ng-mouseover="matchHover = 'ends_with'"> <a ng-click="setMatchOperation(targetingRule, 'ends_with')">URL ends with</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URLs end in a certain way.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'ends_with'}"></span> </a> </li> <li ng-mouseover="matchHover = 'contains'"> <a ng-click="setMatchOperation(targetingRule, 'contains')">URL contains</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URLs contain something specific.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'contains'}"></span> </a> </li> <li ng-mouseover="matchHover = 'regex'"> <a ng-click="setMatchOperation(targetingRule, 'regex')">URL regular expression</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115012727628-Using-Regular-Expressions-to-Target-Multiple-Pages target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URL matches a regular expression.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'regex'}"></span> </a> </li> <li class=divider></li> <li ng-mouseover="matchHover = 'trigger'"> <a ng-click="setMatchOperation(targetingRule, 'trigger')" ng-show=canUseJavaScriptTriggers()>Custom event</a> <a class="grey9 cursor-disabled" ng-hide=canUseJavaScriptTriggers()>Custom event <span class="inline badge badge-plan plus">plus</span></a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/4405109971095 target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target specific users by adding a custom event.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'trigger'}"></span> </a> </li> </ul> </div> <input class="inline form-control" maxlength=750 name="positivePattern{{$index}}" ng-change=checkValidMatchOperation(targetingRule); ng-model=targetingRule.pattern placeholder="{{ model.matchOperationText[targetingRule.match_operation].placeholder }}" ng-show="targetingRule.component === 'url'"/> <input class="inline form-control" maxlength=750 name="positivePattern{{$index}}" ng-change=checkValidMatchOperation(targetingRule); ng-model=targetingRule.pattern placeholder="{{ model.matchOperationText.trigger.placeholder }}" ng-show="targetingRule.component === 'trigger'"/> </div> <div class="pull-left rule-options"> <a class=btn-icon ng-click=deletePositiveRule(targetingRule) data-tooltip-append-to-body=true tooltip=Delete ng-hide="model.positiveTargetingRules.length === 1"><span class=icon-trash></span></a> <a class="man btn-icon" ng-click=addPositiveRule() data-tooltip-append-to-body=true tooltip="Add another" ng-show=$last><span class=icon-plus></span></a> </div> <div class=clear></div> <div class=form-error ng-show=targetingRule.error>{{ targetingRule.error }}</div> </div> </form> </div> <div class=negative-rules ng-show="model.module !== 'playbacks' && model.negativeTargetingRules.length === 0"> <a class="black underline" ng-click=addNegativeRule()>Specify URLs where the {{ model.widgetText[model.module] }} should not show</a>. </div> <div class=negative-rules ng-show="model.module !== 'playbacks' && model.negativeTargetingRules.length > 0"> <p class=man> <span ng-hide="model.module === 'playbacks'">The {{ model.widgetText[model.module] }} will <span class=bold>NOT</span> show on the following URLs:</span> <span class="icon-info icon-s icon-after" data-tooltip-append-to-body=true tooltip="URLs listed here are case sensitive and given priority over the ones listed above."></span> </p> <form name=targetingForm novalidate> <div class=targeting-rule ng-repeat="targetingRule in model.negativeTargetingRules track by $index"> <div class="pull-left rule-details"> <div class="pull-left dropdown dropdown-select" dropdown> <div class=dropdown-toggle dropdown-toggle> {{ model.matchOperationText[targetingRule.match_operation].label }} <span class=caret></span> </div> <ul class=dropdown-menu role=menu> <li ng-mouseover="matchHover = 'simple'"> <a ng-click="setMatchOperation(targetingRule, 'simple')">Simple URL match</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target a URL regardless of any # and ? values it may include.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'simple'}"></span> </a> </li> <li ng-mouseover="matchHover = 'exact'"> <a ng-click="setMatchOperation(targetingRule, 'exact')">Exact URL match</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target a URL exactly as specified.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'exact'}"></span> </a> </li> <li ng-mouseover="matchHover = 'starts_with'"> <a ng-click="setMatchOperation(targetingRule, 'starts_with')">URL starts with</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URLs start in a certain way.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'starts_with'}"></span> </a> </li> <li ng-mouseover="matchHover = 'ends_with'"> <a ng-click="setMatchOperation(targetingRule, 'ends_with')">URL ends with</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URLs end in a certain way.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'ends_with'}"></span> </a> </li> <li ng-mouseover="matchHover = 'contains'"> <a ng-click="setMatchOperation(targetingRule, 'contains')">URL contains</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URLs contain something specific.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'contains'}"></span> </a> </li> <li ng-mouseover="matchHover = 'regex'"> <a ng-click="setMatchOperation(targetingRule, 'regex')">URL regular expression</a> <a class=help-link href=https://help.hotjar.com/hc/en-us/articles/115012727628-Using-Regular-Expressions-to-Target-Multiple-Pages target=_blank tooltip-append-to-body=true tooltip-html-unsafe="Target all pages which URL matches a regular expression.<br /><strong>Click for more info</strong>"> <span class="icon-info icon-s grey9" ng-class="{blue: matchHover === 'regex'}"></span> </a> </li> </ul> </div> <input class="inline form-control" maxlength=750 name="negativePattern{{$index}}" ng-change=checkValidMatchOperation(targetingRule) ng-model=targetingRule.pattern placeholder="{{ model.matchOperationText[targetingRule.match_operation].placeholder }}"/> </div> <div class="pull-left rule-options"> <a class=btn-icon ng-click=deleteNegativeRule(targetingRule) data-tooltip-append-to-body=true tooltip=Delete><span class=icon-trash></span></a> <a class="man btn-icon" ng-click=addNegativeRule() data-tooltip-append-to-body=true tooltip="Add another" ng-show=$last><span class=icon-plus></span></a> </div> <div class=clear></div> <div class=form-error ng-show=targetingRule.error>{{ targetingRule.error }}</div> </div> </form> </div> </div> <div class="man alert alert-info mtb alert-multiline" ng-show="model.module === 'polls' || model.module === 'survey'"> If a user is eligible to see multiple feedback widgets, the one most recently created will show. <a href=https://help.hotjar.com/hc/en-us/articles/115011761328-Troubleshooting-FAQs-for-Feedback-Widgets target=_blank>Learn more</a>. </div> <div class="man alert alert-info mtb" ng-hide="model.module === 'polls' || model.module === 'survey'"> <a href=https://help.hotjar.com/hc/en-us/articles/115014943188-Page-Targeting-for-Feedback-Tools target=_blank>Learn more about the different match options</a>. </div> </div> <div class=modal-footer> <button class="pull-left btn btn-clean" ng-click=closeModal() type=button>Cancel</button> <button class="btn btn-primary pull-right" ng-click=saveTargetingRules() type=button>Done</button> </div> </script> <script id="modal_tracking_code.html" type="text/ng-template"> <div class=modal-body> <react-tracking-code-verification-result ng-if=model.verificationInProgress on-error-button-click=reset on-load=onVerificationCompleted on-success-button-click=$close site=model.site url=model.installationUrl /> <ng-container ng-hide=model.verificationInProgress> <button class="close white" id=tracking-modal-close-button ng-click=$close() type=button>×</button> <div class="alert alert-modal-top alert-warning" ng-if="model.checkScriptResult === 'failure'"> {{ model.site.name | stripProtocol }} has not reported any data in the past 24 hours. </div> <div class="alert alert-modal-top alert-success" ng-if="model.checkScriptResult === 'success'"> {{ model.site.name | stripProtocol }} reported data within the past {{ model.lastDataAge }}. </div> <ul class="mbb modal-tabs"> <li ng-class="{active: model.activeTab === 1}" ng-click=setActiveTab(1)>Tracking code</li> <li ng-class="{active: model.activeTab === 2}" ng-click=setActiveTab(2)>Verify installation</li> <li class=site-id> <div data-tooltip="This is the site's unique identifier. You may need it to install Hotjar or to integrate with other services." data-tooltip-append-to-body=true> Site ID: <span class=id>{{ model.site.id }}</span> </div> </li> <div class=clear></div> </ul> <div class="modal-tab-content pbn" ng-show="model.activeTab === 1"> <react-tracking-code-tab on-verify-click=showVerifyTab /> </div> <div class="modal-tab-content pbn" ng-show="model.activeTab === 2"> <react-tracking-code-verification-tab is-allowing-client-script=model.isAllowingClientScript verify-installation=verifyInstallation></react-tracking-code-verification-tab> </div> <ng-container ng-if="model.checkScriptResult === 'failure'"> <div class="mth separator"></div> <div class="mth need-help"> <span class=icon-help></span> <span class=semibold>Need help installing Hotjar?</span> <a class="btn btn-line mlb" href="https://web.archive.org/web/20210812065422/https://help.hotjar.com/hc/en-us/articles/115009336727?itm_source=insights_installation_help" rel=noopener target=_blank> <span class=icon-manual></span> Get Help </a> </div> </ng-container> </ng-container> </div> </script> <body> <div id="root"></div> <script>-1===document.cookie.indexOf("TEST_ENV=1")&&function(e,t,n,a){if(!e.getElementById(n)){var c=e.createElement(t),d=e.getElementsByTagName(t)[0];c.id=n,c.src="https://web.archive.org/web/20210812065422/https://www.paypal.com/sdk/js?vault=true&disable-funding=card,credit,bancontact&client-id="+a,d.parentNode.insertBefore(c,d)}}(document,"script","hj-paypal",getBasedOnEnvironment({prod:"AUmGf8BjHrWJYUaxqHh_tq_Ej37bl9wytRNu0EN0xCmsSeJcMZSkOLK1b0VdwHyIccWoA3SJmWhnjq-M",default:"AbMBrqf1wRxCQ3EKVfOoW7pNVyE51vzWeBWrvswjYukPJVRuQknWxLlG6bIKcKkwDIyWWAdg9g_JibmZ"}))</script> <script>-1===document.cookie.indexOf("TEST_ENV=1")&&function(e){var c=e.createElement("script"),n=e.getElementsByTagName("head")[0];c.async=!0,c.src="https://web.archive.org/web/20210812065422/https://www.googleadservices.com/pagead/conversion_async.js",n.appendChild(c)}(document)</script> <script>-1===document.cookie.indexOf("TEST_ENV=1")&&(function(e,n,t,o,c,f,s){e.fbq||(c=e.fbq=function(){c.callMethod?c.callMethod.apply(c,arguments):c.queue.push(arguments)},e._fbq||(e._fbq=c),(c.push=c).loaded=!0,c.version="2.0",c.queue=[],(f=n.createElement(t)).async=!0,f.src="https://web.archive.org/web/20210812065422/https://connect.facebook.net/en_US/fbevents.js",(s=n.getElementsByTagName(t)[0]).parentNode.insertBefore(f,s))}(window,document,"script"),fbq("init","259210877621442"))</script> <noscript> <img height="1" src="https://web.archive.org/web/20210812065422im_/https://www.facebook.com/tr?id=259210877621442&ev=PageView&noscript=1" style="display:none" width="1"/> </noscript> <script>if(-1===document.cookie.indexOf("TEST_ENV=1")){var googleAnalyticsPropertyID=getBasedOnEnvironment({prod:"UA-51401671-1",default:"UA-51401671-15"});!function(e,a,n,o,t,g,r){e.GoogleAnalyticsObject="ga",e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,g=a.createElement(n),r=a.getElementsByTagName(n)[0],g.async=!0,g.src="//web.archive.org/web/20210812065422/https://www.google-analytics.com/analytics.js",r.parentNode.insertBefore(g,r)}(window,document,"script"),ga("create",googleAnalyticsPropertyID,"hotjar.com");var goId=getBasedOnEnvironment({prod:null,default:"GTM-M7SPP8M"});goId&&(ga("require",goId),ga("send","pageview"))}</script> <script>-1===document.cookie.indexOf("TEST_ENV=1")&&function(e,t,a,n,m){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var o=t.getElementsByTagName(a)[0],g=t.createElement(a);g.async=!0,g.src="//web.archive.org/web/20210812065422/https://www.googletagmanager.com/gtm.js?id=GTM-TWWVRK",o.parentNode.insertBefore(g,o)}(window,document,"script","dataLayer")</script> <script>-1===document.cookie.indexOf("TEST_ENV=1")&&function(){var e=window.analytics=window.analytics||[];if(!e.initialize)if(e.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{e.invoked=!0,e.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"],e.factory=function(t){return function(){var n=Array.prototype.slice.call(arguments);return n.unshift(t),e.push(n),e}};for(var t=0;t<e.methods.length;t++){var n=e.methods[t];e[n]=e.factory(n)}e.load=function(t,n){var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src="https://web.archive.org/web/20210812065422/https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(o,r),e._loadOptions=n},e.SNIPPET_VERSION="4.1.0",e.load(getBasedOnEnvironment({prod:"g8Y7cpfGC4EhnMZjwbdsW57ZJNJ5GOr1",staging:"dFYonYdG4ZSAjUwehl8IRfAV8Kmr9w0x",dev:"8gfLc26L9pl0MAhdv1DL6YpH0SWBHHMZ"}))}}()</script> <script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-3a2da2.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-b79c95.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-f5a079.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-3685f0.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-4ace2b.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-1697ae.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/datadog-init.hash-a3e88d.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-000c20.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-432063.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-6a64a5.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-ce654a.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-103add.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-9c0acc.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-ed75cd.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-f70570.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-994dbe.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-e4c847.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-130efd.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-6248ad.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-422654.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-09b326.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-05a1ff.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-586621.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-ae6bdf.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-1121b5.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-cb9c0a.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-1d2708.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-09ced2.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-888639.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-1c5e60.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-65e53c.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-6891b0.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-6decb2.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-5d4dd8.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-d9ca5a.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-1d207b.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-bc0663.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-0b652b.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-64537f.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-616260.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-2c0d44.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-502ebf.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-b2cfaa.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-975b20.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-aaa093.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-ddb1dc.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-d839f8.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-16b18c.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-52e071.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-1a16ce.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-038de6.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-3e6baa.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-447549.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-ae794c.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-b85d73.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-a8d8cd.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-2fbccf.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-30d117.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-370305.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/insights.hash-497d3d.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/chunk.hash-c36a27.js"></script><script src="/web/20210812065422js_/https://insights.hotjar.com/static/sentry-init.hash-b0cacc.js"></script></body> </html> <!-- FILE ARCHIVED ON 06:54:22 Aug 12, 2021 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 21:12:10 Dec 03, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.595 exclusion.robots: 0.025 exclusion.robots.policy: 0.015 esindex: 0.008 cdx.remote: 259.126 LoadShardBlock: 258.688 (6) PetaboxLoader3.datanode: 201.37 (7) load_resource: 121.975 PetaboxLoader3.resolve: 56.765 -->