PageSourceSearch

https://panamericancongress.org/panam_mdeo_declaration_en

html panamericancongress.org collected 2026-10-02 17:20:32 UTC 311,619 bytes, 2,972 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta name="description" content="Solidarity between peoples. Sovereignty among nations. Join us.">
2<meta property="og:title" content="Panamerican Congress">
3<meta property="og:description" content="Solidarity between peoples. Sovereignty among nations.">
4<meta property="og:image" content="https://htmlpub.com/api/library/nth7dao9bno7wbjoueecqzg7">
5<meta property="og:image:width" content="1200">
6<meta property="og:image:height" content="630">
7<meta property="og:url" content="https://panamericancongress.org/panam_mdeo_declaration_en">
8<meta name="twitter:url" content="https://panamericancongress.org/panam_mdeo_declaration_en">
9<meta property="og:type" content="website">
10<meta property="og:site_name" content="panamericancongress.org">
11<meta property="og:locale" content="en_US">
12<meta property="fb:app_id" content="4198265810445529">
13<meta name="twitter:card" content="summary_large_image">
14<meta name="twitter:title" content="Panamerican Congress">
15<meta name="twitter:description" content="Solidarity between peoples. Sovereignty among nations.">
16<meta name="twitter:image" content="https://htmlpub.com/api/library/nth7dao9bno7wbjoueecqzg7">
17<meta name="twitter:image:width" content="1200">
18<meta name="twitter:image:height" content="630">
19<meta name="robots" content="index, follow">
20<link rel="canonical" href="https://panamericancongress.org/panam_mdeo_declaration_en">
21<link rel="icon" href="https://panamericancongress.org/api/library/gm5ryasqae7cr4bej6u9dpiu">
22<title>Panamerican Congress</title>
23    <meta charset="utf-8">
24    <!-- BUILT WITH LEADPAGES https://www.leadpages.com -->
25    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
26    <meta name="viewport" content="width=device-width, initial-scale=1">
27    
28    <meta name="keywords" content="">
29    
30    
31    
32    
33    
34    <meta property="og:image:type" content="image/png">
35    
36    
37    <meta name="leadpages-served-by" content="leadpages">
38    <meta name="leadpages-serving-domain" content="panamericancongress.org">
39    <meta name="leadpages-legacy-pixel-domain" content="https://my.leadpages.net">
40    <meta name="leadpages-meta-id" content="BjB8QSSjTtjFQnZfmxEXc2">
41    <meta name="leadpages-edition" content="iAC73Veh7xKc2YxpFfyWfh">
42    
43    <link rel="stylesheet" href="https://classic-assets.leadpages.com/static-leadpages-net/fonts/font-awesome/6.4.2/css/all.min.css" referrerpolicy="no-referrer">
44    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
45    <link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Condensed:300,400,500,700">
46    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Condensed:300,400,500,700" type="text/css" referrerpolicy="no-referrer" media="print" onload="this.media='all'">
47    
48    
49    
50    
51    <style data-id="run-styles">
52      /*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*,*::before,*::after{box-sizing:border-box}html{height:100%;width:100%}html{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;background-color:#fff;box-sizing:border-box;color:#000;font-family:Roboto,sans-serif;font-size:1em;line-height:1.5;min-height:100%;position:relative}html.is-leadbox{background-color:transparent}body{min-height:100%}h1,h2,h3,h4,h1.jumbo{margin:0}p{margin:0}a{font-size:inherit}img{max-width:100%;width:100%}section{position:relative;transition:opacity .5s ease-in,min-height .5s ease-in,height .5s ease-in}.container{width:100%}.row-compose,.widget-row,.layout,.inner-column,.column{position:relative}.site-header .layout{align-items:center;min-height:64px}.column{display:flex;flex-direction:column}.inner-column{flex:1 1 auto}.inner-column:not(.area-placeholder){min-height:1px}.widget{word-wrap:break-word;padding:1vw;padding:1cqw}.leadbox .widget{padding:1vw;padding:1cqw}.bar .widget{padding:1vw;padding:1cqw}.has-background-image{background-position:center center;background-repeat:no-repeat}.has-background-size-cover{background-size:cover}.has-background-size-center{background-size:contain}.has-background-size-repeat{background-repeat:repeat}.flex-display{display:flex}.flex-direction-column{flex-direction:column}.flex-direction-column .container{min-height:1px}.flex-direction-row{flex-direction:row}.flex-justify-flex-start{justify-content:flex-start}.flex-justify-center{justify-content:center}.flex-justify-flex-end{justify-content:flex-end}[class*=section-arrow--]::before{border:solid transparent;border-color:rgba(0,0,0,0);content:"";height:0;pointer-events:none;position:absolute;width:0;z-index:1}.section-arrow--top::before{border-bottom-color:inherit;border-width:0 30px 18px;bottom:100%;left:50%;transform:translateX(-50%)}.section-arrow--bottom::before{border-top-color:inherit;border-width:18px 30px 0;left:50%;
52top:100%;transform:translateX(-50%)}.section-arrow--left::before{border-bottom-color:inherit;border-width:0 30px 24px;bottom:100%;right:50%;transform:translateX(50%)}@media(min-width: 48em){.section-arrow--left::before{border-bottom-color:transparent;border-right-color:inherit;border-width:30px 24px 30px 0;bottom:0;right:100%;top:50%;transform:translateY(-50%) translateX(0)}}.section-arrow--right::before{border-top-color:inherit;border-width:24px 30px 0;left:50%;top:100%;transform:translateX(-50%)}@media(min-width: 48em){.section-arrow--right::before{border-left-color:inherit;border-top-color:transparent;border-width:30px 0 30px 24px;left:100%;top:50%;transform:translateY(-50%) translateX(0)}}.page .is-delayed{min-height:0;height:0;opacity:0;overflow:hidden;padding-bottom:0;padding-top:0}.is-visible{height:auto;opacity:1;overflow:visible}.lp-text a,.lp-text-react a,.lp-headline a{color:inherit;text-decoration:underline}.lp-text a>span,.lp-text-react a>span,.lp-headline a>span{color:inherit;text-decoration:underline}.lp-text a:hover,.lp-text a:active,.lp-text-react a:hover,.lp-text-react a:active,.lp-headline a:hover,.lp-headline a:active{text-decoration:none}.lp-text a:hover>span,.lp-text a:active>span,.lp-text-react a:hover>span,.lp-text-react a:active>span,.lp-headline a:hover>span,.lp-headline a:active>span{text-decoration:none}.lp-blog-feed a{text-decoration:none}.lp-blog-feed a:hover,.lp-blog-feed a:active{text-decoration:none}.lp-blog-feed a:hover>span,.lp-blog-feed a:active>span{text-decoration:none}.lp-blog-feed a.pagination-arrow{color:inherit;margin:auto 40px}.lp-blog-feed a.pagination-arrow.disabled{color:inherit;pointer-events:none;opacity:.3}.lp-blog-post a{color:inherit;text-decoration:none}.lp-blog-post a>span{color:inherit;text-decoration:none}.lp-blog-post a:hover,.lp-blog-post a:active{text-decoration:none}.lp-blog-post a:hover>span,.lp-blog-post a:active>span{text-decoration:none}.lp-blog-post a.pagination-arrow{margin:auto 40px}.lp-blog-post a.pagination-arrow.disabled{pointer-events:none;opacity:.3}.lp-post-body p{min-height:18px;margin:20px 0}.lp-post-body h1,.lp-post-body h2,.lp-post-body h3,.lp-post-body h4,.lp-post-body h5,.lp-post-body h6{margin:24px 0}.lp-post-body img{width:auto}.widget-widget>iframe{max-width:100%;width:100%}.inner-composite{display:flex}.page grammarly-btn{display:none}.page .lp-form__input+span,.page .lp-form-react__input+span{display:none !important}@media(max-width: 480px){.hidden-mobile{display:none !important}}@media(min-width: 481px)and (max-width: 768px){.hidden-tablet{display:none !important}}@media(min-width: 769px){.hidden-desktop{display:none !important}}.hide-section{display:none}form .widget-column{padding-top:1vw;padding-bottom:1vw;padding-top:1cqw;padding-bottom:1cqw}form .widget-column .widget{padding-bottom:0;padding-top:0}form .widget-column .widget .lp-button-react-wrapper{margin-top:12px}form[data-form-id] button:disabled{opacity:.5;pointer-events:none;transition:opacity 7.5s ease}@keyframes animation-circular-rotate{0%{transform-origin:50% 50%}100%{transform:rotate(360deg)}}@-webkit-keyframes animation-circular-rotate{0%{transform-origin:50% 50%}100%{transform:rotate(360deg)}}@-webkit-keyframes animation-circular-progress{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0px}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px}}@keyframes animation-circular-progress{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0px}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px}}.container{margin-left:auto;margin-right:auto;max-width:1140px}.container--fluid{max-width:none}.flex{display:flex;flex-direction:row;flex-wrap:wrap;margin-left:0;margin-right:0;max-width:100%}[class*=flex__]{flex:0 0 auto;min-height:1px;padding-left:0;padding-right:0}.flex--12 .flex__item--xs-1{flex-basis:8.3333333333%;max-width:8.3333333333%}.flex--12 .flex__item--xs-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.flex--12 .flex__item--xs-3{flex-basis:25%;max-width:25%}.flex--12 .flex__item--xs-4{flex-basis:33.3333333333%;max-width:33.3333333333%}.flex--12 .flex__item--xs-5{flex-basis:41.6666666667%;max-width:41.6666666667%}.flex--12 .flex__item--xs-6{flex-basis:50%;max-width:50%}.flex--12 .flex__item--xs-7{flex-basis:58.3333333333%;max-width:58.3333333333%}.flex--12 .flex__item--xs-8{flex-basis:66.6666666667%;max-width:66.6666666667%}.flex--12 .flex__item--xs-9{flex-basis:75%;max-width:75%}.flex--12 .flex__item--xs-10{flex-basis:83.3333333333%;max-width:83.3333333333%}.flex--12 .flex__item--xs-11{flex-basis:91.6666666667%;max-width:91.6666666667%}.flex--12 .flex__item--xs-12{flex-basis:100%;max-width:100%}.flex--12 .flex__offset--xs-1{margin-left:8.3333333333%}.flex--12 .flex__offset--xs-2{margin-left:16.6666666667%}.flex--12 .flex__offset--xs-3{margin-left:25%}.flex--12 .flex__offset--xs-4{margin-left:33.3333333333%}.flex--12 .flex__offset--xs-5{margin-left:41.6666666667%}.flex--12 .flex__offset--xs-6{margin-left:50%}.flex--12 .flex__offset--xs-7{margin-left:58.3333333333%}.flex--12 .flex__offset--xs-8{margin-left:66.6666666667%}.flex--12 .flex__offset--xs-9{margin-left:75%}.flex--12 .flex__offset--xs-10{margin-left:83.3333333333%}.flex--12 .flex__offset--xs-11{margin-left:91.6666666667%}.flex--10 .flex__item--xs-1{flex-basis:10%;max-width:10%}.flex--10 .flex__item--xs-2{flex-basis:20%;max-width:20%}.flex--10 .flex__item--xs-3{flex-basis:30%;max-width:30%}.flex--10 .flex__item--xs-4{flex-basis:40%;max-width:40%}.flex--10 .flex__item--xs-5{flex-basis:50%;max-width:50%}.flex--10 .flex__item--xs-6{flex-basis:60%;max-width:60%}.flex--10 .flex__item--xs-7{flex-basis:70%;max-width:70%}.flex--10 .flex__item--xs-8{flex-basis:80%;max-width:80%}.flex--10 .flex__item--xs-9{flex-basis:90%;max-width:90%}.flex--10 .flex__item--xs-10{flex-basis:100%;max-width:100%}.flex--10 .flex__offset--xs-1{margin-left:10%}.flex--10 .flex__offset--xs-2{margin-left:20%}.flex--10 .flex__offset--xs-3{margin-left:30%}.flex--10 .flex__offset--xs-4{margin-left:40%}.flex--10 .flex__offset--xs-5{margin-left:50%}.flex--10 .flex__offset--xs-6{margin-left:60%}.flex--10 .flex__offset--xs-7{margin-left:70%}.flex--10 .flex__offset--xs-8{margin-left:80%}.flex--10 .flex__offset--xs-9{margin-left:90%}.flex--xs-start{justify-content:flex-start}.flex--xs-center{justify-content:center}.flex--xs-end{justify-content:flex-end}.flex--xs-around{justify-content:space-around}.flex--xs-between{justify-content:space-between}.flex--xs-top{align-items:flex-start}.flex--xs-middle{align-items:center}.flex--xs-bottom{align-items:flex-end}.flex--xs-first{order:-1}.flex--xs-last{order:1}.flex__item--xs-auto{flex:1 1 auto}.flex__item--xs-grow{flex-grow:1}.flex__item--xs-no-grow{flex-grow:0}.flex__item--xs-shrink{flex-shrink:1}.flex__item--xs-no-shrink{flex-shrink:0}.flex__item--xs-none{flex:none}.flex--xs-inline-flex{display:inline-flex}.flex--xs-flex-nowrap{flex-wrap:nowrap}.flex--xs-flex-wrap-rev{flex-wrap:wrap-reverse}.flex--xs-horizontal-rev{flex-direction:column-reverse}.flex--xs-vertical{flex-direction:column}.flex--xs-vertical-rev{flex-direction:row-reverse}@media(min-width: 480px){.flex--12 .flex__item--sm-1{flex-basis:8.3333333333%;max-width:8.3333333333%}.flex--12 .flex__item--sm-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.flex--12 .flex__item--sm-3{flex-basis:25%;max-width:25%}.flex--12 .flex__item--sm-4{flex-basis:33.3333333333%;max-width:33.3333333333%}.flex--12 .flex__item--sm-5{flex-basis:41.6666666667%;max-width:41.6666666667%}.flex--12 .flex__item--sm-6{flex-basis:50%;max-width:50%}.flex--12 .flex__item--sm-7{flex-basis:58.3333333333%;max-width:58.3333333333%}.flex--12 .flex__item--sm-8{flex-basis:66.6666666667%;max-width:66.6666666667%}.flex--12 .flex__item--sm-9{flex-basis:75%;max-width:75%}.flex--12 .flex__item--sm-10{flex-basis:83.3333333333%;max-width:83.3333333333%}.flex--12 .flex__item--sm-11{flex-basis:91.6666666667%;max-width:91.6666666667%}.flex--12 .flex__item--sm-12{flex-basis:100%;max-width:100%}.flex--12 .flex__offset--sm-1{margin-left:8.3333333333%}.flex--12 .flex__offset--sm-2{margin-left:16.6666666667%}.flex--12 .flex__offset--sm-3{margin-left:25%}.flex--12 .flex__offset--sm-4{margin-left:33.3333333333%}.flex--12 .flex__offset--sm-5{margin-left:41.6666666667%}.flex--12 .flex__offset--sm-6{margin-left:50%}.flex--12 .flex__offset--sm-7{margin-left:58.3333333333%}.flex--12 .flex__offset--sm-8{margin-left:66.6666666667%}.flex--12 .flex__offset--sm-9{margin-left:75%}.flex--12 .flex__offset--sm-10{margin-left:83.3333333333%}.flex--12 .flex__offset--sm-11{margin-left:91.6666666667%}.flex--10 .flex__item--sm-1{flex-basis:10%;max-width:10%}.flex--10 .flex__item--sm-2{flex-basis:20%;max-width:20%}.flex--10 .flex__item--sm-3{flex-basis:30%;max-width:30%}.flex--10 .flex__item--sm-4{flex-basis:40%;max-width:40%}.flex--10 .flex__item--sm-5{flex-basis:50%;max-width:50%}.flex--10 .flex__item--sm-6{flex-basis:60%;max-width:60%}.flex--10 .flex__item--sm-7{flex-basis:70%;max-width:70%}.flex--10 .flex__item--sm-8{flex-basis:80%;max-width:80%}.flex--10 .flex__item--sm-9{flex-basis:90%;max-width:90%}.flex--10 .flex__item--sm-10{flex-basis:100%;max-width:100%}.flex--10 .flex__offset--sm-1{margin-left:10%}.flex--10 .flex__offset--sm-2{margin-left:20%}.flex--10 .flex__offset--sm-3{margin-left:30%}.flex--10 .flex__offset--sm-4{margin-left:40%}.flex--10 .flex__offset--sm-5{margin-left:50%}.flex--10 .flex__offset--sm-6{margin-left:60%}.flex--10 .flex__offset--sm-7{margin-left:70%}.flex--10 .flex__offset--sm-8{margin-left:80%}.flex--10 .flex__offset--sm-9{margin-left:90%}.flex--sm-start{justify-content:flex-start}.flex--sm-center{justify-content:center}.flex--sm-end{justify-content:flex-end}.flex--sm-around{justify-content:space-around}.flex--sm-between{justify-content:space-between}.flex--sm-top{align-items:flex-start}.flex--sm-middle{align-items:center}.flex--sm-bottom{align-items:flex-end}.flex--sm-first{order:-1}.flex--sm-last{order:1}
52.flex__item--sm-auto{flex:1 1 auto}.flex__item--sm-grow{flex-grow:1}.flex__item--sm-no-grow{flex-grow:0}.flex__item--sm-shrink{flex-shrink:1}.flex__item--sm-no-shrink{flex-shrink:0}.flex__item--sm-none{flex:none}.flex--sm-inline-flex{display:inline-flex}.flex--sm-flex-nowrap{flex-wrap:nowrap}.flex--sm-flex-wrap-rev{flex-wrap:wrap-reverse}.flex--sm-horizontal-rev{flex-direction:column-reverse}.flex--sm-vertical{flex-direction:column}.flex--sm-vertical-rev{flex-direction:row-reverse}}@media(min-width: 768px){.flex--12 .flex__item--md-1{flex-basis:8.3333333333%;max-width:8.3333333333%}.flex--12 .flex__item--md-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.flex--12 .flex__item--md-3{flex-basis:25%;max-width:25%}.flex--12 .flex__item--md-4{flex-basis:33.3333333333%;max-width:33.3333333333%}.flex--12 .flex__item--md-5{flex-basis:41.6666666667%;max-width:41.6666666667%}.flex--12 .flex__item--md-6{flex-basis:50%;max-width:50%}.flex--12 .flex__item--md-7{flex-basis:58.3333333333%;max-width:58.3333333333%}.flex--12 .flex__item--md-8{flex-basis:66.6666666667%;max-width:66.6666666667%}.flex--12 .flex__item--md-9{flex-basis:75%;max-width:75%}.flex--12 .flex__item--md-10{flex-basis:83.3333333333%;max-width:83.3333333333%}.flex--12 .flex__item--md-11{flex-basis:91.6666666667%;max-width:91.6666666667%}.flex--12 .flex__item--md-12{flex-basis:100%;max-width:100%}.flex--12 .flex__offset--md-1{margin-left:8.3333333333%}.flex--12 .flex__offset--md-2{margin-left:16.6666666667%}.flex--12 .flex__offset--md-3{margin-left:25%}.flex--12 .flex__offset--md-4{margin-left:33.3333333333%}.flex--12 .flex__offset--md-5{margin-left:41.6666666667%}.flex--12 .flex__offset--md-6{margin-left:50%}.flex--12 .flex__offset--md-7{margin-left:58.3333333333%}.flex--12 .flex__offset--md-8{margin-left:66.6666666667%}.flex--12 .flex__offset--md-9{margin-left:75%}.flex--12 .flex__offset--md-10{margin-left:83.3333333333%}.flex--12 .flex__offset--md-11{margin-left:91.6666666667%}.flex--10 .flex__item--md-1{flex-basis:10%;max-width:10%}.flex--10 .flex__item--md-2{flex-basis:20%;max-width:20%}.flex--10 .flex__item--md-3{flex-basis:30%;max-width:30%}.flex--10 .flex__item--md-4{flex-basis:40%;max-width:40%}.flex--10 .flex__item--md-5{flex-basis:50%;max-width:50%}.flex--10 .flex__item--md-6{flex-basis:60%;max-width:60%}.flex--10 .flex__item--md-7{flex-basis:70%;max-width:70%}.flex--10 .flex__item--md-8{flex-basis:80%;max-width:80%}.flex--10 .flex__item--md-9{flex-basis:90%;max-width:90%}.flex--10 .flex__item--md-10{flex-basis:100%;max-width:100%}.flex--10 .flex__offset--md-1{margin-left:10%}.flex--10 .flex__offset--md-2{margin-left:20%}.flex--10 .flex__offset--md-3{margin-left:30%}.flex--10 .flex__offset--md-4{margin-left:40%}.flex--10 .flex__offset--md-5{margin-left:50%}.flex--10 .flex__offset--md-6{margin-left:60%}.flex--10 .flex__offset--md-7{margin-left:70%}.flex--10 .flex__offset--md-8{margin-left:80%}.flex--10 .flex__offset--md-9{margin-left:90%}.flex--md-start{justify-content:flex-start}.flex--md-center{justify-content:center}.flex--md-end{justify-content:flex-end}.flex--md-around{justify-content:space-around}.flex--md-between{justify-content:space-between}.flex--md-top{align-items:flex-start}.flex--md-middle{align-items:center}.flex--md-bottom{align-items:flex-end}.flex--md-first{order:-1}.flex--md-last{order:1}.flex__item--md-auto{flex:1 1 auto}.flex__item--md-grow{flex-grow:1}.flex__item--md-no-grow{flex-grow:0}.flex__item--md-shrink{flex-shrink:1}.flex__item--md-no-shrink{flex-shrink:0}.flex__item--md-none{flex:none}.flex--md-inline-flex{display:inline-flex}.flex--md-flex-nowrap{flex-wrap:nowrap}.flex--md-flex-wrap-rev{flex-wrap:wrap-reverse}.flex--md-horizontal-rev{flex-direction:column-reverse}.flex--md-vertical{flex-direction:column}.flex--md-vertical-rev{flex-direction:row-reverse}}@media(min-width: 1024px){.flex--12 .flex__item--lg-1{flex-basis:8.3333333333%;max-width:8.3333333333%}.flex--12 .flex__item--lg-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.flex--12 .flex__item--lg-3{flex-basis:25%;max-width:25%}.flex--12 .flex__item--lg-4{flex-basis:33.3333333333%;max-width:33.3333333333%}.flex--12 .flex__item--lg-5{flex-basis:41.6666666667%;max-width:41.6666666667%}.flex--12 .flex__item--lg-6{flex-basis:50%;max-width:50%}.flex--12 .flex__item--lg-7{flex-basis:58.3333333333%;max-width:58.3333333333%}.flex--12 .flex__item--lg-8{flex-basis:66.6666666667%;max-width:66.6666666667%}.flex--12 .flex__item--lg-9{flex-basis:75%;max-width:75%}.flex--12 .flex__item--lg-10{flex-basis:83.3333333333%;max-width:83.3333333333%}.flex--12 .flex__item--lg-11{flex-basis:91.6666666667%;max-width:91.6666666667%}.flex--12 .flex__item--lg-12{flex-basis:100%;max-width:100%}.flex--12 .flex__offset--lg-1{margin-left:8.3333333333%}.flex--12 .flex__offset--lg-2{margin-left:16.6666666667%}.flex--12 .flex__offset--lg-3{margin-left:25%}.flex--12 .flex__offset--lg-4{margin-left:33.3333333333%}.flex--12 .flex__offset--lg-5{margin-left:41.6666666667%}.flex--12 .flex__offset--lg-6{margin-left:50%}.flex--12 .flex__offset--lg-7{margin-left:58.3333333333%}.flex--12 .flex__offset--lg-8{margin-left:66.6666666667%}.flex--12 .flex__offset--lg-9{margin-left:75%}.flex--12 .flex__offset--lg-10{margin-left:83.3333333333%}.flex--12 .flex__offset--lg-11{margin-left:91.6666666667%}.flex--10 .flex__item--lg-1{flex-basis:10%;max-width:10%}.flex--10 .flex__item--lg-2{flex-basis:20%;max-width:20%}.flex--10 .flex__item--lg-3{flex-basis:30%;max-width:30%}.flex--10 .flex__item--lg-4{flex-basis:40%;max-width:40%}.flex--10 .flex__item--lg-5{flex-basis:50%;max-width:50%}.flex--10 .flex__item--lg-6{flex-basis:60%;max-width:60%}.flex--10 .flex__item--lg-7{flex-basis:70%;max-width:70%}.flex--10 .flex__item--lg-8{flex-basis:80%;max-width:80%}.flex--10 .flex__item--lg-9{flex-basis:90%;max-width:90%}.flex--10 .flex__item--lg-10{flex-basis:100%;max-width:100%}.flex--10 .flex__offset--lg-1{margin-left:10%}.flex--10 .flex__offset--lg-2{margin-left:20%}.flex--10 .flex__offset--lg-3{margin-left:30%}.flex--10 .flex__offset--lg-4{margin-left:40%}.flex--10 .flex__offset--lg-5{margin-left:50%}.flex--10 .flex__offset--lg-6{margin-left:60%}.flex--10 .flex__offset--lg-7{margin-left:70%}.flex--10 .flex__offset--lg-8{margin-left:80%}.flex--10 .flex__offset--lg-9{margin-left:90%}.flex--lg-start{justify-content:flex-start}.flex--lg-center{justify-content:center}.flex--lg-end{justify-content:flex-end}.flex--lg-around{justify-content:space-around}.flex--lg-between{justify-content:space-between}.flex--lg-top{align-items:flex-start}.flex--lg-middle{align-items:center}.flex--lg-bottom{align-items:flex-end}.flex--lg-first{order:-1}.flex--lg-last{order:1}.flex__item--lg-auto{flex:1 1 auto}.flex__item--lg-grow{flex-grow:1}.flex__item--lg-no-grow{flex-grow:0}.flex__item--lg-shrink{flex-shrink:1}.flex__item--lg-no-shrink{flex-shrink:0}.flex__item--lg-none{flex:none}.flex--lg-inline-flex{display:inline-flex}.flex--lg-flex-nowrap{flex-wrap:nowrap}.flex--lg-flex-wrap-rev{flex-wrap:wrap-reverse}.flex--lg-horizontal-rev{flex-direction:column-reverse}.flex--lg-vertical{flex-direction:column}.flex--lg-vertical-rev{flex-direction:row-reverse}}@media(min-width: 1280px){.flex--12 .flex__item--xl-1{flex-basis:8.3333333333%;max-width:8.3333333333%}.flex--12 .flex__item--xl-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.flex--12 .flex__item--xl-3{flex-basis:25%;max-width:25%}.flex--12 .flex__item--xl-4{flex-basis:33.3333333333%;max-width:33.3333333333%}.flex--12 .flex__item--xl-5{flex-basis:41.6666666667%;max-width:41.6666666667%}.flex--12 .flex__item--xl-6{flex-basis:50%;max-width:50%}.flex--12 .flex__item--xl-7{flex-basis:58.3333333333%;max-width:58.3333333333%}.flex--12 .flex__item--xl-8{flex-basis:66.6666666667%;max-width:66.6666666667%}.flex--12 .flex__item--xl-9{flex-basis:75%;max-width:75%}.flex--12 .flex__item--xl-10{flex-basis:83.3333333333%;max-width:83.3333333333%}.flex--12 .flex__item--xl-11{flex-basis:91.6666666667%;max-width:91.6666666667%}.flex--12 .flex__item--xl-12{flex-basis:100%;max-width:100%}.flex--12 .flex__offset--xl-1{margin-left:8.3333333333%}.flex--12 .flex__offset--xl-2{margin-left:16.6666666667%}.flex--12 .flex__offset--xl-3{margin-left:25%}.flex--12 .flex__offset--xl-4{margin-left:33.3333333333%}.flex--12 .flex__offset--xl-5{margin-left:41.6666666667%}.flex--12 .flex__offset--xl-6{margin-left:50%}.flex--12 .flex__offset--xl-7{margin-left:58.3333333333%}.flex--12 .flex__offset--xl-8{margin-left:66.6666666667%}.flex--12 .flex__offset--xl-9{margin-left:75%}.flex--12 .flex__offset--xl-10{margin-left:83.3333333333%}.flex--12 .flex__offset--xl-11{margin-left:91.6666666667%}.flex--10 .flex__item--xl-1{flex-basis:10%;max-width:10%}.flex--10 .flex__item--xl-2{flex-basis:20%;max-width:20%}.flex--10 .flex__item--xl-3{flex-basis:30%;max-width:30%}.flex--10 .flex__item--xl-4{flex-basis:40%;max-width:40%}.flex--10 .flex__item--xl-5{flex-basis:50%;max-width:50%}.flex--10 .flex__item--xl-6{flex-basis:60%;max-width:60%}.flex--10 .flex__item--xl-7{flex-basis:70%;max-width:70%}.flex--10 .flex__item--xl-8{flex-basis:80%;max-width:80%}.flex--10 .flex__item--xl-9{flex-basis:90%;max-width:90%}.flex--10 .flex__item--xl-10{flex-basis:100%;max-width:100%}.flex--10 .flex__offset--xl-1{margin-left:10%}.flex--10 .flex__offset--xl-2{margin-left:20%}.flex--10 .flex__offset--xl-3{margin-left:30%}.flex--10 .flex__offset--xl-4{margin-left:40%}.flex--10 .flex__offset--xl-5{margin-left:50%}.flex--10 .flex__offset--xl-6{margin-left:60%}.flex--10 .flex__offset--xl-7{margin-left:70%}.flex--10 .flex__offset--xl-8{margin-left:80%}.flex--10 .flex__offset--xl-9{margin-left:90%}.flex--xl-start{justify-content:flex-start}.flex--xl-center{justify-content:center}.flex--xl-end{justify-content:flex-end}.flex--xl-around{justify-content:space-around}.flex--xl-between{justify-content:space-between}.flex--xl-top{align-items:flex-start}.flex--xl-middle{align-items:center}.flex--xl-bottom{align-items:flex-end}.flex--xl-first{order:-1}.flex--xl-last{order:1}.flex__item--xl-auto{flex:1 1 auto}.flex__item--xl-grow{flex-grow:1}.flex__item--xl-no-grow{flex-grow:0}.flex__item--xl-shrink{flex-shrink:1}.flex__item--xl-no-shrink{flex-shrink:0}.flex__item--xl-none{flex:none}.flex--xl-inline-flex{display:inline-flex}.flex--xl-flex-nowrap{flex-wrap:nowrap}.flex--xl-flex-wrap-rev{flex-wrap:wrap-reverse}.flex--xl-horizontal-rev{flex-direction:column-reverse}.flex--xl-vertical{flex-direction:column}.flex--xl-vertical-rev{flex-direction:row-reverse}}.font-scale-1{font-size:.5625rem}.font-scale-2{font-size:.625rem}.font-scale-3{font-size:.75rem}.font-scale-4{font-size:.875rem}.font-scale-5{font-size:1rem}.font-scale-6{font-size:1.125rem}.font-scale-7{font-size:1.3125rem}.font-scale-8{font-size:1.5rem}.font-scale-9{font-size:1.6875rem}.font-scale-10{font-size:1.875rem}.font-scale-11{font-size:2.0625rem}.font-scale-12{font-size:2.25rem}.font-scale-13{font-size:2.5rem}.font-scale-14{font-size:2.75rem}.font-scale-15{font-size:3rem}.font-scale-16{font-size:3.25rem}.font-scale-17{font-size:3.5rem}.font-scale-18{font-size:3.75rem}@media(min-width: 480px){.font-scale-1{font-size:.5625rem}.font-scale-2{font-size:.625rem}.font-scale-3{font-size:.75rem}.font-scale-4{font-size:.875rem}.font-scale-5{font-size:1rem}.font-scale-6{font-size:1.125rem}.font-scale-7{font-size:1.3125rem}.font-scale-8{font-size:1.5rem}.font-scale-9{font-size:1.75rem}.font-scale-10{font-size:2rem}.font-scale-11{font-size:2.375rem}.font-scale-12{font-size:2.75rem}.font-scale-13{font-size:3.125rem}.font-scale-14{font-size:3.5rem}.font-scale-15{font-size:3.875rem}.font-scale-16{font-size:4.25rem}.font-scale-17{font-size:4.625rem}.font-scale-18{font-size:5rem}}@media(min-width: 768px){.font-scale-1{font-size:.625rem}.font-scale-2{font-size:.75rem}.font-scale-3{font-size:.875rem}.font-scale-4{font-size:1rem}.font-scale-5{font-size:1.125rem}.font-scale-6{font-size:1.25rem}.font-scale-7{font-size:1.5rem}.font-scale-8{font-size:1.75rem}.font-scale-9{font-size:2rem}.font-scale-10{font-size:2.5rem}.font-scale-11{font-size:3rem}.font-scale-12{font-size:3.5rem}.font-scale-13{font-size:4rem}.font-scale-14{font-size:4.5rem}.font-scale-15{font-size:5rem}.font-scale-16{font-size:5.5rem}.font-scale-17{font-size:6rem}.font-scale-18{font-size:6.5rem}}.line-height-scale-1{line-height:.875}.line-height-scale-2{line-height:1}.line-height-scale-3{line-height:1.125}.line-height-scale-4{line-height:1.25}.line-height-scale-5{line-height:1.375}.line-height-scale-6{line-height:1.5}.line-height-scale-7{line-height:1.625}.line-height-scale-8{line-height:1.75}.line-height-scale-9{line-height:1.875}.line-height-scale-10{line-height:2}.lp-text-react p,.lp-text-react h1,.lp-text-react h2,.lp-text-react h3{min-height:1em;white-space:pre-wrap}.lp-text-react p:empty:before,.lp-text-react h1:empty:before,.lp-text-react h2:empty:before,.lp-text-react h3:empty:before{content:" ";white-space:pre}p.gutter-bottom-1,.lp-list.gutter-bottom-1{margin-bottom:0em}p.gutter-bottom-2,.lp-list.gutter-bottom-2{margin-bottom:0.25em}p.gutter-bottom-3,.lp-list.gutter-bottom-3{margin-bottom:0.4375em}
52p.gutter-bottom-4,.lp-list.gutter-bottom-4{margin-bottom:0.5em}p.gutter-bottom-5,.lp-list.gutter-bottom-5{margin-bottom:0.5625em}p.gutter-bottom-6,.lp-list.gutter-bottom-6{margin-bottom:0.625em}p.gutter-bottom-7,.lp-list.gutter-bottom-7{margin-bottom:0.6875em}p.gutter-bottom-8,.lp-list.gutter-bottom-8{margin-bottom:0.75em}p.gutter-bottom-9,.lp-list.gutter-bottom-9{margin-bottom:0.8125em}p.gutter-bottom-10,.lp-list.gutter-bottom-10{margin-bottom:0.875em}p.gutter-bottom-11,.lp-list.gutter-bottom-11{margin-bottom:0.9375em}p.gutter-bottom-12,.lp-list.gutter-bottom-12{margin-bottom:1em}p.gutter-bottom-13,.lp-list.gutter-bottom-13{margin-bottom:1.25em}p.gutter-bottom-14,.lp-list.gutter-bottom-14{margin-bottom:1.5em}h1.gutter-bottom-1,h2.gutter-bottom-1,h3.gutter-bottom-1{padding-bottom:0em}h1.gutter-bottom-2,h2.gutter-bottom-2,h3.gutter-bottom-2{padding-bottom:0.25em}h1.gutter-bottom-3,h2.gutter-bottom-3,h3.gutter-bottom-3{padding-bottom:0.4375em}h1.gutter-bottom-4,h2.gutter-bottom-4,h3.gutter-bottom-4{padding-bottom:0.5em}h1.gutter-bottom-5,h2.gutter-bottom-5,h3.gutter-bottom-5{padding-bottom:0.5625em}h1.gutter-bottom-6,h2.gutter-bottom-6,h3.gutter-bottom-6{padding-bottom:0.625em}h1.gutter-bottom-7,h2.gutter-bottom-7,h3.gutter-bottom-7{padding-bottom:0.6875em}h1.gutter-bottom-8,h2.gutter-bottom-8,h3.gutter-bottom-8{padding-bottom:0.75em}h1.gutter-bottom-9,h2.gutter-bottom-9,h3.gutter-bottom-9{padding-bottom:0.8125em}h1.gutter-bottom-10,h2.gutter-bottom-10,h3.gutter-bottom-10{padding-bottom:0.875em}h1.gutter-bottom-11,h2.gutter-bottom-11,h3.gutter-bottom-11{padding-bottom:0.9375em}h1.gutter-bottom-12,h2.gutter-bottom-12,h3.gutter-bottom-12{padding-bottom:1em}h1.gutter-bottom-13,h2.gutter-bottom-13,h3.gutter-bottom-13{padding-bottom:1.25em}h1.gutter-bottom-14,h2.gutter-bottom-14,h3.gutter-bottom-14{padding-bottom:1.5em}.lp-button{text-decoration:none}.is-bold{font-weight:700}.is-italic{font-style:italic}.is-strikethrough{text-decoration:line-through}.is-underline,.is-underline label{text-decoration:underline}.is-strikethrough.is-underline{text-decoration:line-through underline}.text-align-left{text-align:left}.text-align-right{text-align:right}.text-align-center{text-align:center}.lp-list{list-style:none;margin:0;padding:0}.lp-list.text-align-left li{padding-left:24px}.lp-list.text-align-left li::before{position:absolute}.lp-list.text-align-left.lp-list--numbered li{padding-left:30px}.lp-list.text-align-left.lp-list--icon li{padding-left:1.5em}.lp-list li{position:relative;width:100%;white-space:pre-wrap}.lp-list li:not(:last-child){margin-bottom:.5em}.lp-list li::before{display:inline-block;font-size:1em;font-weight:700}.lp-list--numbered{counter-reset:numbered}.lp-list--numbered.text-align-left li::before{left:-3px;top:1px}.lp-list--numbered.text-align-center li::before,.lp-list--numbered.text-align-right li::before{margin-right:10px}.lp-list--numbered li{counter-increment:numbered}.lp-list--numbered li::before{content:counter(numbered)}.lp-list--bullet.text-align-center li,.lp-list--bullet.text-align-right li{padding-left:12px}.lp-list--bullet li::before{content:"•";text-align:center;transform:scale(1.5);transform-origin:center right}.lp-list--checkmark.text-align-left li{padding-left:20px}.lp-list--checkmark.text-align-left li::before{left:2px;top:2px}.lp-list--checkmark.text-align-center li::before,.lp-list--checkmark.text-align-right li::before{transform:translateY(-3px)}.lp-list--checkmark li::before{content:"";font-family:"Font Awesome 5 Free";font-weight:900;transform:scale(0.85)}.lp-list--icon.text-align-center li::before,.lp-list--icon.text-align-right li::before{transform:translateY(-3px)}.lp-list--checkmark.text-align-left.font-scale-1 li{padding-left:15px}.lp-list--checkmark.text-align-left.font-scale-1 li::before{left:-4px}.lp-list--checkmark.text-align-left.font-scale-2 li{padding-left:15px}.lp-list--checkmark.text-align-left.font-scale-2 li::before{left:-4px}.lp-list--checkmark.text-align-left.font-scale-3 li{padding-left:15px}.lp-list--checkmark.text-align-left.font-scale-3 li::before{left:-4px}.lp-list--checkmark.text-align-left.font-scale-4 li::before{left:-6px}.lp-list--checkmark.text-align-left.font-scale-5 li::before{left:-6px}.lp-list--checkmark.text-align-left.font-scale-6 li::before{left:-6px}.lp-list--checkmark.text-align-left.font-scale-7 li{padding-left:25px}.lp-list--checkmark.text-align-left.font-scale-7 li::before{left:-10px}.lp-list--checkmark.text-align-left.font-scale-8 li{padding-left:25px}.lp-list--checkmark.text-align-left.font-scale-8 li::before{left:-10px}.lp-list--checkmark.text-align-left.font-scale-9 li{padding-left:25px}.lp-list--checkmark.text-align-left.font-scale-9 li::before{left:-10px}.lp-list--checkmark.text-align-left.font-scale-10 li{padding-left:25px}.lp-list--checkmark.text-align-left.font-scale-10 li::before{left:-10px}.lp-list--checkmark.text-align-left.font-scale-10 li{padding-left:35px}.lp-list--checkmark.text-align-left.font-scale-11 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-11 li::before{left:-0.1em}.lp-list--checkmark.text-align-left.font-scale-12 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-12 li::before{left:-0.1em}.lp-list--checkmark.text-align-left.font-scale-13 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-13 li::before{left:-0.1em}.lp-list--checkmark.text-align-left.font-scale-14 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-14 li::before{left:-0.1em}.lp-list--checkmark.text-align-left.font-scale-15 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-15 li::before{left:-0.1em}.lp-list--checkmark.text-align-left.font-scale-16 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-16 li::before{left:-0.1em}.lp-list--checkmark.text-align-left.font-scale-17 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-17 li::before{left:-0.1em}.lp-list--checkmark.text-align-left.font-scale-18 li{padding-left:1.05em}.lp-list--checkmark.text-align-left.font-scale-18 li::before{left:-0.1em}.lp-list--bullet.text-align-left.font-scale-1 li{padding-left:15px}.lp-list--bullet.text-align-left.font-scale-1 li::before{top:2px;left:-2px}.lp-list--bullet.text-align-left.font-scale-2 li{padding-left:15px}.lp-list--bullet.text-align-left.font-scale-2 li::before{top:2px;left:-2px}.lp-list--bullet.text-align-left.font-scale-3 li{padding-left:15px}.lp-list--bullet.text-align-left.font-scale-3 li::before{top:2px;left:-2px}.lp-list--bullet.text-align-left.font-scale-4 li{padding-left:20px}.lp-list--bullet.text-align-left.font-scale-4 li::before{left:0}.lp-list--bullet.text-align-left.font-scale-5 li{padding-left:20px}.lp-list--bullet.text-align-left.font-scale-5 li::before{left:0}.lp-list--bullet.text-align-left.font-scale-6 li{padding-left:20px}.lp-list--bullet.text-align-left.font-scale-6 li::before{left:0}.lp-list--bullet.text-align-left.font-scale-7 li::before{left:2px}.lp-list--bullet.text-align-left.font-scale-8 li::before{left:2px}.lp-list--bullet.text-align-left.font-scale-9 li::before{left:2px}.lp-list--bullet.text-align-left.font-scale-10 li{padding-left:35px}.lp-list--bullet.text-align-left.font-scale-10 li::before{left:6px}.lp-list--bullet.text-align-left.font-scale-11 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-11 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--bullet.text-align-left.font-scale-12 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-12 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--bullet.text-align-left.font-scale-13 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-13 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--bullet.text-align-left.font-scale-14 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-14 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--bullet.text-align-left.font-scale-15 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-15 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--bullet.text-align-left.font-scale-16 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-16 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--bullet.text-align-left.font-scale-17 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-17 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--bullet.text-align-left.font-scale-18 li{padding-left:1.05em}.lp-list--bullet.text-align-left.font-scale-18 li::before{left:.25em;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-1 li{padding-left:15px}.lp-list--numbered.text-align-left.font-scale-1 li:nth-child(n+10){padding-left:20px}.lp-list--numbered.text-align-left.font-scale-1 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-2 li{padding-left:15px}.lp-list--numbered.text-align-left.font-scale-2 li:nth-child(n+10){padding-left:20px}.lp-list--numbered.text-align-left.font-scale-2 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-3 li{padding-left:15px}.lp-list--numbered.text-align-left.font-scale-3 li:nth-child(n+10){padding-left:20px}.lp-list--numbered.text-align-left.font-scale-3 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-4 li{padding-left:20px}.lp-list--numbered.text-align-left.font-scale-4 li:nth-child(n+10){padding-left:30px}.lp-list--numbered.text-align-left.font-scale-4 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-5 li{padding-left:20px}.lp-list--numbered.text-align-left.font-scale-5 li:nth-child(n+10){padding-left:30px}.lp-list--numbered.text-align-left.font-scale-5 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-6 li{padding-left:20px}.lp-list--numbered.text-align-left.font-scale-6 li:nth-child(n+10){padding-left:30px}.lp-list--numbered.text-align-left.font-scale-6 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-7 li{padding-left:25px}.lp-list--numbered.text-align-left.font-scale-7 li:nth-child(n+10){padding-left:45px}.lp-list--numbered.text-align-left.font-scale-7 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-8 li{padding-left:25px}.lp-list--numbered.text-align-left.font-scale-8 li:nth-child(n+10){padding-left:45px}.lp-list--numbered.text-align-left.font-scale-8 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-9 li{padding-left:25px}.lp-list--numbered.text-align-left.font-scale-9 li:nth-child(n+10){padding-left:45px}.lp-list--numbered.text-align-left.font-scale-9 li::before{left:-3px}.lp-list--numbered.text-align-left.font-scale-10 li{padding-left:35px}.lp-list--numbered.text-align-left.font-scale-10 li:nth-child(n+10){padding-left:60px}.lp-list--numbered.text-align-left.font-scale-10 li::before{left:-2px}.lp-list--numbered.text-align-left.font-scale-11 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-11 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-11 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-12 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-12 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-12 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-13 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-13 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-13 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-14 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-14 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-14 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-15 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-15 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-15 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-16 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-16 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-16 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-17 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-17 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-17 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--numbered.text-align-left.font-scale-18 li{padding-left:1.05em}.lp-list--numbered.text-align-left.font-scale-18 li:nth-child(n+10){padding-left:1.625em}.lp-list--numbered.text-align-left.font-scale-18 li::before{left:-2px;line-height:.75em;top:.18em}.lp-list--icon.text-align-left li::before{left:-6px}.lp-list--icon.text-align-left.font-scale-1 li{padding-left:20px}.lp-list--icon.text-align-left.font-scale-2 li{padding-left:20px}.lp-list--icon.text-align-left.font-scale-3 li{padding-left:20px}.lp-list--icon.text-align-left.font-scale-7 li{padding-left:40px}.lp-list--icon.text-align-left.font-scale-8 li{padding-left:40px}.lp-list--icon.text-align-left.font-scale-9 li{padding-left:40px}.lp-list--icon.text-align-left.font-scale-10 li{padding-left:40px}.lp-list--icon.text-align-left.font-scale-10 li{padding-left:55px}.lp-list--icon.text-align-left.font-scale-11 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-12 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-13 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-14 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-15 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-16 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-17 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-18 li::before{left:-5px}@media(max-width: 480px){.lp-list--checkmark.text-align-left.font-scale-7 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-8 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-9 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-10 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-11 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-12 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-13 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-14 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-15 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-16 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-17 li::before{left:-5px}.lp-list--checkmark.text-align-left.font-scale-18 li::before{left:-5px}.lp-list--numbered.text-align-left.font-scale-1 li:nth-child(n+10){padding-left:20px}.lp-list--numbered.text-align-left.font-scale-2 li:nth-child(n+10){padding-left:20px}.lp-list--numbered.text-align-left.font-scale-3 li:nth-child(n+10){padding-left:20px}.lp-list--numbered.text-align-left.font-scale-4 li:nth-child(n+10){padding-left:25px}.lp-list--numbered.text-align-left.font-scale-5 li:nth-child(n+10){padding-left:25px}.lp-list--numbered.text-align-left.font-scale-6 li:nth-child(n+10){padding-left:25px}.lp-list--numbered.text-align-left.font-scale-7 li:nth-child(n+10){padding-left:35px}.lp-list--numbered.text-align-left.font-scale-8 li:nth-child(n+10){padding-left:35px}.lp-list--numbered.text-align-left.font-scale-9 li:nth-child(n+10){padding-left:35px}.lp-list--numbered.text-align-left.font-scale-10 li:nth-child(n+10){padding-left:40px}.lp-list--icon.text-align-left.font-scale-7 li{padding-left:28px}.lp-list--icon.text-align-left.font-scale-7 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-8 li{padding-left:28px}.lp-list--icon.text-align-left.font-scale-8 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-9 li{padding-left:28px}.lp-list--icon.text-align-left.font-scale-9 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-10 li{padding-left:35px}.lp-list--icon.text-align-left.font-scale-11 li{padding-left:1.25em}.lp-list--icon.text-align-left.font-scale-11 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-12 li{padding-left:1.25em}.lp-l
52ist--icon.text-align-left.font-scale-12 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-13 li{padding-left:1.25em}.lp-list--icon.text-align-left.font-scale-13 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-14 li{padding-left:1.25em}.lp-list--icon.text-align-left.font-scale-14 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-15 li{padding-left:1.25em}.lp-list--icon.text-align-left.font-scale-15 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-16 li{padding-left:1.25em}.lp-list--icon.text-align-left.font-scale-16 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-17 li{padding-left:1.25em}.lp-list--icon.text-align-left.font-scale-17 li::before{left:-5px}.lp-list--icon.text-align-left.font-scale-18 li{padding-left:1.25em}.lp-list--icon.text-align-left.font-scale-18 li::before{left:-5px}}[data-widget-type=lp-image-text] .composite-box,[data-widget-type=lp-calendar-text] .composite-box{align-items:stretch}[data-widget-type=lp-image-text] .composite-column-compose,[data-widget-type=lp-calendar-text] .composite-column-compose{display:flex}[data-widget-type=lp-image-text] .layout-TC .composite-column-compose,[data-widget-type=lp-image-text] .layout-BC .composite-column-compose,[data-widget-type=lp-calendar-text] .layout-TC .composite-column-compose,[data-widget-type=lp-calendar-text] .layout-BC .composite-column-compose{flex-direction:column}[data-widget-type=lp-image-text] .layout-TR .composite-row-compose,[data-widget-type=lp-image-text] .layout-CR .composite-row-compose,[data-widget-type=lp-image-text] .layout-BR .composite-row-compose,[data-widget-type=lp-image-text] .layout-TL .composite-row-compose,[data-widget-type=lp-image-text] .layout-CL .composite-row-compose,[data-widget-type=lp-image-text] .layout-BL .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-TR .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-CR .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-BR .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-TL .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-CL .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-BL .composite-row-compose{flex:1 1 100%;flex-direction:row}[data-widget-type=lp-image-text] .layout-TR .composite-row-compose,[data-widget-type=lp-image-text] .layout-TL .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-TR .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-TL .composite-row-compose{align-items:flex-start}[data-widget-type=lp-image-text] .layout-CR .composite-row-compose,[data-widget-type=lp-image-text] .layout-CL .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-CR .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-CL .composite-row-compose{align-items:center}[data-widget-type=lp-image-text] .layout-BR .composite-row-compose,[data-widget-type=lp-image-text] .layout-BL .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-BR .composite-row-compose,[data-widget-type=lp-calendar-text] .layout-BL .composite-row-compose{align-items:flex-end}@media(max-width: 767px){.section .composite{padding:8px}}.leadbox .section,.leadbox .page>section{padding:initial}@media(max-width: 479px){.inner-column{padding:8px}}@media(min-width: 480px)and (max-width: 767px){.inner-column{padding:12px}}/*# sourceMappingURL=page-styles.css.map *//*!* animate.css - https://animate.style/* Version - 4.1.5* Licensed under the MIT license - https://opensource.org/licenses/MIT** Copyright (c) 2024 Animate.css*/:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.lp-animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.lp-animate__animated.lp-animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.lp-animate__animated.lp-animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.lp-animate__animated.lp-animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.lp-animate__animated.lp-animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.lp-animate__animated.lp-animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.lp-animate__animated.lp-animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}
52.lp-animate__animated.lp-animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.lp-animate__animated.lp-animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.lp-animate__animated.lp-animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.lp-animate__animated.lp-animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.lp-animate__animated.lp-animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*.8);animation-duration:calc(var(--animate-duration)*.8)}.lp-animate__animated.lp-animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.lp-animate__animated.lp-animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.lp-animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important}.lp-animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.lp-animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.lp-animate__headShake{-webkit-animation-name:headShake;animation-name:headShake;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.lp-animate__heartBeat{-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}
5260%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.lp-animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.lp-animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.lp-animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*.75);animation-duration:calc(var(--animate-duration)*.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes fadeIn{0%{opacity:0}
52to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.lp-animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lp-animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes backInDown{0%{opacity:.7;-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7)}80%{opacity:.7;-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInDown{0%{opacity:.7;-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7)}80%{opacity:.7;-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.lp-animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{opacity:.7;-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7)}80%{opacity:.7;-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInLeft{0%{opacity:.7;-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7)}80%{opacity:.7;-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.lp-animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{opacity:.7;-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7)}80%{opacity:.7;-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInRight{0%{opacity:.7;-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7)}80%{opacity:.7;-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.lp-animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{opacity:.7;-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7)}80%{opacity:.7;-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes backInUp{0%{opacity:.7;-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7)}80%{opacity:.7;-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.lp-animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}/* User Created Custom CSS */.css-ayfcnk {/* Junta ligeramente las letras en los párrafos */letter-spacing: -1px;line-height: 30%;/* Ajusta el espacio entre las palabras */word-spacing: 4px;}/* End Custom CSS */
53    </style>
54    <meta name="page-analytics-property" content="9RTgfvkJ8wrkXvsbGehCBV-default-prop">
55    
56    
56<script type="text/javascript">
57      (function(a,c,d,b,e,f){a[d]=b;a[b]||(a[b]=function(){a[b].q=a[b].q||[];a[b].q.push(arguments)},d=c.createElement(e),d.async=!0,d.src=f,c=c.getElementsByTagName(e)[0],c.parentNode.insertBefore(d,c))})(window,document,"LeadPagesCenterObject","center","script","https://js.center.io/center.js");
58      center('create', '9RTgfvkJ8wrkXvsbGehCBV-default-prop', '9RTgfvkJ8wrkXvsbGehCBV-default-prop', {customId: 'lp-BjB8QSSjTtjFQnZfmxEXc2'});
59      center('send', 'view', 'leadpage', 'BjB8QSSjTtjFQnZfmxEXc2');
60    </script>
60
61    
62  <style id="htmlpub-migrated-fonts">
63@font-face{font-family:'DrukTextWide';src:url(/api/library/wdiya6kfnfkydgp6fa235lpj) format('woff2'),url(/api/library/nvn1eudafkhkfy30o4qy3h2o) format('woff');font-weight:400;font-style:normal;font-display:swap;}
64@font-face{font-family:'NHaasGroteskDSPro';src:url(/api/library/sdpf7eoa2z22lhd194a1xlri) format('woff2'),url(/api/library/vf98p83ashwapb04cej4x7p0) format('woff');font-weight:400;font-style:normal;font-display:swap;}
65@font-face{font-family:'NHaasGroteskDSPro';src:url(/api/library/h9j9l3e25p8iq21zgnukdt4q) format('woff2'),url(/api/library/ta4cwfn0bfk1car3oiqe6fm7) format('woff');font-weight:700;font-style:normal;font-display:swap;}
66@font-face{font-family:'DrukTextWide';src:url(/api/library/wdiya6kfnfkydgp6fa235lpj) format('woff2'),url(/api/library/nvn1eudafkhkfy30o4qy3h2o) format('woff');font-weight:400;font-style:normal;font-display:swap;}
67@font-face{font-family:'DrukTextWide';src:url(/api/library/wdiya6kfnfkydgp6fa235lpj) format('woff2'),url(/api/library/nvn1eudafkhkfy30o4qy3h2o) format('woff');font-weight:400;font-style:normal;font-display:swap;}
68</style>
69</head>
70  <body><a href="https://pages.lpcontent.net/cdn-cgi/content?id=MqY63mN2CdC8ksHkIWLl1nMOkD.yEPWXkrpjUektEzg-1790961631.5307314-1.2.1.1-uXr7iGzdZI4JXNtM_8ElF.Qx1tjdxFs8T3x0A211zyNQRgC7Xno3sjOGx1fDc5Kc" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>
71    
72    <div class="page-background has-background-image" data-background="/api/library/cpkc1uqn7ekefxv999mcxlpy"></div>
73    <style data-emotion-css="9cvixd r2ag0e 119qg5r 2jofpk 15c2jr8 1k461u6">.page-background{position:fixed;height:100vh;top:0;left:0;right:0;bottom:0;z-index:-1;background-color:rgb(0,0,0);background-size:cover;background-position:center center;background-size:cover;background-position:center center;background-repeat:no-repeat;background-image:linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0)),url(/api/library/cpkc1uqn7ekefxv999mcxlpy);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);}section{margin:0 auto;}.container{max-width:1140px;}@media (min-width:calc(1140px / 16)em){.widget{padding:calc(1140px / 100);}}h1{color:rgba(0,0,0,1);font-family:"Roboto",sans-serif;font-weight:bold;font-style:normal;}h2{color:rgba(0,0,0,1);font-family:"Roboto",sans-serif;font-weight:normal;font-style:normal;}h3{color:rgba(0,0,0,1);font-family:"Roboto Condensed",sans-serif;font-weight:bold;font-style:normal;}p{color:rgba(0,0,0,1);font-family:"Roboto",sans-serif;font-weight:normal;font-style:normal;}ul{color:rgba(0,0,0,1);font-family:"Roboto",sans-serif;font-weight:normal;font-style:normal;}h1{font-size:2.5rem;}h2{font-size:1.5rem;}h3{font-size:1rem;}p{font-size:1.125rem;}ul{font-size:1.125rem;}.lp-list.lp-list--bullet.text-align-left li::before{left:0;}.lp-list.lp-list--bullet.text-align-left li{padding-left:20px;}.lp-list.lp-list--numbered.text-align-left li::before{left:-3px;}.lp-list.lp-list--numbered.text-align-left li{padding-left:20px;}.lp-list.lp-list--numbered.text-align-left li:nth-child(n + 10){padding-left:30px;}@media only screen and (max-width:480px){.lp-list.lp-list--numbered.text-align-left li:nth-child(n + 10){padding-left:25px;}}.lp-list.lp-list--icon.text-align-left li::before{left:-6px;}.lp-list.lp-list--checkmark.text-align-left li::before{left:-6px;}h1{padding-bottom:0.5625em;}h2{padding-bottom:0.4375em;}h3{padding-bottom:0em;}p{margin-bottom:0em;}p,.lp-list{margin-bottom:0em;}ul{margin-bottom:0em;}h1{line-height:1.125;}h2{line-height:1.375;}h3{line-height:1.125;}p{line-height:1.125;}ul{line-height:1.125;}@media (min-width:480px){h1{font-size:2rem;}}@media (min-width:768px){h1{font-size:2.5rem;}}@media (min-width:480px){h2{font-size:1.3125rem;}}@media (min-width:768px){h2{font-size:1.5rem;}}@media (min-width:480px){h3{font-size:0.875rem;}}@media (min-width:768px){h3{font-size:1rem;}}@media (min-width:480px){p{font-size:1rem;}}@media (min-width:768px){p{font-size:1.125rem;}}@media (min-width:480px){ul{font-size:1rem;}}@media (min-width:768px){ul{font-size:1.125rem;}}.lp-alert,.lp-calendar-react .date,.lp-calendar-react .month,.lp-form-v2-input-react{font-family:"Roboto",sans-serif;}.lp-form-v2-input-react{color:rgba(0,0,0,1);}</style><style data-emotion-css="1o3acgz">.css-1o3acgz{background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0)),url(undefined);}</style><div class="page css-1o3acgz"><style data-emotion-css="o1b4gw">.css-o1b4gw{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);background-size:cover;background-position:center center;background-repeat:no-repeat;}.css-o1b4gw > .container{padding-top:2vw;padding-right:8vw;padding-bottom:2vw;padding-left:8vw;padding-top:2cqw;padding-right:8cqw;padding-bottom:2cqw;padding-left:8cqw;}.site-header .css-o1b4gw > .container{padding-top:5px;padding-right:0;padding-bottom:5px;padding-left:0;-webkit-transition:padding 0.03s ease;transition:padding 0.03s ease;}.bar .css-o1b4gw{padding:0 50px;}@media (max-width:23.75em){.bar .css-o1b4gw{padding:0 25px;}}@media (min-width:71.25em){.css-o1b4gw > .container{padding-top:22.8px;padding-right:91.2px;padding-bottom:22.8px;padding-left:91.2px;}}</style><section class="hidden-mobile section css-o1b4gw" data-guid="b8af5668-5098-8648-9ad7-20892348a6ad"><div class="container" id="about-1-copy-copy-copy-copy-copy-copy"><div class="layout flex flex--12" data-guid="8aa3cf38-7cd5-92cc-bdb8-2d9dd6b87358"><style data-emotion-css="vfaad">.css-vfaad{padding-top:0vw;padding-right:0vw;padding-bottom:0vw;padding-left:0vw;padding-top:0cqw;padding-right:0cqw;padding-bottom:0cqw;padding-left:0cqw;}@media(min-width:71.25em){.css-vfaad.column{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.css-vfaad.column > .inner-column{padding-top:11.4px;padding-right:11.4px;padding-bottom:11.4px;padding-left:11.4px;}}</style><div class="column flex__item--md-12 flex__item--xs-12 css-vfaad" data-guid="9e921758-91b3-00a8-87bd-e77821aabde7"><style data-emotion-css="eeduzr">.css-eeduzr{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);border-radius:0px;background-size:cover;background-position:center center;background-repeat:no-repeat;padding-top:1vw;padding-right:1vw;padding-bottom:1vw;padding-left:1vw;padding-top:1cqw;padding-right:1cqw;padding-bottom:1cqw;padding-left:1cqw;}.bar .css-eeduzr{padding-top:0;padding-bottom:0;}</style><div class="inner-column css-eeduzr"><style data-emotion-css="47r3vg">.section--center-widgets .css-47r3vg{-webkit-box-pack:center;
73-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (max-width:767px){.bar .css-47r3vg{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}</style><div class="row flex flex--10 css-47r3vg"><style data-emotion-css="8x0d4x">.section--center-widgets .css-8x0d4x{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;max-width:100%;}</style><div class="composite flex__item--md-2 flex__item--xs-10 css-8x0d4x"><div class="inner-composite flex flex--2"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="82b86b69-741b-9698-2b38-51f8d46df8a8" class="widget"><style data-emotion-css="y13kug">.css-y13kug{position:relative;z-index:0;text-align:center;}</style><div class="lp-button-react-wrapper css-y13kug" data-widget-type="LpButtonReact"><style data-emotion-css="ayfcnk">.css-ayfcnk{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border-style:solid;border-width:1px;text-align:center;font-family:'Lato',sans-serif;text-shadow:none;-webkit-transition:color 0.2s linear,background 0.2s linear,border-color 0.2s linear, text-shadow 0.2s linear;transition:color 0.2s linear,background 0.2s linear,border-color 0.2s linear, text-shadow 0.2s linear;-webkit-text-decoration:none;text-decoration:none;position:relative;width:100%;font-weight:bold;min-height:36px;min-width:72px;padding:8px 18px;font-family:"DrukTextWide",sans-serif;border-radius:10000px;}.css-ayfcnk::before{border-radius:10000px;}.css-ayfcnk,.css-ayfcnk:focus,.css-ayfcnk:active{border-color:rgb(255,206,0);background:rgb(255,206,0);color:rgb(0,0,0);}.css-ayfcnk:hover{background-color:rgb(204,165,0);border-color:rgb(204,165,0);color:rgb(0,0,0);}</style><a data-widget-link="true" href="https://panamericancongress.org/panam_en" target="_top" data-link-type="external" class="lp-button-react w-82b86b69-741b-9698-2b38-51f8d46df8a8 lp-button-react--full is-bold lp-button-react--small lp-button-react--flat lp-btn-flat font-scale-3 line-height-scale-1 css-ayfcnk" contenteditable="false">HOME</a></div></div></div></div></div></div></div><div class="composite flex__item--md-2 flex__item--xs-10 css-8x0d4x"><div class="inner-composite flex flex--2"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="999c5238-2046-406d-f852-f648d418bdc8" class="widget"><div class="lp-button-react-wrapper css-y13kug" data-widget-type="LpButtonReact"><a data-widget-link="true" href="https://panamericancongress.org/panam_about_en/" target="_top" data-link-type="external" class="lp-button-react w-999c5238-2046-406d-f852-f648d418bdc8 lp-button-react--full is-bold lp-button-react--small lp-button-react--flat lp-btn-flat font-scale-3 line-height-scale-2 css-ayfcnk" contenteditable="false">ABOUT</a></div></div></div></div></div></div></div><div class="composite flex__item--md-2 flex__item--xs-10 css-8x0d4x"><div class="inner-composite flex flex--2"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="5a8c8f42-6628-aeb8-43c1-bab8c6587254" class="widget"><div class="lp-button-react-wrapper css-y13kug" data-widget-type="LpButtonReact"><a data-widget-link="true" href="https://panamericancongress.org/panam_editions_en/" target="_top" data-link-type="external" class="lp-button-react w-5a8c8f42-6628-aeb8-43c1-bab8c6587254 lp-button-react--full is-bold lp-button-react--small lp-button-react--flat lp-btn-flat font-scale-3 line-height-scale-2 css-ayfcnk" contenteditable="false">EDITIONS</a></div></div></div></div></div></div></div><div class="composite flex__item--md-2 flex__item--xs-10 css-8x0d4x"><div class="inner-composite flex flex--2"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="0c78aa78-ca58-52e8-e4cb-4688ccf28cd9" class="widget"><div class="lp-button-react-wrapper css-y13kug" data-widget-type="LpButtonReact"><a data-widget-link="true" href="https://panamericancongress.org/panam_initiatives_en/" target="_top" data-link-type="external" class="lp-button-react w-0c78aa78-ca58-52e8-e4cb-4688ccf28cd9 lp-button-react--full is-bold lp-button-react--small lp-button-react--flat lp-btn-flat font-scale-3 line-height-scale-2 css-ayfcnk" contenteditable="false">EVENTS</a></div></div></div></div></div></div></div><div class="composite flex__item--md-2 flex__item--xs-10 css-8x0d4x"><div class="inner-composite flex flex--2"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="c62f6d99-f4bd-7668-aaf8-aab8f75d1279" class="widget"><div class="lp-button-react-wrapper css-y13kug" data-widget-type="LpButtonReact"><style data-emotion-css="gca2dc">.css-gca2dc{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;
73-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border-style:solid;border-width:1px;text-align:center;font-family:'Lato',sans-serif;text-shadow:none;-webkit-transition:color 0.2s linear,background 0.2s linear,border-color 0.2s linear, text-shadow 0.2s linear;transition:color 0.2s linear,background 0.2s linear,border-color 0.2s linear, text-shadow 0.2s linear;-webkit-text-decoration:none;text-decoration:none;position:relative;width:100%;font-weight:bold;min-height:36px;min-width:72px;padding:8px 18px;font-family:"DrukTextWide",sans-serif;border-radius:10000px;}.css-gca2dc::before{border-radius:10000px;}.css-gca2dc,.css-gca2dc:focus,.css-gca2dc:active{border-color:rgb(0,223,0);background:rgb(0,223,0);color:rgb(0,0,0);}.css-gca2dc:hover{background-color:rgb(0,172,0);border-color:rgb(0,172,0);color:rgb(0,0,0);}</style><a data-widget-link="true" href="#LB-w6nnei6XKB4SRFuVY6SuWD" target="_top" data-link-type="leadbox" data-leadbox-popup="w6nnei6XKB4SRFuVY6SuWD" data-leadbox-domain="panamericancongress.org" class="lp-button-react w-c62f6d99-f4bd-7668-aaf8-aab8f75d1279 lp-button-react--full is-bold lp-button-react--small lp-button-react--flat lp-btn-flat font-scale-4 line-height-scale-2 css-gca2dc" contenteditable="false" data-persist-popup-target="classic-popup-w6nnei6XKB4SRFuVY6SuWD">ES / PT</a></div></div></div></div></div></div></div></div></div></div></div></div></section><style data-emotion-css="1yazq5l">.css-1yazq5l{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);background-size:cover;background-position:center center;background-repeat:no-repeat;}.css-1yazq5l > .container{padding-top:4vw;padding-right:1vw;padding-bottom:1vw;padding-left:1vw;padding-top:4cqw;padding-right:1cqw;padding-bottom:1cqw;padding-left:1cqw;}.site-header .css-1yazq5l > .container{padding-top:15px;padding-right:0;padding-bottom:15px;padding-left:0;-webkit-transition:padding 0.03s ease;transition:padding 0.03s ease;}.bar .css-1yazq5l{padding:0 50px;}@media (max-width:23.75em){.bar .css-1yazq5l{padding:0 25px;}}@media (min-width:71.25em){.css-1yazq5l > .container{padding-top:45.6px;padding-right:11.4px;padding-bottom:11.4px;padding-left:11.4px;}}</style><section class="hidden-desktop hidden-tablet section css-1yazq5l" data-guid="108a23e8-8c96-c278-8a01-23f895c6070b"><div class="container" id="menu"><div class="layout flex flex--12" data-guid="e0251aaf-c30a-e028-7018-0dd43ad8520e"><div class="column flex__item--md-12 flex__item--xs-12 css-vfaad" data-guid="4f523048-d921-ba58-e176-b3cbd1f87aa8"><div class="inner-column css-eeduzr"><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="a3ec6c18-51c8-e05d-5f07-c388ff623ee4" class="widget"><style data-emotion-css="1yltisf">.css-1yltisf{text-align:center;}</style><div class="css-1yltisf"><div><a data-widget-link="true" href="#LB-XcEz2X2aw3gfaXrWpPy3Ah" target="_top" data-link-type="leadbox" data-leadbox-popup="XcEz2X2aw3gfaXrWpPy3Ah" data-leadbox-domain="panamericancongress.org" class="lp-image-react-container lp-icon-react__icon--linked" contenteditable="false" data-persist-popup-target="classic-popup-XcEz2X2aw3gfaXrWpPy3Ah"><style data-emotion-css="1its1x0">.css-1its1x0{display:inline-block;vertical-align:middle;max-width:625px;}@media (max-width:530px){.site-header .composite .widget .css-1its1x0{max-width:calc(100% - 80px);}}</style><img class="lp-image-react w-a3ec6c18-51c8-e05d-5f07-c388ff623ee4 css-1its1x0" src="/api/library/mkkt4xba5hdyydetgv7c49tx" data-image-upload-source="builder3" alt="" style="width:10%"></a></div></div></div></div></div></div></div></div></div></div></div></div></div></section><style data-emotion-css="1m5yryu">.css-1m5yryu{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0)),url("/api/library/iok7qm7p9q6xv3ndphrgbb54");background-size:contain;background-position:center bottom;background-repeat:repeat-x;}.css-1m5yryu > .container{padding-top:0vw;padding-right:2vw;padding-bottom:0vw;padding-left:2vw;padding-top:0cqw;padding-right:2cqw;padding-bottom:0cqw;padding-left:2cqw;}.site-header .css-1m5yryu > .container{padding-top:-5px;padding-right:0;
73padding-bottom:-5px;padding-left:0;-webkit-transition:padding 0.03s ease;transition:padding 0.03s ease;}.bar .css-1m5yryu{padding:0 50px;}@media (max-width:23.75em){.bar .css-1m5yryu{padding:0 25px;}}@media (min-width:71.25em){.css-1m5yryu > .container{padding-top:0px;padding-right:22.8px;padding-bottom:0px;padding-left:22.8px;}}</style><section class="has-background-image has-background-size-contain section css-1m5yryu" data-guid="776822d9-5fd8-8428-5135-9638bc069fb6" data-background="/api/library/iok7qm7p9q6xv3ndphrgbb54"><div class="container" id="hero-copy"><div class="layout flex flex--12" data-guid="2b8696c8-ff23-d3d9-eca8-67f6f5f849ba"><div class="column flex__item--md-12 flex__item--xs-12 css-vfaad" data-guid="aca82e01-fd48-7f08-c6a8-6e1845585be8"><div class="inner-column css-eeduzr"><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="a4e80de9-a8a3-69f9-9ec8-f46846987cbf" class="widget"><style data-emotion-css="v1i7mk">.css-v1i7mk{height:6px;}@media (min-width:48em){.css-v1i7mk{height:95px;}}</style><div class="lp-space-react w-a4e80de9-a8a3-69f9-9ec8-f46846987cbf css-v1i7mk" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="79181178-aa48-9828-bf28-435819eb1968" class="widget"><div class="lp-text-react lp-headline-react" data-widget-type="LpTextReact"><p class="text-align-center font-scale-10 line-height-scale-2"><span style="color: rgb(249, 245, 242);"><span style="font-family: &quot;DrukTextWide&quot;, sans-serif;">MONTEVIDEO<br>DECLARATION</span></span></p></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="420aefab-8878-ab68-47d3-7be8e0a5f948" class="widget"><style data-emotion-css="1myyf8b">.css-1myyf8b{height:6px;}@media (min-width:48em){.css-1myyf8b{height:39px;}}</style><div class="lp-space-react w-420aefab-8878-ab68-47d3-7be8e0a5f948 css-1myyf8b" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div></div></div></div></div></section><style data-emotion-css="1jyljul">.css-1jyljul{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);background-size:cover;background-position:center center;background-repeat:no-repeat;}.css-1jyljul > .container{padding-top:0vw;padding-right:4vw;padding-bottom:0vw;padding-left:4vw;padding-top:0cqw;padding-right:4cqw;padding-bottom:0cqw;padding-left:4cqw;}.site-header .css-1jyljul > .container{padding-top:-5px;padding-right:0;padding-bottom:-5px;padding-left:0;-webkit-transition:padding 0.03s ease;transition:padding 0.03s ease;}.bar .css-1jyljul{padding:0 50px;}@media (max-width:23.75em){.bar .css-1jyljul{padding:0 25px;}}@media (min-width:71.25em){.css-1jyljul > .container{padding-top:0px;padding-right:45.6px;padding-bottom:0px;padding-left:45.6px;}}</style><section class="section css-1jyljul" data-guid="6bfdbb93-8e58-c018-1e28-78b8d44d9668"><div class="container" id="hero-copy-copy-copy"><div class="layout flex flex--12" data-guid="e76de618-e3b8-22d8-c398-4188d7481b28"><div class="column flex__item--md-12 flex__item--xs-12 css-vfaad" data-guid="14a86a48-8b58-2408-af6a-21184b5846f8"><div class="inner-column css-eeduzr"><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="7aa854a8-c7c8-0118-0acc-7ef802f705a8" class="widget"><style data-emotion-css="157w624">.css-157w624{height:6px;}
73@media (min-width:48em){.css-157w624{height:24px;}}</style><div class="lp-space-react w-7aa854a8-c7c8-0118-0acc-7ef802f705a8 css-157w624" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="2b7824b8-5d2c-5498-b4e8-107871c289e8" class="widget"><div class="css-1yltisf"><div><style data-emotion-css="ro8sr6">.css-ro8sr6{display:inline-block;vertical-align:middle;max-width:2610px;}@media (max-width:530px){.site-header .composite .widget .css-ro8sr6{max-width:calc(100% - 80px);}}</style><img class="lp-image-react w-2b7824b8-5d2c-5498-b4e8-107871c289e8 css-ro8sr6" src="/api/library/y2nirxncouartfpfnqtqwinb?w=1064&amp;fit=scale-down&amp;format=auto&amp;quality=82" data-image-upload-source="builder3" alt="" style="width:100%; height:auto" fetchpriority="high" srcset="/api/library/y2nirxncouartfpfnqtqwinb?w=320&amp;fit=scale-down&amp;format=auto&amp;quality=82 320w, /api/library/y2nirxncouartfpfnqtqwinb?w=480&amp;fit=scale-down&amp;format=auto&amp;quality=82 480w, /api/library/y2nirxncouartfpfnqtqwinb?w=640&amp;fit=scale-down&amp;format=auto&amp;quality=82 640w, /api/library/y2nirxncouartfpfnqtqwinb?w=960&amp;fit=scale-down&amp;format=auto&amp;quality=82 960w, /api/library/y2nirxncouartfpfnqtqwinb?w=1064&amp;fit=scale-down&amp;format=auto&amp;quality=82 1064w" sizes="100vw" width="2610" height="1680"></div></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="b098a278-019a-8b71-5aad-16681bbdb238" class="widget"><div class="lp-text-react lp-headline-react" data-widget-type="LpTextReact"><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">The Panamerican Congress,</span></span></p><p class="text-align-left font-scale-8"><br></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Gathering</strong></em> in Montevideo, two hundred years after Bolívar summoned the American republics to Panama, seeking solidarity between peoples, sovereignty among nations;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Stressing</strong></em> that the doctrine of domination of which he warned has now returned in full force, with a renewed claim to spread liberty while laying siege to entire nations, suffocating their societies, debilitating their economies, and subordinating their democracies;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Repudiating</strong></em> the application of military actions and unilateral coercive measures that violate international law and menace the ‘Zone of Peace’, such as the kidnapping of heads of state and the bombing of civilians in the Caribbean;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Denouncing</strong></em> the diverse forms of legal warfare that have been deployed to disqualify elected officials — from President Cristina Fernández de Kirchner to Vice President Jorge Glas to President Gustavo Petro — through methods that undermine popular sovereignty;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Reaffirming</strong></em> our commitment to the Bogotá and Mexico City Declarations, and our determination to advance their implementation alongside the commitments we make today before the peoples of the Americas;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Echoing</strong></em> the testimonies brought to this Congress of territories such as Puerto Rico and Las Malvinas still held under colonial rule, which not only remind us of the unfinished struggle to decolonize the Americas, but offer a dire warning for what may come from its recolonization;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Condemning</strong></em> without reservation the economic, commercial, and financial blockade that for more than sixty 
73years has besieged the people of Cuba, a policy of collective punishment that denies them the right to decide their own destiny;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Affirming</strong></em> that our América will be neither complicit in genocide nor intimidated from actions to detain it, whether in the case of the Palestinian people on the Gaza Strip or in the present efforts to export these annihilationist tactics back our hemisphere;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Commemorating</strong></em> the lives already claimed by the old doctrine of domination: children in hospitals, fisherfolk at sea, migrants in ICE detention, indigenous peoples on their ancestral lands, and social and political leaders persecuted as "terrorists" across the American continent simply because of their beliefs;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Celebrating</strong></em> the resilience and resistance of our peoples, who organize in unions, in courts, in parliaments, and in our streets, answering coercion with coordination and meeting campaigns of fear with campaigns to strengthen solidarity;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Stressing</strong></em> that unity is victory, and that this renewed doctrine of domination can be defeated only by a new architecture of hemispheric cooperation, built by the legislators gathered here in collaboration with the communities they represent;</span></span></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Expressing</strong></em> our gratitude to the Frente Amplio and the people of Uruguay for hosting the third edition of the Panamerican Congress, a people that offers a shining example of democratic renewal and that keeps alive the memory of the horrors of dictatorship;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">Calls to:</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Renew</strong></em> our democracies in service of the needs of our peoples, defending the</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">principle of popular sovereignty against the doctrine of unilateral supremacy;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Protect</strong></em> the democratic rights and freedoms won by centuries of struggle, combating the criminalization of protest and the press, and defending the legislatures whose mandates are seized by force rather than won at the ballot;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Fight</strong></em> for the immediate and unconditional end of the cruel and criminal blockade of Cuba, upholding the inalienable right of the Cuban people to decide their destiny free of foreign interference;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Combat</strong></em> organized crime through democratic means, protecting our communities by redressing the root causes of their insecurity such as the production of arms in the United States and the absence of welfare services that militate against drug addiction, while strengthening regional cooperation to prosecute the financial networks that sustain criminal organizations;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Build</strong></em> a sovereign and shared prosperity, breaking with decades of policy that mistook austerity for destiny, defending the right of every nation to plan its own industry, tax its own wealth, and protect its own workers, and rejecting trade relations dictated by a class of transnational capital that answers to no one;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Promote</strong></em> greater productive integration, stronger regional value chains, quality</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">employment, technological development, and industrial and energy strategies</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">capable of sustaining a just ecological transition;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Govern</strong></em> the technologies controlled today by a handful of corporations, affirming the principle of digital sovereignty to protect the privacy of our citizens and the</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">development of our economies, and rejecting the reproduction, in digital form, of</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">resource extraction carried out to enrich servers and shareholders abroad;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Strengthen</strong></em>
73 public and regional digital infrastructure, scientific and technological capacities, and democratic frameworks for the governance of digital platforms and artificial intelligence, while narrowing digital divides and protecting children and young people within these environments;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Weave</strong></em> a new social pact of shared dignity, recognizing that caring for one another is a collective responsibility and not a private burden, and rebuilding the public capacities that decades of deliberate deregulation have dismantled, so that health, housing, and a dignified old age are guaranteed rights rather than rationed goods;</span></span></p><p class="text-align-left font-scale-8"><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Reclaim</strong></em> the sovereign equality of nations, rejecting every form of coercion, economic, judicial, electoral, or military, used to subordinate the weak to the strong, and defending the right of every people in this hemisphere to determine its own future without foreign tutelage;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Forge</strong></em> a solidarity that transcends borders, making the demands of one nation the demands of all, and upholding the conviction that the liberation of any one of our peoples is inseparably bound to the liberation of the rest.</span></span><br></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">Today, 23 August 2026, we therefore unite to:</span></span></p><p class="text-align-left font-scale-8"><br></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Combat</strong></em> the renewed doctrine of domination in all its forms, defending the rights and freedoms won across centuries of struggle for self-determination;</span></span><br></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Collaborate</strong></em> from our respective legislatures to advance our own vision of</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">hemispheric cooperation, based on solidarity between peoples and sovereignty</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">among nations;</span></span></p><p class="text-align-left font-scale-8"></p><p class="text-align-left font-scale-8"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><em><strong>Convene</strong></em> the Fourth Panamerican Congress in Brazil, in August 2027, carrying</span></span><br><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;">forward, two hundred years later, the unfinished work Bolívar began in Panama.</span></span></p><p class="text-align-left font-scale-8"></p></div></div></div></div></div></div></div></div></div></div></div></div></section><style data-emotion-css="1so66sb">.css-1so66sb{background-color:rgba(249,245,242,1);border-color:rgba(249,245,242,1);background-size:cover;background-position:center center;background-repeat:no-repeat;}.css-1so66sb > .container{padding-top:0vw;padding-right:0vw;padding-bottom:0vw;padding-left:3vw;padding-top:0cqw;padding-right:0cqw;padding-bottom:0cqw;padding-left:3cqw;}.site-header .css-1so66sb > .container{padding-top:-5px;padding-right:0;
73padding-bottom:-5px;padding-left:0;-webkit-transition:padding 0.03s ease;transition:padding 0.03s ease;}.bar .css-1so66sb{padding:0 50px;}@media (max-width:23.75em){.bar .css-1so66sb{padding:0 25px;}}@media (min-width:71.25em){.css-1so66sb > .container{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:34.2px;}}</style><section class="hidden-desktop hidden-tablet section css-1so66sb" data-guid="c1956228-a1b8-9bf8-7f68-31e4b6538511"><div class="container" id="contact-copy-copy-copy"><div class="layout flex flex--12" data-guid="5cd25838-6778-5ab8-d118-9b5891f83648"><div class="column flex__item--md-6 flex__item--xs-12 css-vfaad" data-guid="c7982b65-d7c8-1be3-2f68-c458dd68ef6f"><div class="inner-column css-eeduzr"><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="69e6dd84-2348-54b8-a267-6bddfc1d8696" class="widget"><style data-emotion-css="15kihin">.css-15kihin{height:6px;}@media (min-width:48em){.css-15kihin{height:7px;}}</style><div class="lp-space-react w-69e6dd84-2348-54b8-a267-6bddfc1d8696 css-15kihin" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="5008cf88-971d-f051-2216-c3e90d223ad3" class="widget"><div class="lp-text-react lp-headline-react" data-widget-type="LpTextReact"><p class="text-align-left font-scale-10"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;DrukTextWide&quot;, sans-serif;"><span style="font-style: normal"><u>CONTACT</u></span></span></span></p></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="03116758-98d7-57bb-2fa8-11ffba0177a7" class="widget"><div class="lp-text-react lp-headline-react" data-widget-type="LpTextReact"><p class="text-align-left font-scale-6"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><span style="font-style: normal">For all inquiries, please write to </span></span><a href="mailto: [email protected]" target="_top" data-link-type="external"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><span style="font-style: normal">[email protected]</span></span></a></span></p></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="61ed1f98-27aa-29b8-13c8-bd686e58cb82" class="widget"><style data-emotion-css="1w95p3t">.css-1w95p3t{height:6px;}@media (min-width:48em){.css-1w95p3t{height:-12px;}}</style><div class="lp-space-react w-61ed1f98-27aa-29b8-13c8-bd686e58cb82 css-1w95p3t" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div></div></div><div class="column flex__item--md-6 flex__item--xs-12 css-vfaad" data-guid="8c5ee508-8068-e648-8468-b8884c982a08"><div class="inner-column css-eeduzr"></div></div></div></div></section><style data-emotion-css="eporc3">.css-eporc3{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0);background-size:cover;background-position:center center;background-repeat:no-repeat;}.css-eporc3 > .container{padding-top:0vw;padding-right:0vw;padding-bottom:0vw;padding-left:0vw;padding-top:0cqw;padding-right:0cqw;padding-bottom:0cqw;padding-left:0cqw;}.site-header .css-eporc3 > .container{padding-top:-5px;padding-right:0;
73padding-bottom:-5px;padding-left:0;-webkit-transition:padding 0.03s ease;transition:padding 0.03s ease;}.bar .css-eporc3{padding:0 50px;}@media (max-width:23.75em){.bar .css-eporc3{padding:0 25px;}}@media (min-width:71.25em){.css-eporc3 > .container{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}}</style><section class="hidden-mobile section css-eporc3" data-guid="f8d920f5-8d88-b1c8-223f-b5f84b9d3a02"><div class="container" id="contact-copy-copy"><div class="layout flex flex--12" data-guid="ad186b9e-4a39-1fa8-91fa-de780ae869d8"><div class="column flex__item--md-6 flex__item--xs-12 css-vfaad" data-guid="7288355d-cdc8-3f0f-4e4e-ccab91f81e37"><div class="inner-column css-eeduzr"><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="8fd80df7-4a08-67bd-9ea8-465851579171" class="widget"><div class="lp-space-react w-8fd80df7-4a08-67bd-9ea8-465851579171 css-15kihin" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="9e182ac2-115c-31bf-32c8-46e89595deb8" class="widget"><div class="lp-text-react lp-headline-react" data-widget-type="LpTextReact"><p class="text-align-left font-scale-10"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;DrukTextWide&quot;, sans-serif;"><span style="font-style: normal"><u>CONTACT</u></span></span></span></p></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="8baccee8-2df8-55e2-dd74-691e25aca6dd" class="widget"><div class="lp-text-react lp-headline-react" data-widget-type="LpTextReact"><p class="text-align-left font-scale-7"><span style="color: rgba(0, 0, 0, 1);"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><span style="font-style: normal">For all inquiries, please write to </span></span><a href="mailto: [email protected]" target="_top" data-link-type="external"><span style="font-family: &quot;NHaasGroteskDSPro&quot;, sans-serif;"><span style="font-style: normal">[email protected]</span></span></a></span></p></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="7b8b302a-6d2d-2498-120d-570878967778" class="widget"><div class="lp-space-react w-7b8b302a-6d2d-2498-120d-570878967778 css-1w95p3t" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div></div></div><div class="column flex__item--md-6 flex__item--xs-12 css-vfaad" data-guid="8ff8a6da-c8c8-f458-e04b-e7a8e7a8e968"><div class="inner-column css-eeduzr"><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="e6d4e193-563d-fd8a-63a8-6523d319aea1" class="widget"><div class="lp-space-react w-e6d4e193-563d-fd8a-63a8-6523d319aea1 css-15kihin" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="46fb46a3-4818-8459-cb18-35c8da97c6e8" class="widget"><style data-emotion-css="889chh">.css-889chh{text-align:right;}</style><div class="css-889chh"><div><style data-emotion-css="1qlbiyf">.css-1qlbiyf{display:inline-block;vertical-align:middle;max-width:1000px;}@media (max-width:530px){.site-header .composite .widget .css-1qlbiyf{max-width:calc(100% - 80px);}}</style><img class="lp-image-react w-46fb46a3-4818-8459-cb18-35c8da97c6e8 css-1qlbiyf" src="/api/library/ihuua7kbfb9xi98rlcix2yl4?w=1064&amp;fit=scale-down&amp;format=auto&amp;quality=82" data-image-upload-source="builder3" alt="" style="width:6
735%; height:auto" loading="lazy" srcset="/api/library/ihuua7kbfb9xi98rlcix2yl4?w=320&amp;fit=scale-down&amp;format=auto&amp;quality=82 320w, /api/library/ihuua7kbfb9xi98rlcix2yl4?w=480&amp;fit=scale-down&amp;format=auto&amp;quality=82 480w, /api/library/ihuua7kbfb9xi98rlcix2yl4?w=640&amp;fit=scale-down&amp;format=auto&amp;quality=82 640w, /api/library/ihuua7kbfb9xi98rlcix2yl4?w=960&amp;fit=scale-down&amp;format=auto&amp;quality=82 960w, /api/library/ihuua7kbfb9xi98rlcix2yl4?w=1064&amp;fit=scale-down&amp;format=auto&amp;quality=82 1064w" sizes="auto, 100vw" width="1000" height="489"></div></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="b09b70c1-b748-ea28-f17c-9e38a46811e2" class="widget"><div class="lp-space-react w-b09b70c1-b748-ea28-f17c-9e38a46811e2 css-15kihin" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div></div></div></div></div></section><style data-emotion-css="yh1pn2">.css-yh1pn2{background-color:rgba(255,128,84,1);border-color:rgba(255,128,84,1);background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0)),url("/api/library/ruz8qptt3csp1cmysc51pvpd");background-size:cover;background-position:center center;background-repeat:no-repeat;}.css-yh1pn2 > .container{padding-top:0vw;padding-right:0vw;padding-bottom:0vw;padding-left:0vw;padding-top:0cqw;padding-right:0cqw;padding-bottom:0cqw;padding-left:0cqw;}.site-header .css-yh1pn2 > .container{padding-top:-5px;padding-right:0;padding-bottom:-5px;padding-left:0;-webkit-transition:padding 0.03s ease;transition:padding 0.03s ease;}.bar .css-yh1pn2{padding:0 50px;}@media (max-width:23.75em){.bar .css-yh1pn2{padding:0 25px;}}@media (min-width:71.25em){.css-yh1pn2 > .container{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}}</style><section class="hidden-mobile has-background-image has-background-size-cover section css-yh1pn2" data-guid="9f1d441c-0f9f-d568-c9dd-b1b478cd0118" data-background="/api/library/ruz8qptt3csp1cmysc51pvpd"><div class="container" id="footer-copy-copy"><div class="layout flex flex--12" data-guid="6eb8f122-7f7a-9538-a203-071872af1ed8"><div class="column flex__item--md-12 flex__item--xs-12 css-vfaad" data-guid="4968ffc8-e108-c85f-5791-6dd64bb81ffa"><div class="inner-column css-eeduzr"><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="6e4eabb8-8608-0466-e9e8-6f58c488d538" class="widget"><style data-emotion-css="pdcc3p">.css-pdcc3p{height:6px;}@media (min-width:48em){.css-pdcc3p{height:25px;}}</style><div class="lp-space-react w-6e4eabb8-8608-0466-e9e8-6f58c488d538 css-pdcc3p" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div><div class="row flex flex--12 css-47r3vg"><div class="composite flex__item--md-12 flex__item--xs-12 css-8x0d4x"><div class="inner-composite flex flex--12"><div class="widget-column flex__item--md-12 flex__item--xs-12"><div class="widget-row flex flex--12"><div class="flex__item--md-12 flex__item--xs-12"><div data-widget-id="836cd3c8-e155-d0d8-62b8-0b09cb187188" class="widget"><style data-emotion-css="1klih5i">.css-1klih5i{height:6px;}@media (min-width:48em){.css-1klih5i{height:48px;}}</style><div class="lp-space-react w-836cd3c8-e155-d0d8-62b8-0b09cb187188 css-1klih5i" data-widget-type="LpSpaceReact"></div></div></div></div></div></div></div></div></div></div></div></div></section></div>
74    
75    
76    
77
78<script type="text/javascript" data-scriptname="TAILOR">(function(){var exports={};var module={exports: exports};"use strict";function initFunc(){console.assert(window.sup&&window.sup.Tailor,"tailor successfully loaded")}Object.defineProperty(exports,"__esModule",{value:!0}),function(t){function e(t,s){if(!t||!t.parentElement)return null;if(t.parentElement)var i=t.parentElement.querySelectorAll(s);if(i&&1===Array.prototype.filter.call(i,function(e){return e===t}).length)return t;return e(t.parentElement,s)}function s(t){var e;for(e in this.rules=[],this.readQueue=[],this.writeQueue=[],this.opts={parentSelector:"[data-widget-id]"},t)this.opts[e]=t[e]}function i(t){return parseInt(t,10)}function r(t,e){return function(s){return t(s)?e:""}}function n(t,e,s){return s=Math.round(s),(!t||s>=t)&&(!e||s<=e)}s.prototype.register=function(t){if(t&&this.isValid(t.el)){for(var e in t.classFunctions=this.parseBreakPoints(t.breakPoints),t.classNames=[],t.breakPoints)t.classNames.push(t.breakPoints[e]);this.rules.push(t),this.triggerReCalcClassNames()}},s.prototype.isValid=function(t){return!!(t&&e(t,this.opts.parentSelector))},s.prototype.parseBreakPoints=function(t){var e,s=[];for(var a in t){var o=t[a];switch(a.charAt(0)){case"<":e=n.bind(this,null,parseInt(a.slice(1),10));break;case">":e=n.bind(this,parseInt(a.slice(1),10),null);break;default:var u=a.split("-").map(i);e=n.bind(this,u[0],u[1])}s.push(r(e,o))}return s},s.prototype.triggerReCalcClassNames=function(){this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(this.reCalcClassNames.bind(this),150)},s.prototype.stillValid=function(t){return!!this.isValid(t.el)||(this.remove(t),!1)},s.prototype.makeTasks=function(s){var i={},r=[];return i.el=s.el,i.add=s.classFunctions.reduce(function(s,n){var a,o=e(i.el,this.opts.parentSelector);a=function(e){var s=t.getComputedStyle(e,null),i=s.getPropertyValue("padding-left"),r=s.getPropertyValue("padding-right");return parseFloat(i)+parseFloat(r)}(o);var u=n(o.offsetWidth-a<t.innerWidth?o.offsetWidth-a:t.innerWidth);return u&&(r.push(u),i.el.classList.contains(u)||s.push(u)),s}.bind(this),[]),i.remove=s.classNames.filter(function(t){return-1===r.indexOf(t)&&i.el.classList.contains(t)},this),i},s.prototype.reCalcClassNames=function(){this.readQueue=this.rules.slice(0),this.writeQueue=this.readQueue.filter(this.stillValid,this).map(this.makeTasks,this),this.writeClassNames()},s.prototype.writeClassNames=function(){for(;this.writeQueue.length;){var t=this.writeQueue.pop();t.add.forEach(function(e){t.el.classList.add(e)}),t.remove.forEach(function(e){t.el.classList.remove(e)})}},s.prototype.remove=function(t){this.rules=this.rules.filter(function(e){return e!==t})},t.sup=t.sup||{},t.sup.Tailor=s,t.sup.tailor=new s,t.addEventListener("resize",t.sup.tailor.triggerReCalcClassNames.bind(t.sup.tailor))}(window),exports.default=initFunc;;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
vendor: 1 bytes, line 78
78
79<script type="text/javascript" data-scriptname="MAPPER">(function(){var exports={};var module={exports: exports};"use strict";function unwrapExports(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function createCommonjsModule(e,r){return e(r={exports:{}},r.exports),r.exports}Object.defineProperty(exports,"__esModule",{value:!0});var _typeof_1=createCommonjsModule(function(e){function r(t){return e.exports=r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,r(t)}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(_typeof_1);var toPrimitive_1=createCommonjsModule(function(e){var r=_typeof_1.default;e.exports=function(e,t){if("object"!=r(e)||!e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var n=o.call(e,t||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(toPrimitive_1);var toPropertyKey_1=createCommonjsModule(function(e){var r=_typeof_1.default;e.exports=function(e){var t=toPrimitive_1(e,"string");return"symbol"==r(t)?t:t+""},e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(toPropertyKey_1);var defineProperty=createCommonjsModule(function(e){e.exports=function(e,r,t){return(r=toPropertyKey_1(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e},e.exports.__esModule=!0,e.exports.default=e.exports}),_defineProperty=unwrapExports(defineProperty),arrayWithHoles=createCommonjsModule(function(e){e.exports=function(e){if(Array.isArray(e))return e},e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(arrayWithHoles);var iterableToArrayLimit=createCommonjsModule(function(e){e.exports=function(e,r){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var o,n,u,i,a=[],s=!0,p=!1;try{if(u=(t=t.call(e)).next,0===r){if(Object(t)!==t)return;s=!1}else for(;!(s=(o=u.call(t)).done)&&(a.push(o.value),a.length!==r);s=!0);}catch(e){p=!0,n=e}finally{try{if(!s&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(p)throw n}}return a}},e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(iterableToArrayLimit);var arrayLikeToArray=createCommonjsModule(function(e){e.exports=function(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,o=Array(r);t<r;t++)o[t]=e[t];return o},e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(arrayLikeToArray);var unsupportedIterableToArray=createCommonjsModule(function(e){e.exports=function(e,r){if(e){if("string"==typeof e)return arrayLikeToArray(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?arrayLikeToArray(e,r):void 0}},e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(unsupportedIterableToArray);var nonIterableRest=createCommonjsModule(function(e){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.__esModule=!0,e.exports.default=e.exports});unwrapExports(nonIterableRest);var slicedToArray=createCommonjsModule(function(e){e.exports=function(e,r){return arrayWithHoles(e)||iterableToArrayLimit(e,r)||unsupportedIterableToArray(e,r)||nonIterableRest()},e.exports.__esModule=!0,e.exports.default=e.exports}),_slicedToArray=unwrapExports(slicedToArray);function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};
79r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function getLocationSearch(){return window.location.search||""}function getQueryString(){return getLocationSearch().replace("?","")}function serializeQueryString(e){return Object.keys(e).map(function(r){return"".concat(encodeURIComponent(r),"=").concat(encodeURIComponent(e[r]))}).join("&")}function deserializeQueryString(e){return e.split("&").reduce(function(e,r){var t=e,o=r.split("="),n=_slicedToArray(o,2),u=n[0],i=void 0===u?"":u,a=n[1],s=void 0===a?"":a;return""!==i&&""!==s&&(t[decodeURIComponent(i)]=decodeURIComponent(s)),t},{})}function getQueryValue(e){return deserializeQueryString(getQueryString())[e]}function appendToQuery(e,r){return serializeQueryString(_objectSpread(_objectSpread({},deserializeQueryString(e)),r))}function addQueriesToUrl(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(0===Object.keys(r).length)return e;var t=e.split("?"),o=_slicedToArray(t,2),n=o[0],u=o[1],i=void 0===u?"":u;if(!i)return[n].concat(serializeQueryString(r)).join("?");var a=i.split("#"),s=_slicedToArray(a,2),p=s[0],c=s[1],l=void 0===c?"":c;return p=appendToQuery(p,r),l&&(p="".concat(p,"#").concat(l)),"".concat(n,"?").concat(p)}function module$1(){window.sup||(window.sup={}),window.sup.widgetTypes||(window.sup.widgetTypes={}),window.sup.widgets||(window.sup.widgets=[]),window.sup.register=function(e,r){window.sup.widgetTypes[e]=r,window.sup.scan(e)},window.sup.scan=function(e){var r=window.sup.widgetTypes[e];if(r&&"function"==typeof r){var t=document.querySelectorAll('[data-widget-type="'.concat(e,'"]'));Array.prototype.forEach.call(t,function(e){window.sup.widgets.push(r(e))})}};var e=getQueryValue("customerToken");if(e){var r=document.querySelectorAll("[data-widget-link]");Array.prototype.forEach.call(r,function(r){r.href=addQueriesToUrl(r.href,{customerToken:e})})}}exports.default=module$1;;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
vendor: 1 bytes, line 79
79
80<script type="text/javascript" data-scriptname="IFRAME">(function(){var exports={};var module={exports: exports};"use strict";function initFunc(){if(window.FB||/(marketplace\/template|suppress_hero=true)/.test(window.location.href)){var e=document.querySelectorAll(".section");Array.prototype.slice.call(e).forEach(function(e){var t=e;if(t.style.minHeight&&-1!==t.style.minHeight.indexOf("vh")){var i=10*parseInt(t.style.minHeight,10);t.style.minHeight="".concat(i,"px")}})}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=initFunc;;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
vendor: 1 bytes, line 80
80
81<script type="text/javascript" data-scriptname="INTERSECTION_OBSERVER">(function(){var exports={};var module={exports: exports};"use strict";function initFunc(){}Object.defineProperty(exports,"__esModule",{value:!0}),function(t,e){function n(t){this.time=t.time,this.target=t.target,this.rootBounds=t.rootBounds,this.boundingClientRect=t.boundingClientRect,this.intersectionRect=t.intersectionRect||{top:0,bottom:0,left:0,right:0,width:0,height:0},this.isIntersecting=!!t.intersectionRect;var e=this.boundingClientRect,n=e.width*e.height,o=this.intersectionRect,i=o.width*o.height;this.intersectionRatio=n?Number((i/n).toFixed(4)):this.isIntersecting?1:0}function o(t,e){var n,o,i,r=e||{};if("function"!=typeof t)throw new Error("callback must be a function");if(r.root&&1!=r.root.nodeType)throw new Error("root must be an Element");this._checkForIntersections=(n=this._checkForIntersections.bind(this),o=this.THROTTLE_TIMEOUT,i=null,function(){i||(i=setTimeout(function(){n(),i=null},o))}),this._callback=t,this._observationTargets=[],this._queuedEntries=[],this._rootMarginValues=this._parseRootMargin(r.rootMargin),this.thresholds=this._initThresholds(r.threshold),this.root=r.root||null,this.rootMargin=this._rootMarginValues.map(function(t){return t.value+t.unit}).join(" ")}function i(t,e,n,o){"function"==typeof t.addEventListener?t.addEventListener(e,n,o||!1):"function"==typeof t.attachEvent&&t.attachEvent("on"+e,n)}function r(t,e,n,o){"function"==typeof t.removeEventListener?t.removeEventListener(e,n,o||!1):"function"==typeof t.detatchEvent&&t.detatchEvent("on"+e,n)}function s(t){var e;try{e=t.getBoundingClientRect()}catch(t){}return e?(e.width&&e.height||(e={top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.right-e.left,height:e.bottom-e.top}),e):{top:0,bottom:0,left:0,right:0,width:0,height:0}}function h(t,e){for(var n=e;n;){if(n==t)return!0;n=c(n)}return!1}function c(t){var e=t.parentNode;return e&&11==e.nodeType&&e.host?e.host:e&&e.assignedSlot?e.assignedSlot.parentNode:e}"IntersectionObserver"in t&&"IntersectionObserverEntry"in t&&"intersectionRatio"in t.IntersectionObserverEntry.prototype?"isIntersecting"in t.IntersectionObserverEntry.prototype||Object.defineProperty(t.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}}):(o.prototype.THROTTLE_TIMEOUT=100,o.prototype.POLL_INTERVAL=null,o.prototype.USE_MUTATION_OBSERVER=!0,o.prototype.observe=function(t){if(!this._observationTargets.some(function(e){return e.element==t})){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},o.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter(function(e){return e.element!=t}),this._observationTargets.length||(this._unmonitorIntersections(),this._unregisterInstance())},o.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},o.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},o.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter(function(t,e,n){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==n[e-1]})},o.prototype._parseRootMargin=function(t){var e=(t||"0px").split(/\s+/).map(function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}});return e[1]=e[1]||e[0],e[2]=e[2]||e[0],e[3]=e[3]||e[1],e},o.prototype._monitorIntersections=function(){this._monitoringIntersections||(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(i(t,"resize",this._checkForIntersections,!0),i(e,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in t&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},o.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,r(t,"resize",this._checkForIntersections,!0),r(e,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},o.prototype._checkForIntersections=function(){var e=this._rootIsInDom(),o=e?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};
81this._observationTargets.forEach(function(i){var r=i.element,h=s(r),c=this._rootContainsTarget(r),u=i.entry,a=e&&c&&this._computeTargetAndRootIntersection(r,o),l=i.entry=new n({time:t.performance&&performance.now&&performance.now(),target:r,boundingClientRect:h,rootBounds:o,intersectionRect:a});u?e&&c?this._hasCrossedThreshold(u,l)&&this._queuedEntries.push(l):u&&u.isIntersecting&&this._queuedEntries.push(l):this._queuedEntries.push(l)},this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},o.prototype._computeTargetAndRootIntersection=function(n,o){if("none"!=t.getComputedStyle(n).display){for(var i,r,h,u,a,l,p,d,g=s(n),f=c(n),_=!1;!_;){var v=null,m=1==f.nodeType?t.getComputedStyle(f):{};if("none"==m.display)return;if(f==this.root||f==e?(_=!0,v=o):f!=e.body&&f!=e.documentElement&&"visible"!=m.overflow&&(v=s(f)),v&&(i=v,r=g,h=void 0,u=void 0,a=void 0,l=void 0,p=void 0,d=void 0,h=Math.max(i.top,r.top),u=Math.min(i.bottom,r.bottom),a=Math.max(i.left,r.left),l=Math.min(i.right,r.right),d=u-h,!(g=(p=l-a)>=0&&d>=0&&{top:h,bottom:u,left:a,right:l,width:p,height:d})))break;f=c(f)}return g}},o.prototype._getRootRect=function(){var t;if(this.root)t=s(this.root);else{var n=e.documentElement,o=e.body;t={top:0,left:0,right:n.clientWidth||o.clientWidth,width:n.clientWidth||o.clientWidth,bottom:n.clientHeight||o.clientHeight,height:n.clientHeight||o.clientHeight}}return this._expandRectByRootMargin(t)},o.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map(function(e,n){return"px"==e.unit?e.value:e.value*(n%2?t.width:t.height)/100}),n={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},o.prototype._hasCrossedThreshold=function(t,e){var n=t&&t.isIntersecting?t.intersectionRatio||0:-1,o=e.isIntersecting?e.intersectionRatio||0:-1;if(n!==o)for(var i=0;i<this.thresholds.length;i++){var r=this.thresholds[i];if(r==n||r==o||r<n!=r<o)return!0}},o.prototype._rootIsInDom=function(){return!this.root||h(e,this.root)},o.prototype._rootContainsTarget=function(t){return h(this.root||e,t)},o.prototype._registerInstance=function(){},o.prototype._unregisterInstance=function(){},t.IntersectionObserver=o,t.IntersectionObserverEntry=n)}(window,document),exports.default=initFunc;;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
81
82
83<script type="text/javascript" data-scriptname="CONVERSION_CLICK">(function(){var exports={};var module={exports: exports};"use strict";function setup(){var e=document.querySelector('meta[name="leadpages-meta-id"]').content,t=document.querySelector('meta[name="active-route"]'),n=document.querySelectorAll("a[data-widget-link][data-conversion-click]");Array.prototype.forEach.call(n,function(n){var o="external"===n.dataset.linkType&&"_top"===n.target;n.addEventListener("click",function(c){if(window.center&&window.center.loaded){var a=t&&t.content?{customId:"site-".concat(e,":").concat(t.content)}:{};(o=o&&!n.getAttribute("data-standalone-leadbox"))&&(c.preventDefault(),a.callback=function(){window.top.location.href=n.href});try{window.center("get","identity",function(){return window.center("send","conversion",null,null,null,a)})}catch(e){o&&(window.top.location.href=n.href)}}})})}function initFunc(){"complete"===document.readyState?setup():window.addEventListener("DOMContentLoaded",setup)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=initFunc,exports.setup=setup;;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
vendor: 1 bytes, line 83
83
84<script type="text/javascript" data-scriptname="POWERED_BY">(function(){var exports={};var module={exports: exports};"use strict";function addPoweredBy(){var e='\n    <div id="powered-by-container" class="powered-by__container">\n      <div class="powered-by__sub_container">\n        <div class="powered-by__top_container">\n          <svg height="24" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right:6px">\n            <g clip-path="url(#paint0_angular_26_506_clip_path)"><g transform="matrix(-0.00960912 0.00960912 -0.0100269 -0.0100269 19.0863 8.76573)"><foreignObject x="-1608.46" y="-1608.46" width="3216.92" height="3216.92"><div xmlns="http://www.w3.org/1999/xhtml" style="background:conic-gradient(from 90deg,rgba(255, 255, 255, 1) 0deg,rgba(255, 255, 255, 0.8) 216deg,rgba(255, 255, 255, 0) 360deg);height:100%;width:100%;opacity:1"></div></foreignObject></g></g><path fill-rule="evenodd" clip-rule="evenodd" d="M11.8138 0.000976562C10.0343 0.000976562 8.5918 1.44349 8.5918 3.22293V8.59277H19.3317V19.3326H11.8138C10.0343 19.3326 8.5918 17.8901 8.5918 16.1107V16.1108C8.5918 17.8902 10.0343 19.3327 11.8137 19.3327H24.7016C26.481 19.3327 27.9236 17.8902 27.9236 16.1108V0.000976562H11.8138Z"/>\n            <g clip-path="url(#paint1_angular_26_506_clip_path)"><g transform="matrix(0.00960912 -0.00960912 0.0100269 0.0100269 10.4945 17.3575)"><foreignObject x="-1608.46" y="-1608.46" width="3216.92" height="3216.92"><div xmlns="http://www.w3.org/1999/xhtml" style="background:conic-gradient(from 90deg,rgba(255, 255, 255, 1) 0deg,rgba(255, 255, 255, 0.9) 144deg,rgba(255, 255, 255, 0.8) 216deg,rgba(255, 255, 255, 0) 360deg);height:100%;width:100%;opacity:1"></div></foreignObject></g></g><path fill-rule="evenodd" clip-rule="evenodd" d="M3.22 8.59277C1.44164 8.59277 0 10.0344 0 11.8128V24.7026C0 26.482 1.44251 27.9245 3.22195 27.9245H16.1118C17.8901 27.9245 19.3318 26.4829 19.3318 24.7045V8.59277H19.3317V19.3326H11.8138C10.0344 19.3326 8.59186 17.8901 8.59186 16.1107V8.59277H3.22Z"/>\n            <defs><clipPath id="paint0_angular_26_506_clip_path"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.8138 0.000976562C10.0343 0.000976562 8.5918 1.44349 8.5918 3.22293V8.59277H19.3317V19.3326H11.8138C10.0343 19.3326 8.5918 17.8901 8.5918 16.1107V16.1108C8.5918 17.8902 10.0343 19.3327 11.8137 19.3327H24.7016C26.481 19.3327 27.9236 17.8902 27.9236 16.1108V0.000976562H11.8138Z"/></clipPath><clipPath id="paint1_angular_26_506_clip_path"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.22 8.59277C1.44164 8.59277 0 10.0344 0 11.8128V24.7026C0 26.482 1.44251 27.9245 3.22195 27.9245H16.1118C17.8901 27.9245 19.3318 26.4829 19.3318 24.7045V8.59277H19.3317V19.3326H11.8138C10.0344 19.3326 8.59186 17.8901 8.59186 16.1107V8.59277H3.22Z"/></clipPath></defs>\n          </svg>\n          <div class="powered-by__top_text">\n            Powered by Leadpages\n          </div>\n        </div>\n        <div class="powered-by__bottom_container">\n          <div class="powered-by__bottom_header">Turn Clicks into Customers</div>\n          <div class="powered-by__bottom_body">Create your own code-free websites, landing pages, and conversion tools with a free, 14-day trial.</div>\n          <div class="powered-by__bottom_link"><a href="https://lp.leadpages.com/powered-by-leadpages/?utm_source=Leadpages&utm_medium=customerpages&utm_campaign=powered_by" target="_blank">Get Started →</a></div>\n        </div>\n      </div>\n    </div>\n  ',n='\n    <link\n      rel="preload"\n      href="https://classic-assets.leadpages.com/static-leadpages-net/fonts/opensans/OpenSans-Regular.woff2"\n      as="font"\n      type="font/woff2"\n      crossorigin\n    />\n    <link\n      rel="preload"\n      href="https://classic-assets.leadpages.com/static-leadpages-net/fonts/opensans/OpenSans-Bold.woff2"\n      as="font"\n      type="font/woff2"\n      crossorigin\n    />\n    <link\n      href="https://classic-assets.leadpages.com/static-leadpages-net/fonts/opensans_typeset.css"\n      rel="stylesheet"\n      type="text/css"\n    />\n    <style id="powered-by-style">\n      .powered-by__container {\n        position: relative;\n        min-height: 36px;\n        background-color: #000;\n        transition: all 1s ease-in;\n      }\n      .powered-by__sub_container {\n        justify-content: flex-start;\n        flex-direction: column;\n        position: absolute;\n        transition: top .2s ease-in;\n        background-color: #000;\n        overflow: hidden;\n        top: 0px;\n        left: 0px;\n        right: 0px;\n        bottom: 0px;\n      }\n      .powered-by__container:hover .powered-by__sub_container {\n        top: -142px;\n      }\n      .powered-by__container:hover .powered-by__top_container {\n        min-height: 66px;\n      }\n      .powered-by__bottom_container {\n        flex-direction: column;\n        text-align: center;\n      }\n      .powered-by__top_container,\n      .powered-by__bottom_container,\n      .powered-by__bottom_top_bar,\n      .powered-by__container {\n        display: flex;\n        width: 100%;\n        justify-content: center;\n        align-items: center;\n        font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif;\n        font-size: 14px;\n        line-height: 12px;\n        color: #FFF;\n      }\n      .powered-by__bottom_top_bar {\n        padding-bottom: 24px;\n      }\n      .powered-by__top_container {\n        transition: all .1s ease-in .1s;\n        min-height: 36px;\n      }\n      .powered-by__top_text {\n        cursor: default;\n      }\n      .powered-by__bottom_header {\n        flex-direction: column;\n        text-align: center;\n        margin-bottom: 8px;\n        font-weight: 700;\n      }\n      .powered-by__bottom_body {\n        flex-direction: column;\n        text-align: center;\n        line-height: 18px;\n        letter-spacing: 0;\n        width: 350px;\n        margin-bottom: 18px;\n      }\n      .powered-by__bottom_link a {\n        font-weight: 700;\n        font-size: 16px;\n        color: #FFF;\n        text-decoration: none;\n      }\n    </style>\n  ',t=document.getElementById("powered-by-style");t?t.outerHTML=n:document.head.insertAdjacentHTML("beforeend",n);var o=document.getElementById("powered-by-container");
84o?o.outerHTML=e:document.body.insertAdjacentHTML("beforeend",e)}function setup(){var e=!!document.cookie.split("; ").find(function(e){return"lpPoweredBy=1"===e});if(!1===e)try{e="1"===new URLSearchParams(window.location.search).get("lpPoweredBy")}catch(e){}!0===e&&addPoweredBy()}function init(){"complete"===document.readyState?setup():window.addEventListener("DOMContentLoaded",setup)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=init;;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
vendor: 1 bytes, line 84
84
85<script type="text/javascript" data-scriptname="REDUCE_MOTION">(function(){var exports={};var module={exports: exports};"use strict";function toggleThumbnail(e){document.querySelectorAll("iframe").forEach(function(t){var n=t.getAttribute("src");if(n){var o=t.parentElement.querySelector('[data-qa-selector="background-video-thumbnail"]'),c=function(e,t){e&&(e.style.display=t)},a=function(e){t.setAttribute("src","".concat(e,"&cb=").concat((new Date).getTime()))};n.includes("youtube.com")&&o?(c(o,e?"block":"none"),c(t,e?"none":"block")):n.includes("wistia.net")?a(n.replace(/autoPlay=(true|false)/,"autoPlay=".concat(!e))):n.includes("vimeo.com")&&a(n.replace("autoplay=".concat(e?1:0),"autoplay=".concat(e?0:1)))}})}function handleMotionPreference(){toggleThumbnail(window.matchMedia("(prefers-reduced-motion: reduce)").matches)}"undefined"!=typeof window&&(document.addEventListener("DOMContentLoaded",handleMotionPreference),window.matchMedia("(prefers-reduced-motion: reduce)").addEventListener("change",handleMotionPreference));;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
vendor: 1 bytes, line 85
85
86<script type="text/javascript" data-scriptname="DELAY_SCRIPT">"use strict";!function(){var e=document.querySelectorAll("[data-delay-display-seconds]");[].forEach.call(e,function(e){var s=e.getAttribute("data-delay-display-seconds");setTimeout(function(){e.classList.add("is-visible"),e.classList.remove("is-delayed"),e.classList.remove("hide-section"),window.sup.tailor.triggerReCalcClassNames()},1e3*s)})}();</script>
vendor: 1 bytes, line 86
86
87<script type="text/javascript" data-scriptname="IMAGE_CLICKGUARD_SCRIPT">"use strict";window.addEventListener("contextmenu",function(t){var e=t.target.getAttribute("data-image-upload-source");"shutterstock_api"!==e&&"getty_api"!==e||t.preventDefault()});</script>
vendor: 1 bytes, line 87
87
88<script type="text/javascript" data-scriptname="ANIMATE">(function(){var exports={};var module={exports: exports};"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var animateCSS=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"lp-animate__";if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)e.style.visibility="visible";else{var a="".concat(n).concat(t);e.parentElement.style.overflow="visible",e.setAttribute("style","visibility: hidden !important;"),i?setTimeout(function(){e.style.visibility="visible"},1e3*i):e.style.visibility="visible",e.classList.add("".concat(n,"animated"),a),e.addEventListener("animationend",function(t){t.stopPropagation(),e.classList.remove("".concat(n,"animated"),a),e.parentElement.overflow=""},{once:!0})}},handleChange=function(e,t){e.filter(function(e){return e.isIntersecting}).forEach(function(e){var i=e.intersectionRatio,n=(void 0===e.boundingClientRect.height?window.innerHeight:e.boundingClientRect.height)/window.innerHeight;if(n>1||n>.33&&i>=.5||i>=.9){var a=e.target;t.unobserve(a);var o=a.dataset.lpAnimateSection||a.dataset.lpAnimateWidget,r=Number(a.dataset.lpAnimateDelayWidget);animateCSS(a,o,r)}})},makeObserver=function(e,t){var i=new IntersectionObserver(handleChange,{root:null,rootMargin:"0px",threshold:t}),n=i.observe.bind(i),a=document.querySelectorAll(e);Array.prototype.forEach.call(a,function(e){n(e)})},setup=function(){makeObserver("[data-lp-animate-section]",[.075,.5,.9]),makeObserver("[data-lp-animate-widget]",[.075,.5,.9])},init=function(){"complete"===document.readyState?setup():window.addEventListener("DOMContentLoaded",setup)};exports.default=init;;var i=module.exports.default||module.exports;return typeof i==="function"?i.apply(null, arguments):void 0;}());</script>
88
89    
89<script type="text/javascript">
90    (function(){performance&&performance.timing&&window.addEventListener("load",function(){return setTimeout(function(){var e=document.querySelector("meta[name='leadpages-serving-domain']");if(e||e.content!==location.hostname){var t=performance.timing;(new Image).src="https://api.leadpages.io/analytics/v1/observations/capture?version=1.7.13&origin=page-speed&kind=timer,timer,timer,timer,timer,timer,timer,timer,timer,timer&label=domain-lookup,connect,request,ttfb,response,loading,interactive,content-loaded,complete,load&value="+[t.domainLookupEnd-t.domainLookupStart,t.connectEnd-t.connectStart,t.responseStart-t.requestStart,t.responseStart-t.fetchStart,t.responseEnd-t.responseStart,t.domLoading-t.fetchStart,t.domInteractive-t.fetchStart,t.domContentLoadedEventEnd-t.fetchStart,t.domComplete-t.fetchStart,(t.loadEventEnd||t.loadEventStart)-t.fetchStart].join(",")}},0)})}());
91    </script>
91
92    
93  
94
95
96<script>(function(){function show(o){o.style.display="block";document.body.style.overflow="hidden";}function hide(o){o.style.display="none";document.body.style.overflow="";}document.addEventListener("click",function(e){var t=e.target.closest("[data-leadbox-popup]");if(!t)return;if(t.getAttribute("data-htmlpub-popup-target")||/^#(?:popup|modal|dialog)-/.test(t.getAttribute("href")||""))return;e.preventDefault();var id=t.getAttribute("data-leadbox-popup");var o=document.getElementById("lp-classic-box-"+id);if(o)show(o);});document.addEventListener("keydown",function(e){if(e.key==="Escape"){var ifs=document.querySelectorAll(".lp-classic-leadbox-iframe");for(var i=0;i<ifs.length;i++){if(ifs[i].style.display!=="none")hide(ifs[i]);}}});window.addEventListener("message",function(e){if(!e||!e.data||e.data.type!=="htmlpub:leadbox-close"||!e.source)return;var ifs=document.querySelectorAll(".lp-classic-leadbox-iframe");for(var i=0;i<ifs.length;i++){if(ifs[i].contentWindow===e.source){hide(ifs[i]);return;}}});})();</script>
96<div id="classic-popup-XcEz2X2aw3gfaXrWpPy3Ah" data-persist-popup="classic-popup-XcEz2X2aw3gfaXrWpPy3Ah" data-persist-popup-chrome="none" data-persist-popup-classic-uuid="XcEz2X2aw3gfaXrWpPy3Ah" style="display:none"><iframe src="/api/serve-classic-popup/XcEz2X2aw3gfaXrWpPy3Ah" title="Pop-up" style="position:fixed;inset:0;width:100%;height:100%;border:0;background:transparent"></iframe></div><div id="classic-popup-w6nnei6XKB4SRFuVY6SuWD" data-persist-popup="classic-popup-w6nnei6XKB4SRFuVY6SuWD" data-persist-popup-chrome="none" data-persist-popup-classic-uuid="w6nnei6XKB4SRFuVY6SuWD" style="display:none"><iframe src="/api/serve-classic-popup/w6nnei6XKB4SRFuVY6SuWD" title="Pop-up" style="position:fixed;inset:0;width:100%;height:100%;border:0;background:transparent"></iframe></div>
96<script data-htmlpub-analytics>
97(function(){
98var PID="bthr9fgjr4tunfrsf2zhq0ba";
99var EXP_ID="";
100var EXP_VARIANT="";
101var API="/collect";
102var APP_ORIGIN="https://htmlpub.com";
103var FLUSH_INTERVAL=5000;
104var FLUSH_MAX=20;
105
106// HP-4568 consent gate. Runs onGranted() at most once, only when analytics
107// storage is permitted. See app/src/lib/analytics-consent-gate.ts.
108function hpConsent(onGranted){
109var started=false;
110function start(){if(started)return;started=true;try{onGranted();}catch(e){}}
111
112// Browser-level objection (Global Privacy Control / legacy Do-Not-Track) is
113// terminal: it is the visitor speaking directly, so no later CMP "accept all"
114// re-enables tracking for this page view. Mirrors the Customers.ai pixel gate.
115try{
116if(navigator.globalPrivacyControl===true)return;
117var dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack;
118if(dnt==="1"||dnt===1||dnt===true)return;
119}catch(e){}
120
121// Analytics/statistics consent per whichever CMP the page carries:
122//    1 granted / 0 denied / -1 present but undecided / null no CMP detected
123function hpConsentState(){
124// Google consent mode v2 first: vendor-neutral, so a CMP writing it (directly
125// or via GTM) is authoritative even before its own JS API initialises. Last
126// write wins, matching gtag's 'default' then 'update'.
127try{
128var dl=window.dataLayer;
129if(dl&&dl.length){
130var seen=null;
131for(var i=0;i<dl.length;i++){
132var entry=dl[i];
133if(!entry||entry[0]!=="consent"||!entry[2])continue;
134var mode=entry[2].analytics_storage;
135if(mode==="granted")seen=1;else if(mode==="denied")seen=0;
136}
137if(seen!==null)return seen;
138}
139}catch(e){}
140// Cookiebot. Its object appears only once uc.js has run, so fall back to the
141// script tag it is installed as to tell "undecided" from "absent".
142try{
143var cb=window.Cookiebot||window.CookieConsent;
144if(cb&&cb.consent)return cb.consent.statistics?1:(cb.hasResponse?0:-1);
145if(document.getElementById("Cookiebot")||document.querySelector("script[src*='consent.cookiebot.com'],script[src*='consentcdn.cookiebot.com']"))return -1;
146}catch(e){}
147// OneTrust: statistics is the reserved C0002 group. OneTrust comma-pads the
148// list itself, so the delimited match cannot hit C00020. Every runtime signal
149// it exposes appears only after otSDKStub.js runs, so without the script-tag
150// fallback a blocked or async stub reads as "no CMP" and we would track — the
151// exact bug, on the pages most likely to care.
152try{
153var groups=window.OptanonActiveGroups||window.OnetrustActiveGroups;
154if(typeof groups==="string"&&groups)return groups.indexOf(",C0002,")>-1?1:0;
155if(window.OneTrust||window.Optanon||document.getElementById("onetrust-consent-sdk")||document.querySelector("script[src*='cookielaw.org'],script[src*='onetrust.com']"))return -1;
156}catch(e){}
157// CookieYes
158try{
159if(typeof window.getCkyConsent==="function"){
160var cky=window.getCkyConsent();
161if(cky&&cky.categories)return cky.categories.analytics?1:0;
162}
163if(document.querySelector("script[src*='cookieyes.com'],script[src*='cookie-script.com']"))return -1;
164}catch(e){}
165// Iubenda: purpose 4 is measurement.
166try{
167var iub=window._iub;
168if(iub&&iub.cs&&iub.cs.consent&&iub.cs.consent.purposes)return iub.cs.consent.purposes[4]?1:0;
169if(iub||document.querySelector("script[src*='iubenda.com']"))return -1;
170}catch(e){}
171return null;
172}
173
174var state=hpConsentState();
175if(state===null||state===1){start();return;}
176
177// CMP present, analytics not granted: write nothing, send nothing, and listen
178// for a later grant. The poll is a catch-all for CMPs whose event names we do
179// not know; it stops after 60s rather than running forever.
180function recheck(){if(hpConsentState()===1)start();}
181var EVENTS=["CookiebotOnAccept","CookiebotOnConsentReady","CookieConsentDeclaration","cookieyes-consent-update","consent.onetrust","OneTrustGroupsUpdated","iubenda-consent-given","hp-analytics-consent"];
182for(var evt=0;evt<EVENTS.length;evt++){try{window.addEventListener(EVENTS[evt],recheck,false);}catch(e){}}
183var polls=0;
184var timer=setInterval(function(){recheck();if(started||++polls>=120)clearInterval(timer);},500);
185}
186
187// Everything below mints an identifier or sends a beacon, so all of it waits
188// for consent. window.__hpupPushEvent is the exception: it binds synchronously
189// here and only forwards once consent arrives. Binding it late would let the
190// popup embed bundle's fallback shim (app/src/lib/popups/embed-bundle.ts,
191// registered under the same "if not already defined" test) claim the name first
192// and reroute pop-up events. Pre-consent calls are dropped, not queued — they
193// have no visitorId. SYNC with app/src/lib/analytics-tracking-script.ts.
194var hpPush=null;
195if(!window.__hpupPushEvent){window.__hpupPushEvent=function(t,p){try{if(hpPush)hpPush(t,p);}catch(e){}};}
196hpConsent(function(){
197
198function uuid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=Math.random()*16|0;return(c==="x"?r:(r&3|8)).toString(16)});}
199function getOrSet(store,key){try{var v=store.getItem(key);if(v)return v;v=uuid();store.setItem(key,v);return v;}catch(e){return uuid();}}
200
201var visitorId=getOrSet(localStorage,"_hp_vid");
202var sessionId=getOrSet(sessionStorage,"_hp_sid");
203
204var params=new URLSearchParams(location.search);
205var utmSource=params.get("utm_source")||undefined;
206var utmMedium=params.get("utm_medium")||undefined;
207var utmCampaign=params.get("utm_campaign")||undefined;
208// Ad-platform click IDs (conversion feedback loop) — captured like the UTMs.
209// SYNC with canonical at app/src/lib/analytics-tracking-script.ts.
210var gclid=params.get("gclid")||undefined;
211var fbclid=params.get("fbclid")||undefined;
212var msclkid=params.get("msclkid")||undefined;
213
214var vw=window.innerWidth||0;
215var vh=window.innerHeight||0;
216var ua=navigator.userAgent||"";
217var isMobileUA=/Android|iPhone|iPod|iPad|webOS|BlackBerry|IEMobile|Opera Mini/i.test(ua);
218var maxScreenDim=Math.max(screen.width||0,screen.height||0);
219var deviceType=isMobileUA?(maxScreenDim<=812||vw<768?"mobile":"tablet"):"desktop";
220
221function detectBrowser(){
222if(ua.indexOf("Edg/")>-1)return"Edge";
223if(ua.indexOf("Chrome/")>-1)return"Chrome";
224if(ua.indexOf("Safari/")>-1&&ua.indexOf("Chrome/")===-1)return"Safari";
225if(ua.indexOf("Firefox/")>-1)return"Firefox";
226return"Other";
227}
228function detectOS(){
229if(ua.indexOf("iPhone")>-1||ua.indexOf("iPad")>-1)return"iOS";
230if(ua.indexOf("Android")>-1)return"Android";
231if(ua.indexOf("Mac OS")>-1)return"macOS";
232if(ua.indexOf("Windows")>-1)return"Windows";
233if(ua.indexOf("Linux")>-1)return"Linux";
234return"Other";
235}
236var browserFamily=detectBrowser();
237var osFamily=detectOS();
238
239var buffer=[];
240function makeEvent(type,payload){
241return{pageId:PID,eventType:type,visitorId:visitorId,sessionId:sessionId,payload:payload||undefined,referrer:document.referrer||undefined,utmSource:utmSource,utmMedium:utmMedium,utmCampaign:utmCampaign,gclid:gclid,fbclid:fbclid,msclkid:msclkid,deviceType:deviceType,browserFamily:browserFamily,osFamily:osFamily,viewportWidth:vw,viewportHeight:vh,experimentId:EXP_ID||undefined,experimentVariant:EXP_VARIANT||undefined,timestamp:Date.now()};
242}
243function pushEvent(type,payload){buffer.push(makeEvent(type,payload));if(buffer.length>=FLUSH_MAX)flush();}
244
245// HP-1557 — expose a single-arg helper so the popups runtime (separate IIFE,
246// no shared closure with analytics) can feed events into the same buffer.
247// Defensive: only set if not already defined so a future second analytics
248// injection doesn't clobber an in-flight handler. HP-4568: the name is bound
249// above, outside the consent gate; this is where it starts forwarding.
250hpPush=pushEvent;
251// NOTE (HP-3461): this copy deliberately does NOT register window.__hpTrack, even
252// though the app copy registers both names. checkout-script.ts guards on
253// __hpTrack, and inject.ts appends that script to every edge-served page, so
254// adding the name here would start writing checkout_started for the entire edge
255// fleet (pubhtml.com + all custom domains) where that beacon has always been a
256// no-op — beginning an ecommerce event series mid-history, and moving the derived
257// checkout_abandoned with it, from a change about page engagement. It is a real
258// gap and wants its own change with a backfill story.
259// (No backticks anywhere in this file: it is one big template literal, so a
260// backtick in a comment terminates the string. This exact comment did it once.)
261
262function readMmuid(){try{var v=localStorage.getItem("mmuid");return v&&v.length<=128?v:undefined;}catch(e){return undefined;}}
263
264function flush(){
265if(buffer.length===0)return;
266var batch=buffer.splice(0,FLUSH_MAX);
267var payload={events:batch};
268var mmuid=readMmuid();
269if(mmuid)payload.mmuid=mmuid;
270try{navigator.sendBeacon(API,JSON.stringify(payload));}catch(e){}
271}
272
273// Engaged time-on-page (HP-3592) — count a second only while the tab is
274// visible AND the visitor was active in the last 30s; emit the accrued DELTA
275// every 30 engaged seconds and on hide/pagehide. Registered BEFORE the flush
276// handlers below so the final delta lands in the buffer before the last
277// beacon fires (listener registration order = firing order).
278// SYNC with canonical at app/src/lib/analytics-tracking-script.ts.
279var dwellSec=0,dwellSent=0,dwellLastActive=Date.now();
280var DWELL_IDLE_MS=30000,DWELL_EMIT_SEC=30,DWELL_CAP_SEC=1800;
281function dwellActive(){dwellLastActive=Date.now();}
282document.addEventListener("scroll",dwellActive,{passive:true});
283document.addEventListener("mousemove",dwellActive,{passive:true});
284document.addEventListener("keydown",dwellActive,true);
285document.addEventListener("touchstart",dwellActive,{passive:true});
286document.addEventListener("click",dwellActive,true);
287function dwellEmit(){var d=dwellSec-dwellSent;if(d>0){dwellSent=dwellSec;pushEvent("dwell",{seconds:d});}}
288var dwellTimer=setInterval(function(){
289if(document.visibilityState!=="visible")return;
290if(Date.now()-dwellLastActive>DWELL_IDLE_MS)return;
291dwellSec++;
292if(dwellSec-dwellSent>=DWELL_EMIT_SEC)dwellEmit();
293if(dwellSec>=DWELL_CAP_SEC){dwellEmit();clearInterval(dwellTimer);}
294},1000);
295document.addEventListener("visibilitychange",function(){if(document.visibilityState==="hidden")dwellEmit();});
296window.addEventListener("pagehide",dwellEmit);
297
298setInterval(flush,FLUSH_INTERVAL);
299document.addEventListener("visibilitychange",function(){if(document.visibilityState==="hidden")flush();});
300window.addEventListener("pagehide",flush);
301
302pushEvent("page_view");
303
304// On-platform conversion goal ("a thank-you page I own"): report the current
305// pageId plus the visitor's experiment assignments (_hp_exp_<id> cookies) so the
306// server can count this page-view as a conversion. Fires once per session per
307// page. HP-2925 Layer 1: must fire on EVERY page, not just experiment
308// participants — a standalone "Offsite event" goal has no experiment cookie, so
309// gating on cookies means the server never gets to attribute it. The server
310// no-ops cheaply when the page is neither an experiment nor a goal target.
311// SYNC with canonical at app/src/lib/analytics-tracking-script.ts.
312(function(){
313try{
314if(!APP_ORIGIN)return;
315var guard="_hp_goal:"+PID;
316if(sessionStorage.getItem(guard))return;
317sessionStorage.setItem(guard,"1");
318var exps=[];var ck=document.cookie.split(";");
319for(var i=0;i<ck.length;i++){var kv=ck[i].split("=");var k=(kv[0]||"").trim();if(k.indexOf("_hp_exp_")===0){exps.push({id:k.slice(8),variant:decodeURIComponent((kv[1]||"").trim())});}}
320var body=JSON.stringify({pageId:PID,visitorId:visitorId,sessionId:sessionId,experiments:exps});
321var url=APP_ORIGIN+"/api/experiments/onsite-conversion";
322if(navigator.sendBeacon){navigator.sendBeacon(url,new Blob([body],{type:"text/plain"}));}
323else{fetch(url,{method:"POST",headers:{"Content-Type":"application/json"},body:body,keepalive:true}).catch(function(){});}
324}catch(e){}
325})();
326
327// HP-3461 — milestones reached WITHOUT the visitor scrolling carry {auto:1}.
328// checkScroll runs on a 1s timer regardless of input and at scrollY=0 pct is
329// just winH/docH, so any page under ~4 screens tall banked scroll_depth:25 from
330// every visitor who did nothing (a page fitting the viewport banked 100). Those
331// rows mark the session engaged in the rollup, which pushed the bounce rate of
332// every short page toward zero and inflated avgScrollDepth the same way. The
333// events still fire (that depth WAS visible, and the scroll funnel wants it);
334// the stamp lets the bounce query demand a real interaction.
335// SYNC with app/src/lib/analytics-tracking-script.ts.
336var scrollMilestones={25:false,50:false,75:false,100:false};
337var scrollUserMoved=false;
338function checkScroll(){
339var docH=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
340var scrollY=window.scrollY||window.pageYOffset;
341var winH=window.innerHeight;
342if(docH<=winH){if(!scrollMilestones[100]){scrollMilestones[100]=true;pushEvent("scroll_depth",{depth:100,auto:1});}return;}
343var pct=Math.round(((scrollY+winH)/docH)*100);
344[25,50,75,100].forEach(function(m){if(pct>=m&&!scrollMilestones[m]){scrollMilestones[m]=true;pushEvent("scroll_depth",scrollUserMoved?{depth:m}:{depth:m,auto:1});}});
345}
346window.addEventListener("scroll",function(){scrollUserMoved=true;checkScroll();},{passive:true});
347setTimeout(checkScroll,1000);
348
349// HP-1557 — when a click/submit happens inside a pop-up, add the popup's id +
350// name to the payload. Customers track conversions on the standard form_submit /
351// element_click types; this is just attribution metadata so the analytics surface
352// can say "this conversion came from the Welcome offer pop-up". Matches the
353// canonical data-persist-popup marker and the legacy data-htmlpub-popup one.
354function popupAttribution(node){
355var p=node&&node.closest&&node.closest("[data-persist-popup],[data-htmlpub-popup]");
356if(!p)return null;
357var nm=p.getAttribute("data-persist-popup-name");if(nm===null)nm=p.getAttribute("data-htmlpub-popup-name");
358return{popupId:p.getAttribute("id")||"",popupName:(nm||"").replace(/^\s+|\s+$/g,"")};
359}
360
361document.addEventListener("click",function(e){
362var el=e.target;
363if(!el||!el.tagName)return;
364var tag=el.tagName.toLowerCase();
365if(!(tag==="a"||tag==="button"||tag==="input"||tag==="select"||tag==="textarea"||el.getAttribute("role")==="button"||el.closest("a,button,[role=button]")))return;
366var docH=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,1);
367var rect=el.getBoundingClientRect();
368var payload={x:Math.min(1,Math.max(0,(rect.left+rect.width/2)/(document.documentElement.clientWidth||1))),y:Math.min(1,Math.max(0,(rect.top+rect.height/2+(window.scrollY||0))/docH)),selector:el.id?"#"+el.id:tag+(el.className&&typeof el.className==="string"?"."+el.className.trim().split(/\s+/).slice(0,2).join("."):""),viewportWidth:vw,viewportHeight:vh};
369// HP-3227 — toggling "count clicks as conversions" on a button stamps
370// data-lp-conversion="<configId>" on that element, and both the rollup worker
371// and the dashboard read match a click goal by that id. This tracker never
372// reported it, so a goal whose stored selector is the placeholder
373// a[data-lp-conversion] had nothing to match on and counted zero conversions
374// forever, no matter how many buttons were toggled on. Read from the closest
375// stamped ancestor, since the click target is often an inner <span> of the CTA.
376// SYNC with app/src/lib/analytics-tracking-script.ts.
377var lpConvEl=el.closest?el.closest("[data-lp-conversion]"):null;
378var lpConvId=lpConvEl?lpConvEl.getAttribute("data-lp-conversion"):null;
379if(lpConvId)payload.lpConversion=lpConvId;
380// HP-1557 — only attribute element_click to a pop-up when the actual
381// click target is a button-shaped CTA. A click on the email input
382// inside a lead-capture popup would otherwise inflate the popup's
383// "Button clicks" count on the dashboard.
384var isCtaClick=(tag==="a"||tag==="button"||el.getAttribute("role")==="button"||(el.closest&&el.closest("a,button,[role=button]")));
385if(isCtaClick){var pa=popupAttribution(el);if(pa){payload.popupId=pa.popupId;payload.popupName=pa.popupName;}}
386// HP-3461 — two NON-IDENTIFYING facts about the clicked anchor: the host it leaves
387// for (external only) and the file extension. The selector above records only "#id"
388// or "tag.class", so a PDF link and any other button were indistinguishable and no
389// past click can be reclassified. The full href is NOT stored: pathnames carry
390// customer identity and this is the highest-volume table (see absUrl).
391// SYNC with app/src/lib/analytics-tracking-script.ts.
392var hrefEl=tag==="a"?el:(el.closest&&el.closest("a[href]"));
393var clickUrl=hrefEl?absUrl(hrefEl):null;
394var clickFacts=clickUrl?linkFacts(clickUrl):null;
395if(clickFacts&&clickFacts.external)payload.linkHost=clickFacts.host;
396if(clickFacts&&clickFacts.ext)payload.linkExt=clickFacts.ext;
397var clickKey=clickUrl?linkClickKey(clickUrl):null;
398if(clickKey)payload.linkKey=clickKey;
399pushEvent("element_click",payload);
400// Classify into a micro-conversion. Emitted ALONGSIDE the element_click, never
401// instead of it, so a classification we later decide was wrong can be re-derived.
402if(hrefEl)classifyLinkClick(hrefEl,clickUrl);
403// HP-2811 — same-tab anchor navigation races the page unload before the 5s
404// flush timer; visibilitychange/pagehide flushes are unreliable (esp. iOS
405// Safari, same-tab nav), so element_click goals for outbound CTAs (e.g. a
406// HubSpot Meetings link) see 0 conversions despite real clicks. Mirror the
407// form_submit flush pattern for anchors that will navigate this tab.
408var navAnchor=tag==="a"?el:(el.closest&&el.closest("a[href]"));
409if(navAnchor&&navAnchor.getAttribute("target")!=="_blank"&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){
410var navHref=(navAnchor.getAttribute("href")||"").replace(/^\s+/,"");
411if(navHref&&navHref.charAt(0)!=="#"&&navHref.slice(0,11).toLowerCase()!=="javascript:")flush();
412}
413},true);
414
415document.addEventListener("submit",function(e){
416var f=e.target;
417if(!f||f.tagName!=="FORM")return;
418var payload={formIdentifier:f.id||f.getAttribute("name")||"form-"+([].indexOf.call(document.forms,f))};
419var pa=popupAttribution(f);
420if(pa){payload.popupId=pa.popupId;payload.popupName=pa.popupName;}
421pushEvent("form_submit",payload);
422flush();// send now — a thank-you-page redirect may navigate away before the 5s timer, dropping the experiment conversion
423},true);
424
425// ─── HP-3461 on-page micro-conversions ──────────────────────────────────────
426// Kinds + classification rules mirror app/src/lib/analytics/page-engagement-kinds.ts
427// (the server-side reference). Literal here because this compiles to an inline
428// string and cannot import; page-engagement-kinds.test.ts asserts both script
429// copies only ever emit registered kinds.
430// SYNC with app/src/lib/analytics-tracking-script.ts.
431
432// Resolve an anchor for RULE MATCHING only — the url itself is never sent. Only
433// host + extension are reported (linkFacts): customer delivery links routinely put
434// identity in the PATH (/thank-you/jane-doe, /download/lead/8842/Invoice-Jane-Doe.pdf),
435// and AnalyticsEvent is the highest-volume table with no redaction pass and no
436// consent gate, so a stored pathname is PII a DSAR erase cannot reach.
437function absUrl(a){
438try{
439var raw=(a.getAttribute("href")||"").replace(/^\s+/,"");
440if(!raw||raw.charAt(0)==="#"||raw.slice(0,11).toLowerCase()==="javascript:")return null;
441var u=new URL(raw,location.href);
442if(u.protocol!=="http:"&&u.protocol!=="https:")return null;
443return u;
444}catch(e){return null;}
445}
446// Host + extension, derived from the WHOLE url (never a truncated copy) so a long
447// signed URL cannot lose its extension to a length cap and read as plain navigation.
448function linkFacts(u){
449var p=u.pathname.toLowerCase();
450var dot=p.lastIndexOf(".");
451var ext=dot<0?"":p.slice(dot+1);
452if(ext.length>8)ext="";
453return{host:u.hostname.toLowerCase(),ext:ext,external:u.hostname!==location.hostname};
454}
455// Stable join key for WHICH link was clicked: FNV-1a hash of the canonicalized
456// URL (lowercase host, no fragment, no trailing slash, query kept minus our own
457// runtime decoration params). The raw href is still never stored (HP-3461) —
458// the dashboard re-derives each key from the page's OWN html and joins on the
459// hash (app/src/lib/analytics/link-click-key.ts, the reference implementation;
460// its test extracts this copy and asserts they agree).
461// SYNC with app/src/lib/analytics-tracking-script.ts and lib/analytics/link-click-key.ts.
462function linkClickKey(u){
463try{
464var c=new URL(u.toString());
465c.hash="";
466c.hostname=c.hostname.toLowerCase();
467if(c.pathname.length>1&&c.pathname.slice(-1)==="/")c.pathname=c.pathname.slice(0,-1);
468if(c.search){
469var strip=["lp_click_id","lp_page_id","lp_ts","_exp","_var","_vid","_pvar","client_reference_id"];
470var kept=new URLSearchParams();
471c.searchParams.forEach(function(v,k){if(strip.indexOf(k)<0)kept.append(k,v);});
472var q=kept.toString();
473c.search=q?"?"+q:"";
474}
475var t=c.toString();
476var h=0x811c9dc5;
477for(var i=0;i<t.length;i++){h^=t.charCodeAt(i);h=Math.imul(h,0x01000193);}
478var x=(h>>>0).toString(16);
479while(x.length<8)x="0"+x;
480return x;
481}catch(e){return null;}
482}
483
484var DL_EXT=["pdf","epub","zip","csv","xlsx","xls","docx","doc","pptx","ppt","mp3","wav"];
485// calendar.google.com is deliberately ABSENT: the standard add-to-calendar button
486// is not a booking, and host-only matching cannot tell them apart, so including it
487// reported bookings on pages where nobody booked. Host entries only — this copy
488// matches on hostname, so a host/path entry could never match here.
489var BOOK_HOSTS=["calendly.com","cal.com","acuityscheduling.com"];
490
491// Every kind counts at most once PER PAGE LOAD: three clicks on the same PDF is one
492// download, and a scrubbed video cannot re-bank a quartile.
493//
494// IN-MEMORY, and it must stay that way. This used to consult sessionStorage and
495// return true from its catch block, so wherever storage throws (sandboxed iframe,
496// "block all cookies", in-app webviews, full quota) every timeupdate re-emitted
497// three quartiles — 12+/sec, which trips the collect route's 30-req/min-per-IP
498// limit and then 429s that visitor's REAL page_view / form_submit / conversion
499// beacons. A session-scoped key also outlived the page load, so a batch lost to a
500// 429 or a closed tab could never be re-reported. The server counts DISTINCT
501// SESSIONS per kind, so duplicates across page views are deduped there anyway.
502var microFired={};
503function latch(kind,id){
504var k=kind+":"+(id||"");
505if(microFired[k])return false;
506microFired[k]=true;
507return true;
508}
509function microEvent(kind,id){
510if(!latch(kind,id))return;
511pushEvent("page_engagement",id?{kind:kind,id:id}:{kind:kind});
512}
513
514function classifyLinkClick(a,u){
515try{
516if(!u)return;
517var f=linkFacts(u);
518if((a.hasAttribute&&a.hasAttribute("download"))||(f.ext&&DL_EXT.indexOf(f.ext)>-1)){
519// id is the EXTENSION, not the file name: "Invoice-Jane-Doe.pdf" is as
520// identifying as the path we refuse to store, and phase 1 renders only an
521// aggregate count.
522microEvent("file_download",f.ext||undefined);
523return;
524}
525if(!f.external)return;
526for(var i=0;i<BOOK_HOSTS.length;i++){
527var b=BOOK_HOSTS[i];
528if(f.host===b||f.host.slice(-(b.length+1))==="."+b){microEvent("booking_open",b);return;}
529}
530}catch(e){}
531}
532
533// <video> only. YouTube/Vimeo/Loom/Wistia are cross-origin iframes whose
534// playback is invisible without the provider's JS API plus an embed-URL rewrite,
535// both deferred out of phase 1 — a page whose only video is an embed reports NO
536// video kinds, which the read side must treat as "not measurable", not as 0%.
537function videoId(v){
538try{
539if(v.id)return v.id.slice(0,128);
540var src=v.currentSrc||v.getAttribute("src")||"";
541if(!src)return undefined;
542var seg=src.split("?")[0].split("/");
543return (seg[seg.length-1]||"").slice(0,128)||undefined;
544}catch(e){return undefined;}
545}
546// Autoplay policy only lets a video start by itself while MUTED, so "muted and the
547// visitor has never touched the page" is the signature of decorative playback.
548// A <video autoplay muted loop playsinline> hero fires 'play' on every load, so
549// counting it would report "100% played the video" on exactly the pages most likely
550// to have a hero video. Unmuted playback always counts: it needs a gesture.
551// mousedown as well as pointerdown: a path delivering only mouse events would
552// otherwise never set this, silently disabling the feature with nothing in the logs.
553var userGestured=false;
554function markGesture(){userGestured=true;}
555document.addEventListener("pointerdown",markGesture,true);
556document.addEventListener("mousedown",markGesture,true);
557document.addEventListener("keydown",markGesture,true);
558document.addEventListener("touchstart",markGesture,{passive:true,capture:true});
559// Decide ONCE at 'play' and LATCH on the element. Re-checking the live flag on every
560// timeupdate was a real bug found in Chrome: a decorative muted autoplay correctly
561// suppressed video_start, then one unrelated trusted keystroke flipped userGestured
562// and every later timeupdate passed — banking p25/p50/p75 for a video nobody chose
563// to watch, with NO video_start, leaving the read side dividing by a zero
564// denominator. Unmuted playback always counts: it cannot start without a gesture.
565function decidePlay(v){
566var intent=(!v.muted)||userGestured;
567try{v.__hpIntent=intent?1:0;}catch(e){}
568return intent;
569}
570// Undefined = never saw this element's 'play' (script injected mid-playback): fail
571// closed, since crediting is the direction that corrupts the headline percentage.
572function countedPlay(v){return v.__hpIntent===1;}
573// Unmuting a decorative video IS intent, and no 'play' fires for it, so re-decide.
574// Emitting video_start keeps the stream coherent: a start precedes its quartiles.
575function onVideoVolume(e){
576var v=e.target;
577if(!v||v.tagName!=="VIDEO")return;
578if(v.muted||v.paused||v.__hpIntent===1)return;
579v.__hpIntent=1;
580microEvent("video_start",videoId(v));
581}
582function onVideoTime(e){
583var v=e.target;
584if(!v||v.tagName!=="VIDEO")return;
585// Consult the LATCHED decision, never the live flag — see decidePlay.
586if(!countedPlay(v))return;
587var d=v.duration;
588// Live streams / metadata not yet loaded report 0, NaN or Infinity — a quartile
589// of an unknown duration is meaningless, so report the play and nothing more.
590if(!isFinite(d)||d<=0)return;
591var pct=(v.currentTime/d)*100;
592var id=videoId(v);
593if(pct>=25)microEvent("video_p25",id);
594if(pct>=50)microEvent("video_p50",id);
595if(pct>=75)microEvent("video_p75",id);
596// p100 comes from 'ended', not a threshold: the last timeupdate can land a
597// fraction short of duration, so a full watch would never bank it.
598}
599document.addEventListener("play",function(e){var v=e.target;if(v&&v.tagName==="VIDEO"&&decidePlay(v))microEvent("video_start",videoId(v));},true);
600document.addEventListener("timeupdate",onVideoTime,true);
601document.addEventListener("volumechange",onVideoVolume,true);
602// SYNC-START embed-video-listeners (app/edge twins pinned by page-engagement-kinds.test.ts)
603// ─── Embedded video: Vimeo (HP-3461) ────────────────────────────────────────
604// <video> is handled above by reading the element directly. A Vimeo embed is a
605// CROSS-ORIGIN iframe, so its state is unreadable — but the player reports its own
606// progress over postMessage, and needs NO change to the embed URL. A plainly pasted
607// Vimeo embed becomes measurable as-is. (YouTube is different: it is silent unless
608// enablejsapi=1 is on the URL. Handled separately.)
609//
610// Verified against live players, and two details cost an attempt each:
611//   1. SUBSCRIBE ON THE PLAYER'S ready MESSAGE, not the iframe's load event.
612//      Subscribing on load races the player's own init: the addEventListener calls
613//      are silently dropped, no ACK comes back, and no timeupdate ever arrives — it
614//      looks exactly like "Vimeo does not work".
615//   2. ATTRIBUTE BY e.source, not player_id. Vimeo only echoes a player_id if the
616//      embed URL carries one, and a customer's pasted embed has none.
617//
618// Vimeo sends OBJECTS (YouTube sends JSON strings), and timeupdate carries
619// data.percent as a 0..1 fraction, so quartiles need no arithmetic of our own.
620function vimeoHostOk(origin){
621try{
622var h=new URL(origin).hostname.toLowerCase();
623return h==="player.vimeo.com"||h==="vimeo.com"||h.slice(-10)===".vimeo.com";
624}catch(e){return false;}
625}
626// Low-cardinality, non-identifying label: the numeric video id off the embed URL,
627// prefixed so it cannot collide with a <video> filename in the tally.
628function vimeoLabel(f){
629try{
630var m=(f.getAttribute("src")||"").match(/vimeo\.com\/video\/(\d+)/);
631return m?"vimeo:"+m[1]:"vimeo";
632}catch(e){return "vimeo";}
633}
634function vimeoFrameFor(src){
635try{
636var fr=document.querySelectorAll("iframe");
637for(var i=0;i<fr.length;i++){if(fr[i].contentWindow===src)return fr[i];}
638}catch(e){}
639return null;
640}
641function vimeoSubscribe(f){
642try{
643var w=f.contentWindow;
644var evs=["play","timeupdate","ended"];
645for(var i=0;i<evs.length;i++)w.postMessage({method:"addEventListener",value:evs[i]},"*");
646}catch(e){}
647}
648window.addEventListener("message",function(e){
649try{
650if(!vimeoHostOk(e.origin))return;
651var d=e.data;
652if(!d||typeof d!=="object")return;
653var f=vimeoFrameFor(e.source);
654if(!f)return;
655if(d.event==="ready"){vimeoSubscribe(f);return;}
656var id=vimeoLabel(f);
657if(d.event==="play"){
658// Same intent rule as <video>, minus the muted check we cannot read through an
659// iframe: browser policy only permits unprompted autoplay while MUTED, so
660// "playback began before the visitor touched anything" is the decorative case.
661if(!userGestured)return;
662f.__hpEmbedCounted=1;
663microEvent("video_start",id);
664return;
665}
666if(f.__hpEmbedCounted!==1)return;
667if(d.event==="timeupdate"){
668var pct=d.data&&typeof d.data.percent==="number"?d.data.percent*100:-1;
669if(pct<0)return;
670if(pct>=25)microEvent("video_p25",id);
671if(pct>=50)microEvent("video_p50",id);
672if(pct>=75)microEvent("video_p75",id);
673// p100 comes from 'ended', as with <video>: the last timeupdate lands short.
674}else if(d.event==="ended"){
675microEvent("video_p25",id);microEvent("video_p50",id);microEvent("video_p75",id);microEvent("video_p100",id);
676}
677}catch(err){}
678});
679
680// ─── Embedded video: YouTube (HP-3461) ──────────────────────────────────────
681// YouTube is SILENT unless the embed URL carries enablejsapi=1 — verified live: a
682// plain embed answers nothing, even if we send it the handshake. So this listener
683// only hears players whose URL has that flag; adding it to customer HTML at serve
684// time is a separate commit, deliberately, because that mutates what visitors load.
685//
686// With the flag, the protocol is: post a listening message, then the player streams
687// infoDelivery with playerState, currentTime and duration.
688//
689// The handshake repeats on a timer, and the honest reason is that it catches frames
690// that appear after load (a tab, an accordion, a script-mounted embed). Whether a
691// player also STOPS streaming when we stop asking was not established: repeats are
692// answered "alreadyInitialized", which suggests the first one is what arms it. The
693// polling stays because the version with polling is the one verified to work end to
694// end, and trading that for an unverified optimisation would risk silently losing
695// every embed metric. The steady-state cost is one postMessage per api-enabled
696// frame every 2s.
697//
698// Unlike Vimeo, YouTube sends JSON STRINGS, so the payload needs parsing before it
699// looks like anything.
700//
701// playerState is YouTube's enum: -1 unstarted, 0 ended, 1 playing, 2 paused,
702// 3 buffering, 5 cued.
703function ytHostOk(origin){
704try{
705var h=new URL(origin).hostname.toLowerCase();
706return h==="www.youtube.com"||h==="youtube.com"||h==="www.youtube-nocookie.com"||h==="youtube-nocookie.com";
707}catch(e){return false;}
708}
709function ytLabel(f){
710try{
711var m=(f.getAttribute("src")||"").match(/\/embed\/([A-Za-z0-9_-]{11})/);
712return m?"youtube:"+m[1]:"youtube";
713}catch(e){return "youtube";}
714}
715function ytFrameFor(src){
716try{
717var fr=document.querySelectorAll("iframe");
718for(var i=0;i<fr.length;
718i++){if(fr[i].contentWindow===src)return fr[i];}
719}catch(e){}
720return null;
721}
722// Ask every api-enabled YouTube frame to start reporting, and keep asking. Cheap: a
723// postMessage to a frame that is not a YouTube player is simply ignored.
724function ytListen(){
725try{
726var fr=document.querySelectorAll('iframe[src*="enablejsapi=1"]');
727for(var i=0;i<fr.length;i++){
728try{fr[i].contentWindow.postMessage('{"event":"listening","id":"hp","channel":"widget"}',"*");}catch(e){}
729}
730}catch(e){}
731}
732setTimeout(ytListen,1200);
733setInterval(ytListen,2000);
734window.addEventListener("message",function(e){
735try{
736if(!ytHostOk(e.origin))return;
737var d=e.data;
738// YouTube sends strings; anything else is not its API talking.
739if(typeof d!=="string")return;
740try{d=JSON.parse(d);}catch(x){return;}
741if(!d||typeof d!=="object"||d.event!=="infoDelivery")return;
742var info=d.info;
743if(!info||typeof info!=="object")return;
744var f=ytFrameFor(e.source);
745if(!f)return;
746var id=ytLabel(f);
747var state=info.playerState;
748// Same intent rule as Vimeo and <video>, but YouTube hands us no discrete 'play'
749// event: infoDelivery repeats playerState 1 for the WHOLE of playback. So the
750// decision is made on the TRANSITION into playing and latched there, never
751// re-read. Re-reading it is precisely the bug decidePlay documents, and it is
752// reachable here in a way it is not for <video>: a muted autoplay is correctly
753// suppressed, then one unrelated trusted click (the form, alt-tab, a screenshot)
754// flips userGestured and the next state-1 update promotes a video nobody chose
755// into a counted play, quartiles and all. Latching on the transition also keeps
756// the <video> semantics that a chosen REPLAY after a decorative autoplay counts,
757// because that arrives as 2 then 1.
758var prev=f.__hpYtPrev;
759f.__hpYtPrev=state;
760if(state===1&&prev!==1){
761f.__hpEmbedCounted=userGestured?1:0;
762if(f.__hpEmbedCounted===1)microEvent("video_start",id);
763}
764if(f.__hpEmbedCounted!==1)return;
765if(state===0){
766// Ended implies every quartile, even if a throttled tab skipped an update.
767microEvent("video_p25",id);microEvent("video_p50",id);microEvent("video_p75",id);microEvent("video_p100",id);
768return;
769}
770var dur=info.duration,cur=info.currentTime;
771// A live stream reports duration 0, and a quartile of an unknown length is
772// meaningless — report the play and nothing more.
773if(typeof dur!=="number"||typeof cur!=="number"||!isFinite(dur)||dur<=0)return;
774var pct=(cur/dur)*100;
775if(pct>=25)microEvent("video_p25",id);
776if(pct>=50)microEvent("video_p50",id);
777if(pct>=75)microEvent("video_p75",id);
778// p100 comes from playerState 0, not a threshold: the final update lands short.
779}catch(err){}
780});
781// SYNC-END embed-video-listeners
782document.addEventListener("ended",function(e){
783var v=e.target;
784if(!v||v.tagName!=="VIDEO")return;
785if(!countedPlay(v))return;
786var id=videoId(v);
787// Watched to the end implies every quartile, even if a throttled background tab
788// skipped a timeupdate.
789microEvent("video_p25",id);microEvent("video_p50",id);microEvent("video_p75",id);microEvent("video_p100",id);
790},true);
791
792// ─── Scheduler widgets (HP-3461 phase 3) ────────────────────────────────────
793// An inline Calendly/Cal.com embed is a CROSS-ORIGIN iframe, so we cannot see a
794// click inside it — which is why booking_open (a click on an outbound scheduling
795// link) is absent on exactly the pages most likely to take bookings. The widget
796// broadcasts its own progress to the parent window, so we get told instead of
797// guessing. No SDK needed; Calendly posts these regardless.
798//
799// SECURITY: any frame can post a message claiming to be a booking, and this ships
800// on every published page, so the sender's ORIGIN must be a recognised scheduling
801// host AND the message must match the provider's shape. Everything else is ignored.
802// PRIVACY: only WHICH STEP is read. event.data.payload (invitee details on
803// event_scheduled) is never touched.
804// SYNC with app/src/lib/analytics-tracking-script.ts.
805function schedulerOrigin(origin){
806try{
807var h=new URL(origin).hostname.toLowerCase();
808for(var i=0;i<BOOK_HOSTS.length;i++){
809var b=BOOK_HOSTS[i];
810if(h===b||h.slice(-(b.length+1))==="."+b)return b;
811}
812}catch(e){}
813return null;
814}
815// calendly.profile_page_viewed is deliberately ignored: it fires for a profile
816// listing rather than a bookable calendar, so it would inflate the funnel's top.
817window.addEventListener("message",function(e){
818try{
819var host=schedulerOrigin(e.origin);
820if(!host)return;
821var d=e.data;
822if(!d||typeof d!=="object")return;
823// Calendly's vocabulary reads off d.event and is prefixed; Cal.com's reads off
824// d.type and is not. Verified against live widgets on both, plus Cal.com's own
825// EventDataMap in packages/embeds/embed-core/src/sdk-action-manager.ts.
826// calendly.profile_page_viewed is ignored: it fires for a profile listing rather
827// than a bookable calendar, so it would inflate the top of the funnel.
828//
829// Cal.com HAS NO time-selection event. Its full enum (27 keys) contains nothing for
830// picking a date or slot -- availabilityLoaded and slotsFetched are the widget
831// LOADING options, not a visitor choosing one. So Cal.com reports 2 of the 3 steps,
832// and booking_time_selected is left ABSENT for it rather than synthesised from the
833// booking. Fabricating it would make every Cal.com page show a flat 100% from
834// "selected" to "completed" -- a number that looks measured and is not. Absent
835// already means "not measurable here" everywhere else in this feature (see the
836// video quartiles), and the read side honours that.
837//
838// Emissions are LITERALS, one branch per step, so the sync seam in
839// page-engagement-kinds.test.ts can see them -- it caught booking_completed going
840// unverifiable when this was table-driven.
841var name=typeof d.event==="string"?d.event:(typeof d.type==="string"?d.type:null);
842if(!name)return;
843if(host==="calendly.com"){
844if(name==="calendly.event_scheduled"){
845microEvent("booking_viewed",host);
846microEvent("booking_time_selected",host);
847microEvent("booking_completed",host);
848// The booking is the outcome this exists to catch and the visitor usually leaves
849// for the confirmation, so flush rather than wait out the 5s timer.
850flush();
851}else if(name==="calendly.date_and_time_selected"){
852microEvent("booking_viewed",host);
853microEvent("booking_time_selected",host);
854}else if(name==="calendly.event_type_viewed"){
855microEvent("booking_viewed",host);
856}
857}else if(host==="cal.com"){
858// bookingSuccessfulV2 deprecates bookingSuccessful and both are still in the enum,
859// so accept either -- customers sit on different embed versions.
860if(name==="bookingSuccessfulV2"||name==="bookingSuccessful"){
861// NOTE: no booking_time_selected here. Cal.com cannot report it.
862microEvent("booking_viewed",host);
863microEvent("booking_completed",host);
864flush();
865}else if(name==="bookerViewed"){
866microEvent("booking_viewed",host);
867}
868}
869// No acuityscheduling.com branch, and there never can be one. Its embed script
870// exchanges only sizing/load/scrollTo/scrollBy/gaMeasurementId with the parent and
871// takes a Google Analytics client id INWARD — there is no booking message to hear.
872// Acuity reports outward only through its webhooks (HP-4041's inbound conversion
873// webhook is the route). A branch here would be dead code. See lib/scheduling-hosts.
874// Its origin stays accepted by the gate above, which costs nothing: an origin that
875// never speaks simply never matches.
876}catch(err){}
877});
878
879// Consent usually arrives seconds after load, so a bare load listener would
880// never fire and rum_timing would vanish from every CMP-gated page. The
881// navigation/paint entries report the same absolute numbers whenever read.
882function hpRumTiming(){
883setTimeout(function(){
884try{
885var perf=performance.getEntriesByType("navigation")[0];
886if(perf){
887var ev=makeEvent("rum_timing",{loadTimeMs:Math.round(perf.loadEventEnd-perf.startTime),ttfbMs:Math.round(perf.responseStart-perf.startTime),fcpMs:undefined});
888var paintEntries=performance.getEntriesByType("paint");
889for(var i=0;i<paintEntries.length;i++){if(paintEntries[i].name==="first-contentful-paint"){ev.payload.fcpMs=Math.round(paintEntries[i].startTime);break;}}
890buffer.push(ev);
891}
892}catch(e){}
893},2000);
894}
895if(document.readyState==="complete")hpRumTiming();else window.addEventListener("load",hpRumTiming);
896});
897})();
898</script>
898<script data-page-id="bthr9fgjr4tunfrsf2zhq0ba" data-page-slug="panam_mdeo_declaration_en" data-api-url="https://htmlpub.com" data-turnstile-key="0x4AAAAAAD7Sp6X7R_qRx-Cz" data-htmlpub-forms>
899(function(){
900var s=document.querySelector("script[data-htmlpub-forms]");
901var pageId=s.getAttribute("data-page-id");
902var slug=s.getAttribute("data-page-slug");
903var api=s.getAttribute("data-api-url")+"/api/forms/submit";
904// Owner-mode: editor previews and the in-app shell load this script with
905// data-owner="1". We still listen for submits (the editor surfaces success
906// state to the user via the toolbar), but we MUST NOT fire conversion
907// pixels — that would pollute the customer's Meta / TikTok pixel data
908// with editor test traffic indistinguishable from real visitors.
909var _hpIsOwner=s.getAttribute("data-owner")==="1";
910// Preview-mode: the editor's Preview loads owner-gated (draft access + no pixel
911// pollution) but must show the true visitor experience. _hpIsPreview lets visitor-UX
912// blocks (multi-step paging) run even though _hpIsOwner is set; pixel/submission gates
913// stay owner-only.
914var _hpIsPreview=s.getAttribute("data-preview")==="1";
915var _hpAutomaticConversionEventsEnabled=s.getAttribute("data-automatic-conversion-events")!=="0";
916var _hpTurnstileKey=s.getAttribute("data-turnstile-key")||"";
917// data-persist-hidden: fields hidden via the inspector — hidden from visitors on
918// the live page but still submitted (attribution/UTM). The edit canvas (owner, NOT
919// preview) skips the rule so the inspector keeps them visible with a "Hidden" chip;
920// Preview applies it so it matches the published page.
921if(!_hpIsOwner||_hpIsPreview){try{var _hpHideStyle=document.createElement("style");_hpHideStyle.setAttribute("data-htmlpub-forms-hide","");_hpHideStyle.textContent="[data-persist-hidden]{display:none!important}";(document.head||document.documentElement).appendChild(_hpHideStyle);}catch(e){}}
922// Multiple-choice radio/checkbox width normalization is NOT injected at runtime.
923// The editor bakes an inline width:auto onto each option input (idempotently), so the
924// fix persists in the saved HTML and follows the normal draft -> publish flow instead
925// of overriding every served form's checkboxes/radios on every page load.
926// A field hidden from visitors (data-persist-hidden -> display:none) that ALSO carries native
927// required cannot be focused, so on a single-step form native constraint validation would
928// silently abort submit on it (the multi-step path already skips hidden fields via
929// _hpValidatable). Drop the required attribute from hidden controls on the served page so
930// submission is never blocked by a field the visitor can't see; the field still submits its value.
931if(!_hpIsOwner||_hpIsPreview){try{var _hpHidReq=document.querySelectorAll("[data-persist-hidden][required],[data-persist-hidden] [required]");for(var _hphr=0;_hphr<_hpHidReq.length;_hphr++)_hpHidReq[_hphr].removeAttribute("required");}catch(e){}}
932// The form's real submit button — never one of the authored multi-step nav buttons
933// (data-persist-ms-back/next), which may be type-less if hand-authored.
934function _hpFindSubmit(form){return form.querySelector("[type=submit]:not([data-persist-ms-back]):not([data-persist-ms-next]),button[type=submit]:not([data-persist-ms-back]):not([data-persist-ms-next]),button:not([type]):not([data-persist-ms-back]):not([data-persist-ms-next])");}
935// A checkbox group marked required-as-a-group (data-persist-group-required) is satisfied when
936// AT LEAST ONE member is checked — native required on each box would wrongly demand ALL.
937// Returns true if every such group within the given scope is satisfied; otherwise reports validity on
938// the first empty group (clearing on the next change) and returns false.
939function _hpGroupReqOK(scope){
940var boxes=scope.querySelectorAll('input[type="checkbox"][data-persist-group-required]');
941var groups={};
942for(var i=0;i<boxes.length;i++){var n=boxes[i].name||("__hp"+i);if(!groups[n])groups[n]=[];groups[n].push(boxes[i]);}
943for(var nm in groups){if(!Object.prototype.hasOwnProperty.call(groups,nm))continue;
944var g=groups[nm],any=false,first=null;
945for(var j=0;j<g.length;j++){if(g[j].closest&&g[j].closest("[data-persist-hidden]"))continue;if(!first)first=g[j];if(g[j].checked)any=true;}
946if(first&&!any){try{first.setCustomValidity("Please select at least one option.");
946if(first.reportValidity)first.reportValidity();var _clr=function(){try{first.setCustomValidity("");}catch(e){}for(var k=0;k<g.length;k++)g[k].removeEventListener("change",_clr);};for(var k2=0;k2<g.length;k2++)g[k2].addEventListener("change",_clr);}catch(e){}return false;}}
947return true;
948}
949// Pick a Turnstile theme (light/dark) from the first opaque background behind the form, so the
950// widget matches the PAGE rather than defaulting to the visitor's system theme ("auto"). Parses
951// the rgb() string without a regex escape (template-literal safe). Falls back to "auto".
952function _hpPickTheme(el){
953try{
954var n=el;
955while(n&&n.nodeType===1){
956var bg=window.getComputedStyle(n).backgroundColor||"";
957if(bg.indexOf("rgb")===0){
958var p=bg.replace(/[^0-9.,]/g,"").split(",");
959var a=p.length>3?parseFloat(p[3]):1;
960if(a>0.1){var lum=(0.299*+p[0]+0.587*+p[1]+0.114*+p[2])/255;return lum>0.5?"light":"dark";}
961}
962n=n.parentElement;
963}
964}catch(e){}
965return "auto";
966}
967// Inject the Turnstile widget on a spam-protected form via the platform-origin bridge iframe.
968// The widget CANNOT render inline on a customer's custom domain: Turnstile binds a widget to a
969// hostname allowlist (Enterprise caps at 200, no wildcards), so customer domains can't be listed.
970// Instead we embed /turnstile-bridge served from data-api-url (a platform origin that IS on the
971// allowlist); it renders the widget there and postMessages the token back (see the listener below).
972// Placed ABOVE the submit's outermost row so on a multi-step footer nav it sits on its own line.
973// Starts 0px (interaction-only is invisible); the bridge posts a resize only if a challenge appears.
974// Idempotent; no-op without the feature flag or inside a sandboxed iframe (the /p shell renders its
975// own widget on the app origin).
976function _hpInjectCaptcha(f){
977if(!_hpTurnstileKey||inSandbox||!f||f.querySelector("iframe[data-hp-turnstile]"))return;
978var base=(s.getAttribute("data-api-url")||"");
979if(base&&base.charAt(base.length-1)==="/")base=base.slice(0,-1);
980if(!base)return;
981var fr=document.createElement("iframe");
982fr.setAttribute("data-hp-turnstile","");
983fr.setAttribute("title","Spam protection");
984fr.setAttribute("scrolling","no");
985fr.style.cssText="width:100%;max-width:320px;height:0;border:0;display:block;overflow:hidden;";
986fr.src=base+"/turnstile-bridge?theme="+encodeURIComponent(_hpPickTheme(f));
987var sb=_hpFindSubmit(f);
988if(sb){var row=sb;while(row.parentNode&&row.parentNode!==f)row=row.parentNode;if(row.parentNode===f)f.insertBefore(fr,row);else if(sb.parentNode)sb.parentNode.insertBefore(fr,sb);else f.appendChild(fr);}else f.appendChild(fr);
989}
990// Receive the Turnstile token from the platform-origin bridge iframe. Origin-checked against
991// data-api-url. Stores the token on the owning form for the submit path; resizes the iframe when
992// Managed mode shows an actual challenge (invisible/auto-pass stays 0px). One listener serves
993// every captcha form on the page.
994(function(){
995var _hpBO="";try{_hpBO=new URL(s.getAttribute("data-api-url")||"",location.href).origin;}catch(e){}
996window.addEventListener("message",function(e){
997if(!_hpBO||e.origin!==_hpBO)return;
998var d=e.data;if(!d||d.source!=="hp-turnstile")return;
999var frs=document.querySelectorAll("iframe[data-hp-turnstile]"),host=null;
1000for(var i=0;i<frs.length;i++){if(frs[i].contentWindow===e.source){host=frs[i];break;}}
1001if(!host)return;
1002var form=host.closest?host.closest("form"):null;
1003if(d.type==="token"){if(form){form.__hpCaptchaToken=(d.token||"");form.__hpCaptchaError=false;}}
1004else if(d.type==="expired"){if(form)form.__hpCaptchaToken="";}
1005// A terminal bridge error (misconfigured/unreachable widget, keys mismatch) means no token can
1006// ever be produced; flag it so the submit gate fails OPEN rather than trapping the visitor forever
1007// (the server still fails open for the same unconfigured case). Distinct from expired (retr
1007yable).
1008else if(d.type==="error"){if(form){form.__hpCaptchaToken="";form.__hpCaptchaError=true;}}
1009else if(d.type==="resize"){var h=+d.height||0;host.style.height=(h>0?h:0)+"px";host.style.margin=(h>0?"12px 0":"0");}
1010});
1011})();
1012// Bounded wait for a Turnstile token, with a single re-challenge (decided fail policy #1/#2).
1013// The bridge delivers the token via postMessage, which can land slightly AFTER the visitor
1014// clicks submit (invisible challenge still resolving). Give it a bounded window; if none
1015// arrives, force ONE fresh challenge (reload the bridge iframe) and wait a final window; if
1016// STILL none, proceed anyway — the server accepts the lead and flags it unverified rather
1017// than dropping it. done() runs exactly once: as soon as a token appears, the bridge reports
1018// a terminal error, or the budget is spent.
1019function _hpWaitForCaptcha(f,done){
1020var WAIT=3000,STEP=100,called=false;
1021function finish(){if(called)return;called=true;done();}
1022function poll(deadline,onExpire){
1023if((f.__hpCaptchaToken||"")!==""||f.__hpCaptchaError){finish();return;}
1024if(Date.now()>=deadline){onExpire();return;}
1025setTimeout(function(){poll(deadline,onExpire);},STEP);
1026}
1027poll(Date.now()+WAIT,function(){
1028if((f.__hpCaptchaToken||"")!==""||f.__hpCaptchaError){finish();return;}
1029try{var fr=f.querySelector("iframe[data-hp-turnstile]");if(fr)fr.src=fr.src;}catch(e){}
1030poll(Date.now()+WAIT,finish);
1031});
1032}
1033// reCAPTCHA enforcement (HP-1475): only pages whose owner opted in emit this
1034// flag. It gates the client-side submit block below so pages that merely carry
1035// a decorative widget (the pre-HP-1475 status quo) keep working unchanged.
1036var _hpRecaptchaEnforced=s.getAttribute("data-recaptcha-enforced")==="1";
1037var corrId=0;
1038var pendingCallbacks={};
1039
1040// Detect if we're in a sandboxed iframe
1041var inSandbox=false;
1042try{inSandbox=window!==window.parent;}catch(e){inSandbox=true;}
1043
1044function cleanKey(s){return s.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_|_$/g,"").substring(0,30);}
1045// SYNC: mirror worker-pages/src/scripts/forms.ts and app/src/lib/extract-form-fields.ts
1046function looksLikeRawId(s){return /^[a-f0-9]{32}$/i.test(s)||/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(s)||/^[a-f0-9]{32}-[A-Za-z0-9_-]{20,40}$/.test(s);}
1047function fieldKey(el,idx){
1048if(el.name&&!looksLikeRawId(el.name))return el.name;
1049if(el.id&&!looksLikeRawId(el.id))return el.id;
1050var df=el.getAttribute("data-field")||el.getAttribute("data-name");
1051if(df&&!looksLikeRawId(df))return df;
1052// Type-based semantic hint. <input type="email"> without an explicit name
1053// should still be identified as "email" so the lead-capture extractor can
1054// find the address. Same for tel/url. Critical when the page builder
1055// (HTMLPub editor / Sacca's offers.leadpages.com pages) emits inputs
1056// without name attributes — without this, the email field gets keyed off
1057// its placeholder ("alex_at_youragency_com") and no lead is extracted.
1058if(el.type==="email")return "email";
1059if(el.type==="tel")return "phone";
1060if(el.type==="url")return "url";
1061// Sibling label pattern: <label>Foo</label><input ...> inside a wrapper.
1062// Common in modern form layouts. The existing closest(label) check below
1063// only catches WRAPPING labels, not sibling ones.
1064var prev=el.previousElementSibling;
1065if(prev&&prev.tagName==="LABEL"&&prev.textContent){var pk=cleanKey(prev.textContent);if(pk)return pk;}
1066if(el.placeholder){var ck=cleanKey(el.placeholder);if(ck)return ck;}
1067var al=el.getAttribute("aria-label");
1068if(al){var ck2=cleanKey(al);if(ck2)return ck2;}
1069if(el.id){var lbl=document.querySelector('label[for="'+el.id+'"]');if(lbl&&lbl.textContent){var ck3=cleanKey(lbl.textContent);if(ck3)return ck3;}}
1070var par=el.closest?el.closest("label"):null;
1071if(par&&par.textContent){var ck4=cleanKey(par.textContent);if(ck4)return ck4;}
1072return (el.type||"field")+"_"+idx;
1073}
1074// Known third-party tracking field patterns to ignore
1075var _blocklist=/^(lp[_s]?plan|ub[_s]?plan|gtrans|__hstc|__hssc|__hsfp|hutk|_mkto_trk|_biz_uid|_biz_nA|_biz_pendingA|_biz_flagsA|mkt_tok|li_fat_id|_ga|_gid|_fbp|_fbc|_uetsid|_uetvid|mc_cid|mc_eid|_drip_client_|__ss|__ss_referrer|ss_campaign|ss_source|ss_cid|siq_|sq_|_uc_|tl|sl|vote|query|_hp_vid|g-recaptcha-response)$/i;
1076function _isInjected(el){
1077// Skip hidden inputs not present in the original page HTML.
1078// Third-party scripts (Customers.ai, HubSpot, etc.) inject hidden fields
1079// at runtime. We detect these by checking if they were present at DOMContentLoaded.
1080if(el.type==="hidden"&&!el.hasAttribute("data-hp-original"))return true;
1081return false;
1082}
1083function collect(f){
1084var d={};
1085var els=f.elements||f.querySelectorAll("input,textarea,select");
1086var used={};
1087var hasVisibleValue=false;
1088for(var i=0;i<els.length;i++){
1089var el=els[i];
1090if(el.type==="file"||el.type==="submit"||el.type==="button")continue;
1091if((el.type==="checkbox"||el.type==="radio")&&!el.checked)continue;
1092if(_isInjected(el))continue;
1093// International-phone controls: the visible national input (data-hp-phone-nat) and
1094// the injected country <select> (data-hp-phone-cc) are NOT collected — the hidden
1095// E.164 companion carries the value under the field's name. The national input still
1096// counts toward hasVisibleValue so a phone-only form isn't treated as empty.
1097if(el.hasAttribute&&el.hasAttribute("data-hp-phone-nat")){if(el.value&&el.value.trim())hasVisibleValue=true;continue;}
1098if(el.hasAttribute&&el.hasAttribute("data-hp-phone-cc"))continue;
1099// Empty URL-param inputs are dropped from the payload so direct-traffic
1100// submissions from a form with data-persist-capture-utms (or hand-authored
1101// data-persist-url-param inputs) don't ship 7 blank attribution columns
1102// into every submission, integration webhook, CSV export, and CAPI event.
1103// Author-provided value="direct" (or any non-empty default) still ships.
1104if(el.type==="hidden"&&!(el.value||"").trim()&&el.hasAttribute("data-persist-url-param"))continue;
1105var key=fieldKey(el,i);
1106if(_blocklist.test(key))continue;
1107if(used[key]){key=key+"_"+i;}
1108used[key]=true;
1109d[key]=el.value;
1110if(el.type!=="hidden"&&el.value&&el.value.trim())hasVisibleValue=true;
1111}
1112// Require at least one visible field with a value — pure hidden-field submissions are noise
1113if(!hasVisibleValue)return {};
1114return d;
1115}
1116
1117// Generate a UUID v4 (browser-side). Used as the eventID that ties the
1118// fbq/ttq browser event to the matching CAPI event the server sends via
1119// the integration queue → provider workflow, so pixel platforms can dedup.
1120function _hpUuid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=Math.random()*16|0;return(c==="x"?r:(r&3|8)).toString(16);});}
1121
1122// Fire the canonical "Lead" event on every installed pixel platform. Only
1123// platforms that booted (window.fbq, window.ttq, window.gtag, window.dataLayer)
1124// receive a call — others no-op cleanly. The eventID is threaded into the
1125// provider-specific dedup parameter (Meta: eventID, TikTok: event_id).
1126function _hpFireLead(formIdent,data,eventId){
1127  if(_hpIsOwner||!_hpAutomaticConversionEventsEnabled)return;
1128  var em=null,ph=null,fn=null,ln=null;
1129  for(var k in data){
1130    if(!Object.prototype.hasOwnProperty.call(data,k))continue;
1131    var v=(data[k]||"").toString().trim();
1132    if(!v)continue;
1133    var kl=k.toLowerCase();
1134    if(!em&&/email/.test(kl)&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v))em=v;
1135    else if(!ph&&/phone|tel|mobile/.test(kl))ph=v;
1136    else if(!fn&&/first.?name|fname/.test(kl))fn=v;
1137    else if(!ln&&/last.?name|lname/.test(kl))ln=v;
1138  }
1139  var custom={};if(em)custom.em=em;if(ph)custom.ph=ph;if(fn)custom.fn=fn;if(ln)custom.ln=ln;
1140  try{if(window.fbq)window.fbq("track","Lead",custom,{eventID:eventId});}catch(e){}
1141  try{if(window.ttq&&window.ttq.track)window.ttq.track("SubmitForm",custom,{event_id:eventId});}catch(e){}
1142  try{if(window.gtag)window.gtag("event","generate_lead",{event_id:eventId,lp_form_id:formIdent});}catch(e){}
1143  try{if(window.dataLayer&&window.dataLayer.push)window.dataLayer.push({event:"lp_form_submit",lp_event_id:eventId,lp_form_id:formIdent});}catch(e){}
1144}
1145
1146// First-interaction hook: when the visitor focuses any form field for the
1147// first time on this page, fire the platform's "started a form" event.
1148// Once per form per page (debounced via _hpFiredInitFocus).
1149var _hpFiredInitFocus={};
1150function _hpFireInitiateCheckout(formIdent){
1151  if(_hpIsOwner||!_hpAutomaticConversionEventsEnabled)return;
1152  if(_hpFiredInitFocus[formIdent])return;
1153  _hpFiredInitFocus[formIdent]=true;
1154  var eid=_hpUuid();
1155  try{if(window.fbq)window.fbq("track","InitiateCheckout",{}
1155,{eventID:eid});}catch(e){}
1156  try{if(window.ttq&&window.ttq.track)window.ttq.track("InitiateCheckout",{},{event_id:eid});}catch(e){}
1157  try{if(window.gtag)window.gtag("event","form_start",{event_id:eid,lp_form_id:formIdent});}catch(e){}
1158  try{if(window.dataLayer&&window.dataLayer.push)window.dataLayer.push({event:"lp_form_start",lp_event_id:eid,lp_form_id:formIdent});}catch(e){}
1159}
1160// HP-3461 — the same first-interaction moment, reported to OUR analytics. It has
1161// been detected here all along and told to Facebook, TikTok, Google and GTM
1162// (above) while our own funnel never heard about it, so "169 started the form, 17
1163// finished" was unanswerable from first-party data.
1164//
1165// Deliberately NOT inside _hpFireInitiateCheckout: that is gated on
1166// _hpAutomaticConversionEventsEnabled, the customer's AD-PIXEL preference, and
1167// switching off automatic ad conversion events must not blind our own analytics.
1168//
1169// Requires a real visitor gesture. A focusin alone is not evidence of intent:
1170// <input autofocus>, a popup that focuses its email field on open, and browser
1171// autofill all fire it with nobody touching the keyboard, which would report a
1172// form_start for ~every session and make the abandonment number this feature
1173// exists to answer ("169 started, 17 finished") read as a 100% start rate on a
1174// page nobody typed into. _hpFireInitiateCheckout above has always had this bug;
1175// it only ever fed ad pixels, so nobody noticed.
1176//
1177// Owner previews self-gate: analyticsTrackingScript returns on data-owner="1"
1178// BEFORE registering window.__hpupPushEvent, so this finds no bridge and no-ops.
1179// (The edge serves only public traffic, so the same code is correct on both
1180// hosts. Known gap, pre-existing and not widened by form_start: the Nova page
1181// switcher omits ?token=, so isOwnerForAnalytics misses it and page_view /
1182// scroll_depth / element_click already report from that path.)
1183// SYNC with worker-pages/src/scripts/forms.ts — these files must stay byte-identical.
1184var _hpFormStartGesture=false;
1185function _hpMarkFormGesture(){_hpFormStartGesture=true;}
1186document.addEventListener("pointerdown",_hpMarkFormGesture,true);
1187document.addEventListener("keydown",_hpMarkFormGesture,true);
1188document.addEventListener("touchstart",_hpMarkFormGesture,{passive:true,capture:true});
1189// Object.create(null), not {}: the key is formId(), i.e. the author-controlled
1190// id/name attribute. With a bare object a form named "constructor" or "toString"
1191// reads as already-fired on its very first focus and never reports at all, and
1192// "__proto__" cannot even be latched — the page would show submissions with no
1193// starts whatsoever.
1194var _hpFiredFormStart=Object.create(null);
1195function _hpReportFormStart(formIdent){
1196  if(!_hpFormStartGesture)return;
1197  var k=String(formIdent||"");
1198  if(_hpFiredFormStart[k])return;
1199  _hpFiredFormStart[k]=true;
1200  try{if(window.__hpupPushEvent)window.__hpupPushEvent("page_engagement",{kind:"form_start",id:k.slice(0,128)});}catch(e){}
1201}
1202document.addEventListener("focusin",function(e){
1203  var el=e.target;
1204  if(!el||(el.tagName!=="INPUT"&&el.tagName!=="TEXTAREA"&&el.tagName!=="SELECT"))return;
1205  if(el.type==="hidden"||el.type==="submit"||el.type==="button")return;
1206  var f=el.closest&&(el.closest("form")||el.closest("[data-htmlpub-fake-form]"));
1207  if(!f)return;
1208  _hpReportFormStart(formId(f));
1209  _hpFireInitiateCheckout(formId(f));
1210},true);
1211
1212// Set _hp_email cookie when we find an email in form data (for CRM personalization)
1213function setEmailCookie(data){
1214var email=null;
1215for(var k in data){
1216if(!data.hasOwnProperty(k))continue;
1217var v=(data[k]||"").toString();
1218if(/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v.trim())){email=v.trim();break;}
1219}
1220if(email){
1221try{var enc=btoa(email.toLowerCase().trim());document.cookie="_hp_email="+encodeURIComponent(enc)+";path=/;max-age=31536000;SameSite=Lax;Secure";}catch(e){}
1222}
1223}
1224
1225// Read _hpid from URL and set cookie for future visits
1226(function(){
1227var p=new URLSearchParams(window.location.search);
1228var hpid=p.get("_hpid");
1229if(hpid){
1230try{var decoded=atob(hpid);if(decoded.indexOf("@")!==-1){document.cookie="_hp_email="+encodeURIComponent(hpid)+";path=/;max-age=31536000;SameSite=Lax;Secure";}}catch(e){}
1231}
1232})();
1233
1234// URL-parameter auto-populate. Any input/textarea/select with
1235// data-persist-url-param="<name>" gets its value set from
1236// URLSearchParams(location.search).get(<name>) on script boot. Enables UTM /
1237// gclid / fbclid / any-custom-param capture into form submissions without a
1238// custom head script. An author (or the AI builder) drops
1239//   <input type="hidden" name="utm_source" data-persist-url-param="utm_source">
1240// and the runtime fills it in from ?utm_source=... on page load. Runs
1241// BEFORE the data-hp-original tagging pass below so the populated hidden
1242// inputs get stamped and pass _isInjected. utm_* names are not on
1243// _blocklist. Missing params leave any pre-existing value intact so authors
1244// can specify a fallback via a plain value="" on the input. Selector is
1245// scoped to form fields so a stray attribute on a non-form element is a
1246// no-op rather than a silent property write. Repeated params
1247// (?utm_source=a&utm_source=b) resolve to the first value ("a") per the
1248// URLSearchParams.get() spec.
1249try{
1250var _hpUrlParams=new URLSearchParams(window.location.search);
1251document.querySelectorAll("input[data-persist-url-param],textarea[data-persist-url-param],select[data-persist-url-param]").forEach(function(el){
1252var pname=el.getAttribute("data-persist-url-param");
1253if(!pname)return;
1254var pv=_hpUrlParams.get(pname);
1255if(pv!==null&&pv!=="")el.value=pv;
1256});
1257}catch(e){}
1258
1259// Standard-UTM auto-capture. A form with data-persist-capture-utms gets the
1260// seven standard attribution params (utm_source, utm_medium, utm_campaign,
1261// utm_term, utm_content, gclid, fbclid, msclkid) auto-injected as hidden inputs +
1262// populated from URLSearchParams if the URL carries them. Editor UI toggles
1263// the attribute; runtime does the injection. Idempotent by name, so a form
1264// with a pre-existing named hidden input (author-written or AI-authored)
1265// keeps its own definition and is only value-populated by the URL-param
1266// pass above. Runs BEFORE the data-hp-original tagging pass below so the
1267// injected inputs get stamped and pass _isInjected on submission.
1268try{
1269var _HP_STD_UTMS=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","msclkid"];
1270document.querySelectorAll("form[data-persist-capture-utms]").forEach(function(f){
1271_HP_STD_UTMS.forEach(function(n){
1272if(f.querySelector('input[name="'+n+'"]'))return;
1273var inp=document.createElement("input");
1274inp.type="hidden";
1275inp.name=n;
1276inp.setAttribute("data-persist-url-param",n);
1277var v=_hpUrlParams.get(n);
1278if(v!==null&&v!=="")inp.value=v;
1279f.appendChild(inp);
1280});
1281});
1282}catch(e){}
1283
1284// Cloudflare Turnstile CAPTCHA. A form with data-persist-captcha gets the bridge iframe
1285// injected before its submit control when the feature flag is set. TOP-LEVEL path only — in
1286// the sandboxed /p/ iframe the parent shell renders the widget (opaque origin can't run
1287// Turnstile). Owner/editor previews skip it. The bridge posts the token back (listener near
1288// _hpInjectCaptcha), stashed on the form and read by submitData as the top-level captchaToken.
1289if(!_hpIsOwner&&!inSandbox){try{
1290document.querySelectorAll("form[data-persist-captcha]").forEach(function(f){
1291// Multi-step forms defer injection to the LAST step (see the multi-step render), so the
1292// widget renders fresh + visible next to the submit and never appears on an earlier step.
1293if(f.hasAttribute("data-persist-multistep"))return;
1294_hpInjectCaptcha(f);
1295});
1296}catch(e){}}
1297
1298// Authored multi-step progress indicator — a real [data-persist-ms-progress] element the
1299// editor builds as page content (variant "text" | "bar" | "dots"), so the author restyles it
1300// like anything else on the page. Only its STATE is written here; the structure is authored
1301// markup and is never rebuilt, or a restyle would be thrown away on every step. MIRROR of
1302// syncMsProgressState in visual-editor/iframe-script/utils.ts, which does the same for the
1303// edit canvas — that file cannot be imported from here (this script is a self-contained twin
1304// of a separate Cloudflare-worker package; see form-scripts-sync.test.ts), so the two copies
1305// must agree on every attribute name below. Not to be confused with the TRANSIENT
1306// data-htmlpub-ms-progress line further down, injected only for a form with no authored nav.
1307function _hpMsProgress(f,cur,total){
1308var p=f.querySelector("[data-persist-ms-progress]");
1309if(!p)return;
1310var t=p.querySelector("[data-persist-ms-progress-text]");
1311if(t)t.textContent="Step "+(cur+1)+" of "+total;
1312var fill=p.querySelector("[data-persist-ms-progress-fill]");
1313if(fill)fill.style.width=(total>0?((cur+1)/total)*100:100)+"%";
1314var dots=p.querySelectorAll("[data-persist-ms-progress-dot]");
1315for(var i=0;i<dots.length;i++)dots[i].style.opacity=(i<=cur?"1":"0.25");
1316// A connector counts as travelled only once the step AFTER it is reached.
1317var lines=p.querySelectorAll("[data-persist-ms-progress-line]");
1318for(var j=0;j<lines.length;j++)lines[j].style.opacity=(j<cur?"1":"0.25");
1319}
1320
1321// ── Multi-step forms ── a form[data-persist-multistep] shows one [data-persist-step]
1322// container at a time, and validates the current step's required fields before advancing.
1323// Navigation uses the AUTHORED, page-styled buttons the editor creates —
1324// [data-persist-ms-next] (advance) + [data-persist-ms-back] (retreat) — with the real submit
1325// shown only on the last step. Legacy / hand-authored forms with no such buttons get a
1326// transient injected Back/Next + progress line (data-htmlpub-*, never saved) so they still
1327// work. The controller is stashed on the form as __hpMultiStep so the submit handler advances
1328// instead of submitting until the last step. The edit canvas (owner, NOT preview) skips this
1329// so every field stays visible for editing; Preview (data-preview="1") runs it.
1330if(!_hpIsOwner||_hpIsPreview){try{
1331document.querySelectorAll("form[data-persist-multistep]").forEach(function(f){
1332var steps=[].slice.call(f.querySelectorAll("[data-persist-step]"));
1333if(steps.length<2){
1334// A single-step form has no navigation — hide any authored Back/Next so they don't render
1335// as dead buttons; the submit stays as the only action.
1336var _hpDead=f.querySelectorAll("[data-persist-ms-back],[data-persist-ms-next]");
1337for(var _hpd=0;_hpd<_hpDead.length;_hpd++)_hpDead[_hpd].style.display="none";
1338// Same reasoning for an authored progress indicator: with no steps to advance through it
1339// would sit there reading "Step 1 of 1".
1340var _hpProg1=f.querySelector("[data-persist-ms-progress]");
1341if(_hpProg1)_hpProg1.style.display="none";
1342// A degenerate multi-step form (0 or 1 real steps) behaves like a plain form, but the boot-time
1343// captcha pass skipped it (it carries data-persist-multistep) and the last-step inject below
1344// never runs. Inject the widget here — otherwise the server enforces a token this page never
1345// produces and every submission is rejected (100% lead loss), while the editor still shows the
1346// placeholder. Mirrors the non-multistep boot path (owner/preview skip via !_hpIsOwner).
1347if(!_hpIsOwner&&f.hasAttribute("data-persist-captcha"))_hpInjectCaptcha(f);
1348return;
1349}
1350steps.sort(function(a,b){return (parseInt(a.getAttribute("data-persist-step"),10)||0)-(parseInt(b.getAttribute("data-persist-step"),10)||0);});
1351// Suppress native whole-form constraint validation: a required field in a
1352// not-yet-reached (display:none) step would otherwise abort submission and block
1353// Enter-to-advance. We validate each step in JS instead (validateStep on every hop
1354// + the last step on final submit), so required fields are still enforced.
1355f.noValidate=true;
1356// Exclude the authored nav buttons so a type-less [data-persist-ms-*] button is never picked as the submit.
1357var submit=_hpFindSubmit(f);
1358var submitDisp=submit?submit.style.display:"";
1359var cur=0;
1360// Prefer the authored nav buttons; fall back to injecting them for legacy forms.
1361var next=f.querySelector("[data-persist-ms-next]");
1362var back=f.querySelector("[data-persist-ms-back]");
1363var prog=null;
1364if(!next){
1365// Skipped when the form carries an AUTHORED indicator: the transient one exists only to
1366// stand in for a form that has none, and rendering both reads as a duplicate.
1367if(!f.querySelector("[data-persist-ms-progress]")){
1368prog=document.createElement("div");
1369prog.setAttribute("data-htmlpub-ms-progress","");
1370prog.style.cssText="font-family:system-ui,sans-serif;font-size:13px;opacity:0.7;margin-bottom:8px;";
1371if(steps[0].parentNode)steps[0].parentNode.insertBefore(prog,steps[0]);
1372}
1373var nav=document.createElement("div");
1374nav.setAttribute("data-htmlpub-ms-nav","");
1375nav.style.cssText="display:flex;gap:8px;margin-top:8px;";
1376// Reuse an authored Back if the form has one (only Next was missing) — don't inject a duplicate.
1377if(!back){back=document.createElement("button");back.type="button";back.setAttribute("data-htmlpub-ms-back","");back.textContent="Back";}
1378next=document.createElement("button");next.type="button";next.setAttribute("data-htmlpub-ms-next","");next.textContent="Next";
1379if(submit&&submit.className){next.className=submit.className;if(!back.className)back.className=submit.className;}
1380nav.appendChild(back);nav.appendChild(next);
1381var lastStep=steps[steps.length-1];
1382if(lastStep.parentNode)lastStep.parentNode.insertBefore(nav,lastStep.nextSibling);
1383}
1384var nextDisp=next?next.style.display:"";
1385var backDisp=back?back.style.display:"";
1386function render(){
1387for(var i=0;i<steps.length;i++)steps[i].style.display=(i===cur?"":"none");
1388if(prog)prog.textContent="Step "+(cur+1)+" of "+steps.length;
1389_hpMsProgress(f,cur,steps.length);
1390var last=cur===steps.length-1;
1391if(back)back.style.display=cur>0?backDisp:"none";
1392if(next)next.style.display=last?"none":nextDisp;
1393if(submit)submit.style.display=last?submitDisp:"none";
1394// Spam protection: inject the Turnstile widget the moment the visitor reaches the last step
1395// (fresh + visible so its token populates reliably — hiding it via display:none does not).
1396if(last&&!_hpIsOwner&&f.hasAttribute("data-persist-captcha"))_hpInjectCaptcha(f);
1397}
1398function _hpValidatable(c){
1399// Skip fields the visitor can't see/act on — a data-persist-hidden (display:none) or
1400// disabled required field can't show a validation bubble and would silently trap them.
1401if(c.disabled)return false;
1402if(c.closest&&c.closest("[data-persist-hidden]"))return false;
1403return typeof c.checkValidity==="function";
1404}
1405function validateStep(){
1406var ctrls=steps[cur].querySelectorAll("input,select,textarea");
1407for(var i=0;i<ctrls.length;i++){
1408if(_hpValidatable(ctrls[i])&&!ctrls[i].checkValidity()){
1409if(typeof ctrls[i].reportValidity==="function")ctrls[i].reportValidity();
1410return false;
1411}
1412}
1413return _hpGroupReqOK(steps[cur]);
1414}
1415function validateOutside(){
1416// Required controls authored OUTSIDE any step container are never in validateStep's scope;
1417// f.noValidate is on form-wide, so validate them on final submit or they'd submit empty.
1418var all=f.querySelectorAll("input,select,textarea");
1419for(var i=0;i<all.length;i++){
1420var c=all[i];
1421if(c.closest&&c.closest("[data-persist-step]"))continue;
1422if(_hpValidatable(c)&&!c.checkValidity()){
1423if(typeof c.reportValidity==="function")c.reportValidity();
1424return false;
1425}
1426}
1427return true;
1428}
1429function advance(){if(cur<steps.length-1&&validateStep()){cur++;render();}}
1430if(next)next.addEventListener("click",function(e){if(e&&e.preventDefault)e.preventDefault();advance();});
1431if(back)back.addEventListener("click",function(e){if(e&&e.preventDefault)e.preventDefault();if(cur>0){cur--;render();}});
1432// validate() re-checks the CURRENT step + any required controls outside all steps — the
1433// submit handler calls it on the last step before sending (native validation is off).
1434f.__hpMultiStep={isLast:function(){return cur>=steps.length-1;},advance:advance,validate:function(){return validateStep()&&validateOutside();}};
1435render();
1436});
1437}catch(e){}}
1438
1439// ── International phone ── input[type=tel][data-persist-phone] gets a country
1440// dial-code <select> injected before it + a hidden E.164 companion that carries the
1441// real submitted value (+<dial><national digits>) under the field's name. The visible
1442// tel input keeps the national number for display and is excluded from collect()
1443// (data-hp-phone-nat); the <select> is excluded too (data-hp-phone-cc). On every
1444// input / country change the E.164 is reassembled and validated — E.164 spec (7–15
1445// total digits) plus a GENEROUS per-country national-length range where the length is
1446// well known — via setCustomValidity, so native validation blocks a malformed submit
1447// on single-step forms and validateStep() enforces it on multi-step ones. Runs BEFORE
1448// the data-hp-original tagging pass so the hidden companion is stamped and collected.
1449// Runs in owner mode too so the editor preview shows the selector (the validity flag
1450// is harmless there — owner previews don't submit real leads). data-persist-phone /
1451// data-persist-phone-country are persistent (never stripped from the AI diff); the
1452// injected select + companion are data-hp-* (transient) and never saved.
1453try{
1454var _HP_PHONE=[["US","United States","1",10,10,0],["CA","Canada","1",10,10,0],["GB","United Kingdom","44",9,10,0],["AU","Australia","61",9,9,0],["DE","Germany","49",0,0,0],["FR","France","33",9,9,0],["IN","India","91",10,10,0],["BR","Brazil","55",10,11,0],["MX","Mexico","52",10,10,0],["ES","Spain","34",9,9,0],["IT","Italy","39",9,11,1],["NL","Netherlands","31",9,9,0],["AE","United Arab Emirates","971",9,9,0],["SG","Singapore","65",8,8,0],["JP","Japan","81",9,11,0],["CN","China","86",8,11,0],["ZA","South Africa","27",9,9,0],["NG","Nigeria","234",10,10,0],["IE","Ireland","353",7,9,0],["NZ","New Zealand","64",8,10,0],["AR","Argentina","54",0,0,0],["AT","Austria","43",0,0,0],["BE","Belgium","32",0,0,0],["BD","Bangladesh","880",0,0,0],["BG","Bulgaria","359",0,0,0],["BH","Bahrain","973",8,8,0],["BO","Bolivia","591",0,0,0],["CH","Switzerland","41",9,9,0],["CL","Chile","56",0,0,0],["CO","Colombia","57",8,10,0],["CR","Costa Rica","506",8,8,0],["CY","Cyprus","357",8,8,0],["CZ","Czechia","420",9,9,0],["DK","Denmark","45",8,8,0],["DO","Dominican Republic","1",10,10,0],["EC","Ecuador","593",0,0,0],["EG","Egypt","20",0,0,0],["EE","Estonia","372",0,0,0],["FI","Finland","358",0,0,0],["GR","Greece","30",10,10,0],["GT","Guatemala","502",8,8,0],["HK","Hong Kong","852",8,8,0],["HR","Croatia","385",0,0,0],["HU","Hungary","36",0,0,0],["ID","Indonesia","62",0,0,0],["IL","Israel","972",8,9,0],["JO","Jordan","962",0,0,0],["KE","Kenya","254",0,0,0],["KR","South Korea","82",0,0,0],["KW","Kuwait","965",8,8,0],["LK","Sri Lanka","94",9,9,0],["LT","Lithuania","370",8,8,0],["LU","Luxembourg","352",0,0,0],["LV","Latvia","371",8,8,0],["MA","Morocco","212",9,9,0],["MY","Malaysia","60",0,0,0],["NO","Norway","47",8,8,0],["OM","Oman","968",8,8,0],["PA","Panama","507",0,0,0],["PE","Peru","51",9,9,0],["PH","Philippines","63",9,10,0],["PK","Pakistan","92",10,10,0],["PL","Poland","48",9,9,0],["PT","Portugal","351",9,9,0],["PY","Paraguay","595",0,0,0],["QA","Qatar","974",8,8,0],["RO","Romania","40",9,9,0],["RS","Serbia","381",0,0,0],["RU","Russia","7",10,10,0],["SA","Saudi Arabia","966",9,9,0],["SE","Sweden","46",0,0,0],["SK","Slovakia","421",9,9,0],["SI","Slovenia","386",0,0,0],["TH","Thailand","66",9,9,0],["TN","Tunisia","216",8,8,0],["TR","Turkey","90",10,10,0],["TW","Taiwan","886",0,0,0],["UA","Ukraine","380",9,9,0],["UY","Uruguay","598",0,0,0],["VE","Venezuela","58",0,0,0],["VN","Vietnam","84",0,0,0]];
1455var _hpPhoneByIso={};for(var _hppi=0;_hppi<_HP_PHONE.length;_hppi++){_hpPhoneByIso[_HP_PHONE[_hppi][0]]=_HP_PHONE[_hppi];}
1456var _hpDigits=function(s){return (s||"").replace(/[^0-9]/g,"");};
1457var _hpFlag=function(iso){try{return String.fromCodePoint(0x1F1E6+(iso.charCo
1457deAt(0)-65))+String.fromCodePoint(0x1F1E6+(iso.charCodeAt(1)-65));}catch(e){return "";}};
1458// Reduce the typed digits to the country's national significant number (NSN): strip a
1459// user-typed country code (guarded by the expected NSN length so a valid number is never
1460// shortened) and a national trunk prefix "0" (guarded so it never drops below the country
1461// minimum; suppressed for keepLeadingZero countries like Italy). Lead-safe: each strip
1462// fires only when it yields a still-plausible NSN, so "07911 123456", "06 12 34 56 78" and
1463// "1 (415) 555-2671" all assemble to correct E.164 and pass validation.
1464var _hpNSN=function(nat,cur){
1465var dial=cur[2],min=cur[3],max=cur[4],keep0=cur[5];
1466if(dial&&nat.length>dial.length&&nat.substring(0,dial.length)===dial){
1467var rest=nat.substring(dial.length);
1468var restT=(!keep0&&rest.charAt(0)==="0")?rest.replace(/^0+/,""):rest;
1469if(min&&max){
1470// Known national length: keep whichever candidate fits the country's range.
1471if(restT.length>=min&&restT.length<=max)nat=restT;
1472else if(rest.length>=min&&rest.length<=max)nat=rest;
1473}
1474// Variable-length country (min/max unknown): do NOT strip the leading dial-code digits —
1475// for those countries a real national number can legitimately begin with its own dial
1476// code, and chopping it corrupts the number (F4). "+"-prefixed input is handled before
1477// _hpNSN, so this only affects the ambiguous no-"+" case; keep the digits as typed.
1478}
1479if(!keep0&&nat.charAt(0)==="0"){var s=nat.replace(/^0+/,"");if(!min||s.length>=min)nat=s;}
1480// Russia/Kazakhstan (dial 7) use "8" as the national trunk prefix, not "0". Strip a lone
1481// leading "8", guarded by the country minimum so a valid NSN is never shortened (F3).
1482if(dial==="7"&&nat.charAt(0)==="8"){var s8=nat.replace(/^8/,"");if(!min||s8.length>=min)nat=s8;}
1483return nat;
1484};
1485document.querySelectorAll('input[type="tel"][data-persist-phone]').forEach(function(inp){
1486if(inp.getAttribute("data-hp-phone-on")==="1")return;
1487inp.setAttribute("data-hp-phone-on","1");
1488// Key the E.164 companion the SAME way collect()/extract-form-fields key a plain tel
1489// input (name -> id -> data-field -> "phone"), computed BEFORE any DOM mutation so
1490// enabling international never changes which lead column the number lands in.
1491var nm=fieldKey(inp,0);
1492var iso=(inp.getAttribute("data-persist-phone-country")||"US").toUpperCase();
1493if(!_hpPhoneByIso[iso])iso="US";
1494// Custom country combobox. A native <select> can't show a compact "flag +dial" when
1495// CLOSED and full country names when OPEN: its closed text IS the selected option's
1496// text, and a same-value close fires no event to swap it back. So we build a small
1497// self-contained combobox — a styled trigger button showing "flag +dial" + a panel
1498// listing full country names. curIso tracks the selection for E.164 assembly. Lay it
1499// out side by side with the number in a flex row (standard international-phone layout);
1500// the trigger copies the number input's border/radius/padding/font/colors so it matches
1501// whatever the page's forms look like (align-items:stretch matches their heights).
1502var curIso=iso;
1503// Brand accent for the selected-row tint + checkmark, sampled from the form's primary
1504// (submit) button background so the dropdown matches the page. A light tint keeps the
1505// dark option text legible. Falls back to a neutral blue; transparent / near-white
1506// buttons are ignored so the accent stays visible.
1507var _hpAccent="#2563eb",_hpAccentTint="rgba(37,99,235,0.12)";
1508try{
1509var _hpBtnForm=inp.closest?inp.closest("form"):null;
1510var _hpBtn=_hpBtnForm?_hpFindSubmit(_hpBtnForm):null;
1511if(_hpBtn){
1512var _bg=window.getComputedStyle(_hpBtn).backgroundColor||"";
1513var _pp=_bg.replace(/[^0-9,.]/g,"").split(",");
1514var _rr=parseInt(_pp[0],10),_gg=parseInt(_pp[1],10),_bb=parseInt(_pp[2],10),_aa=_pp.length>3?parseFloat(_pp[3]):1;
1515if(!isNaN(_rr)&&!isNaN(_gg)&&!isNaN(_bb)&&_aa>0.1&&(_rr+_gg+_bb)<720){_hpAccent="rgb("+_rr+","+_gg+","+_bb+")";_hpAccentTint="rgba("+_rr+","+_gg+","+_bb+",0.12)";}
1516}
1517}catch(e){}
1518// Use the AUTHORED wrapper (data-persist-phone-field) that the editor saved, so the
1519// published layout is identical to the edit canvas. Create one only as a fallback for
1520// legacy pages saved before the authored wrapper existed (served pages aren't re-saved,
1521// so a runtime-created wrapper is harmless there).
1522var wrap=inp.closest?inp.closest("[data-persist-phone-field]"):null;
1523if(!wrap){
1524wrap=document.createElement("span");
1525wrap.setAttribute("data-persist-phone-field","");
1526wrap.style.cssText="display:flex;align-items:stretch;gap:6px;width:100%;position:relative;";
1527if(inp.parentNode)inp.parentNode.insertBefore(wrap,inp);
1528wrap.appendChild(inp);
1529}
1530if(!wrap.style.position)wrap.style.position="relative";
1531// A <span role=button>, NOT a <button>: the widget sits inside the field's <label>, and
1532// a <label> forwards clicks to its first LABELABLE descendant. A <button> would become
1533// that control, so clicking a list item fires a synthetic click on the trigger and
1534// re-opens the panel. A <span> isn't labelable, so the label keeps targeting the number
1535// input; preventDefault on the trigger/list clicks stops any residual label forwarding.
1536var trig=document.createElement("span");
1537trig.setAttribute("role","button");
1538trig.setAttribute("tabindex","0");
1539trig.setAttribute("data-hp-phone-cc","");
1540trig.setAttribute("aria-haspopup","listbox");
1541trig.setAttribute("aria-expanded","false");
1542trig.setAttribute("aria-label","Country calling code");
1543trig.style.cssText="flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;box-sizing:border-box;";
1544try{
1545var _cs=window.getComputedStyle(inp);
1546var _cp=["fontFamily","fontSize","fontWeight","color","backgroundColor","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","paddingTop","paddingBottom","paddingLeft","paddingRight","boxSizing","lineHeight"];
1547for(var _cpi=0;_cpi<_cp.length;_cpi++){try{if(_cs[_cp[_cpi]])trig.style[_cp[_cpi]]=_cs[_cp[_cpi]];}catch(e){}}
1548}catch(e){}
1549var trigLabel=document.createElement("span");
1550trig.appendChild(trigLabel);
1551var trigCaret=document.createElement("span");trigCaret.textContent="▾";trigCaret.style.cssText="opacity:0.55;font-size:0.8em;";
1552trig.appendChild(trigCaret);
1553var panel=document.createElement("ul");
1554panel.setAttribute("role","listbox");
1555panel.setAttribute("data-hp-phone-list","");
1556panel.style.cssText="display:none;position:absolute;top:100%;left:0;z-index:2147483000;margin:4px 0 0;padding:4px 0;list-style:none;max-height:260px;overflow-y:auto;min-width:240px;background:#fff;color:#111;border:1px solid rgba(0,0,0,0.15);border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,0.18);font-family:system-ui,-apple-system,sans-serif;font-size:14px;text-align:left;";
1557// Hover + selected-item styling (one shared, id-guarded stylesheet — inline styles can't
1558// express :hover / ::after). Injected on the live page only; never touches the editor.
1559if(!document.getElementById("hp-phone-cc-style")){var _phSt=document.createElement("style");_phSt.id="hp-phone-cc-style";_phSt.textContent="ul[data-hp-phone-list] li[role=option]:hover{background:rgba(0,0,0,0.06);}ul[data-hp-phone-list] li[aria-selected=true]{font-weight:600;background:var(--hp-accent-tint,rgba(37,99,235,0.12));}ul[data-hp-phone-list] li[aria-selected=true]::after{content:'✓';float:right;margin-left:12px;color:var(--hp-accent,#2563eb);}";(document.head||document.documentElement).appendChild(_phSt);}
1560panel.style.setProperty("--hp-accent",_hpAccent);
1561panel.style.setProperty("--hp-accent-tint",_hpAccentTint);
1562for(var pci=0;pci<_HP_PHONE.length;pci++){
1563var pc=_HP_PHONE[pci];
1564var li=document.createElement("li");
1565li.setAttribute("role","option");
1566li.setAttribute("data-iso",pc[0]);
1567li.setAttribute("data-dial",pc[2]);
1568li.setAttribute("aria-selected",pc[0]===iso?"true":"false");
1569li.textContent=_hpFlag(pc[0])+" "+pc[1]+" +"+pc[2];
1570li.style.cssText="padding:7px 14px;cursor:pointer;white-space:nowrap;";
1571panel.appendChild(li);
1572}
1573var renderTrig=function(){var c=_hpPhoneByIso[curIso];trigLabel.textContent=_hpFlag(curIso)+" +"+(c?c[2]:"");};
1574var closePanel=function(){panel.style.display="none";trig.setAttribute("aria-expanded","false");};
1575var openPanel=function(){panel.style.display="block";trig.setAttribute("aria-expanded","true");};
1576inp.style.flex="1";
1577inp.style.minWidth="0";
1578wrap.insertBefore(trig,inp); // trigger sits before the number input (input already in the wrap)
1579wrap.appendChild(panel);
1580var hid=document.createElement("input");
1581hid.type="hidden";
1582hid.name=nm;
1583hid.setAttribute("data-hp-phone-e164","");
1584wrap.appendChild(hid);
1585inp.setAttribute("data-hp-phone-nat","");
1586inp.removeAttribute("name");
1587var _hpSyncPhone=function(){
1588var raw=(inp.value||"").trim();
1589var cur=_hpPhoneByIso[curIso];
1590var dial=cur?cur[2]:"";
1591var e164="",nsnLen=0,isIntl=false;
1592if(raw.charAt(0)==="+"){e164="+"+_hpDigits(raw);isIntl=true;}
1593else{var nsn=_hpNSN(_hpDigits(raw),cur);nsnLen=nsn.length;e164=nsn?("+"+dial+nsn):"";}
1594hid.value=e164;
1595var msg="";
1596if(raw){
1597var total=_hpDigits(e164).length;
1598// Hard rules only: E.164 spec (7-15 total digits) + a per-country MINIMUM NSN length
1599// (catches a genuinely incomplete number, e.g. a US local number with no area code). No
1600// per-country maximum -> an over-long entry (usually the visitor including extra
1601// country/trunk digits) is accepted, never rejected. A "+"-prefixed entry skips the
1602// per-country floor entirely (the visitor owns their own format).
1603if(total<7||total>15)msg="Enter a valid phone number.";
1604else if(!isIntl&&nsnLen&&cur&&cur[3]&&nsnLen<cur[3])msg="Enter a valid "+cur[1]+" phone number.";
1605}
1606if(typeof inp.setCustomValidity==="function")inp.setCustomValidity(msg);
1607};
1608var selectIso=function(newIso){if(_hpPhoneByIso[newIso])curIso=newIso;for(var _si=0;_si<panel.children.length;_si++){var _c=panel.children[_si];if(_c.getAttribute&&_c.getAttribute("role")==="option")_c.setAttribute("aria-selected",_c.getAttribute("data-iso")===curIso?"true":"false");}renderTrig();closePanel();_hpSyncPhone();};
1609panel.addEventListener("click",function(e){var t=e.target;while(t&&t!==panel&&!(t.getAttribute&&t.getAttribute("role")==="option"))t=t.parentNode;if(t&&t.getAttribute&&t.getAttribute("role")==="option"){e.preventDefault();selectIso(t.getAttribute("data-iso"));try{inp.focus();}catch(_e){}}});
1610trig.addEventListener("click",function(e){e.preventDefault();if(panel.style.display==="block")closePanel();else openPanel();});
1611trig.addEventListener("keydown",function(e){if(e.key==="Escape"){closePanel();}else if(e.key==="ArrowDown"||e.key==="Enter"||e.key===" "){e.preventDefault();openPanel();}});
1612document.addEventListener("click",function(e){if(!wrap.contains(e.target))closePanel();});
1613inp.addEventListener("input",_hpSyncPhone);
1614inp.addEventListener("blur",_hpSyncPhone);
1615renderTrig();
1616_hpSyncPhone();
1617});
1618}catch(e){}
1619
1620// Tag all hidden inputs present in the original HTML so we can distinguish
1621// them from ones injected later by third-party scripts (Customers.ai, etc.)
1622document.querySelectorAll('input[type="hidden"]').forEach(function(el){el.setAttribute("data-hp-original","1");});
1623
1624function showNotice(f,text,ok){
1625var m=document.createElement("div");
1626m.textContent=text;
1627m.style.cssText="padding:12px 16px;margin:8px 0;border-radius:6px;font-family:system-ui,sans-serif;font-size:14px;"+(ok?"background:#f0fdf4;color:#166534;border:1px solid #bbf7d0":"background:#fef2f2;color:#991b1b;border:1px solid #fecaca");
1628f.parentNode.insertBefore(m,f.nextSibling);
1629setTimeout(function(){m.remove()},5000);
1630}
1631// showMsg wraps showNotice; the optional 3rd arg lets callers override the default success/error
1632// copy (e.g. the Turnstile "still verifying" gate). Omit it for the standard success/error notices.
1633function showMsg(f,ok,msg){showNotice(f,msg||(ok?(f.getAttribute("data-success-message")||"Thank you! Your submission has been received."):"Something went wrong. Please try again."),ok);}
1634// reCAPTCHA v2 (HP-1475). The response token lives in a hidden
1635// <textarea name="g-recaptcha-response"> that grecaptcha creates inside the
1636// widget's container; scoping the lookup to the submitted form/container picks
1637// the right token when a page renders more than one widget.
1638function _hpCaptchaToken(f){
1639try{var ta=f.querySelector&&f.querySelector('textarea[name="g-recaptcha-response"]');return ta&&ta.value?ta.value:"";}catch(e){return "";}
1640}
1641
1642function formId(f){
1643if(f.tagName==="FORM")return f.id||f.getAttribute("name")||"form-"+([].indexOf.call(document.forms,f));
1644return f.id||"section-"+([].indexOf.call(document.querySelectorAll("[data-htmlpub-fake-form]"),f));
1645}
1646
1647// Listen for postMessage responses from parent shell
1648if(inSandbox){
1649window.addEventListener("message",function(e){
1650var d=e.data;
1651if(d&&d.type==="htmlpub-form-submit-result"&&d.correlationId){
1652var cb=pendingCallbacks[d.correlationId];
1653if(cb){
1654delete pendingCallbacks[d.correlationId];
1655cb(d.success,d.captchaRequired,d.error);
1656}
1657}
1658});
1659}
1660
1661function isSafeRedirectUrl(url){
1662if(!url)return false;
1663if(/^https?:\/\//i.test(url))return true;
1664if(url.charAt(0)==="/"&&url.charAt(1)!=="/")return true;
1665return false;
1666}
1667// Migrated Builder3 site headers use relative hrefs that break on trailing-slash landing URLs; drop the trailing slash on same-origin targets (/thank-you/ -> /thank-you).
1668function stripTrailingSlash(url){
1669try{var u=new URL(url,window.location.origin);if(u.origin===window.location.origin&&u.pathname.length>1&&u.pathname.charAt(u.pathname.length-1)==="/")return u.pathname.replace(/\/+$/,"")+u.search+u.hash;}catch(e){}
1670return url;
1671}
1672function maybeRedirectUrl(url){
1673if(window.htmlpubEditorMode)return;
1674if(!isSafeRedirectUrl(url))return;
1675if(/\/api\/forms\/submit$/.test(url))return;
1676setTimeout(function(){window.location.href=stripTrailingSlash(url);},600);
1677}
1678function maybeRedirect(f){maybeRedirectUrl(f.getAttribute("action"));}
1679function reportFail(kind,status,fident){
1680try{if(window.__hpupPushEvent)window.__hpupPushEvent("form_submit_failed",{failureKind:kind,httpStatus:status||0,host:location.host,path:location.pathname,apiBase:s.getAttribute("data-api-url")||"",formIdentifier:fident,pageId:pageId,pageSlug:slug});}catch(e){}
1681}
1682function submitData(f,data){
1683var btn=_hpFindSubmit(f);
1684if(btn)btn.disabled=true;
1685
1686// Generate one eventID per submission, threaded through three places:
1687//   (a) the JSON payload to /api/forms/submit → integration queue
1688//   (b) the postMessage to the parent shell (which forwards to the same API)
1689//   (c) the browser pixel events fired on success below
1690// Both browser and server emit the SAME id to the same downstream provider
1691// so Meta / TikTok dedup them as a single conversion.
1692var eventId=_hpUuid();
1693var fident=formId(f);
1694// Per-form Turnstile token — delivered by the bridge iframe via postMessage (see the listener
1695// near _hpInjectCaptcha) and stashed on the form element.
1696var _hpCapTok=(f.__hpCaptchaToken||"");
1697// stable editor-stamped form id → native lead-magnet routing; "" when unbound
1698var fkey=f.getAttribute("data-persist-form-id")||"";
1699// Classic form uuid re-stamped on migrated forms → per-form scope for carried Classic Zaps
1700var fsrc=f.getAttribute("data-persist-form-source-id")||"";
1701
1702// reCAPTCHA gate (HP-1475): when the page enforces reCAPTCHA but the visitor
1703// hasn't solved the challenge, block the submit with an inline error instead
1704// of POSTing an unverifiable payload the server will reject anyway. Gated on
1705// the enforcement flag (not mere widget presence) so pages with a decorative
1706// widget are unaffected. The server remains the security boundary — it
1707// re-verifies the token against Google. A form that opts into per-form Turnstile
1708// (data-persist-captcha) is handled by the Turnstile gate below instead — skip it here so a
1709// Turnstile form on a reCAPTCHA-enforced page isn't blocked for lacking a reCAPTCHA token
1710// (mirrors the server, which skips its reCAPTCHA block for forms in captchaFormIds).
1711var captchaToken=_hpCaptchaToken(f);
1712if(_hpRecaptchaEnforced&&!captchaToken&&!(f.hasAttribute&&f.hasAttribute("data-persist-captcha"))){
1713if(btn)btn.disabled=false;
1714showNotice(f,"Please complete the reCAPTCHA challenge before submitting.",false);
1715reportFail("captcha_required",0,fident);
1716return;
1717}
1718
1719if(inSandbox){
1720var id="fs-"+(++corrId);
1721var timer=setTimeout(function(){
1722delete pendingCallbacks[id];
1723if(btn)btn.disabled=false;
1724reportFail("timeout",0,fident);showMsg(f,false);
1725},10000);
1726
1727pendingCallbacks[id]=function(success,captchaRequired,errMsg){
1728clearTimeout(timer);
1729if(btn)btn.disabled=false;
1730if(success){setEmailCookie(data);_hpFireLead(fident,data,eventId);showMsg(f,true);if(typeof f.reset==="function")f.reset();maybeRedirect(f);}
1731else if(captchaRequired){showMsg(f,false,"Spam protection is still verifying — please wait a moment and submit again.");}
1732else{reportFail("relay_error",0,fident);showMsg(f,false,errMsg||undefined);}
1733};
1734
1735var vid="";try{vid=localStorage.getItem("_hp_vid")||"";}catch(e){}
1736parent.postMessage({type:"htmlpub-form-submit",correlationId:id,pageId:pageId,pageSlug:slug,formIdentifier:fident,formKey:fkey,classicFormUuid:fsrc,data:data,visitorId:vid,eventId:eventId,captchaToken:(_hpCapTok||captchaToken),formNeedsCaptcha:!!(f.hasAttribute&&f.hasAttribute("data-persist-captcha"))},"*");
1737}else{
1738// Send in top-level (direct fetch) mode. Wrapped in _hpProceed so it can be deferred
1739// until the Turnstile token has had a bounded chance to arrive (see _hpWaitForCaptcha).
1740function _hpProceed(){
1741var vid2="";try{vid2=localStorage.getItem("_hp_vid")||"";}catch(e){}
1742// The captcha token rides EVERY attempt (not just the first). It is single-use,
1743// but the server checks its verified-eventId cache before re-verifying, so a
1744// re-sent already-spent token short-circuits to pass, while a token that was never
1745// spent (attempt 0 failed at the transport / rate-limit layer before verify) still
1746// verifies on retry. Stripping it from retries silently dropped leads on captcha
1747// forms whenever attempt 0 hit a 429/5xx/network error. [HP-2467] Prefer the per-form
1748// Turnstile token; fall back to the reCAPTCHA token (a form uses one mechanism). Read
1749// the FRESHEST token here — it may have arrived via postMessage during the bounded wait,
1750// after _hpCapTok was snapshotted at the top of submitData.
1751var _capTok=(f.__hpCaptchaToken||"")||_hpCapTok||captchaToken;
1752var _hpBody=JSON.stringify({pageId:pageId,pageSlug:slug,formIdentifier:fident,formKey:fkey,classicFormUuid:fsrc,data:data,visitorId:vid2,eventId:eventId,captchaToken:_capTok});
1753// Retry transient failures so a network blip / 5xx / 429 doesn't silently lose
1754// a lead. Every attempt reuses the same eventId, so the server dedups to
1755// exactly one row + one set of side-effects. Backoff: immediate, 15s, 30s,
1756// 2min, then give up. Failed submits don't redirect, so the page stays open
1757// and the delayed retries can run. The submit button stays disabled across
1758// retries to prevent a manual re-submit (which would mint a new eventId). [HP-2467]
1759var _hpDelays=[0,15000,30000,120000];
1760function _hpAttempt(n){
1761fetch(api,{method:"POST",keepalive:true,headers:{"Content-Type":"application/json"},body:_hpBody}).then(function(r){
1762if(r.ok){if(btn)btn.disabled=false;setEmailCookie(data);_hpFireLead(fident,data,eventId);showMsg(f,true);if(typeof f.reset==="function")f.reset();
1763// The Turnstile token is single-use; after a successful submit clear it and reload the bridge
1764// iframe so a subsequent submit on the same (non-reset / non-redirected) form gets a FRESH token
1765// instead of re-sending the spent one and being rejected.
1766try{f.__hpCaptchaToken="";f.__hpCaptchaError=false;var _hpCf=f.querySelector("iframe[data-hp-turnstile]");if(_hpCf)_hpCf.src=_hpCf.src;}catch(e){}
1767maybeRedirect(f);return;}
1768if((r.status>=500||r.status===429)&&n<_hpDelays.length){setTimeout(function(){_hpAttempt(n+1);},_hpDelays[n]);return;}
1769if(btn)btn.disabled=false;reportFail("http_error",r.status,fident);
1770// A 403 on a captcha-protected form means the token was spent/invalid — refresh the widget
1771// so a retry gets a fresh one (otherwise "try again" resends the same rejected token).
1772try{if(r.status===403){f.__hpCaptchaToken="";f.__hpCaptchaError=false;var _hpCfe=f.querySelector("iframe[data-hp-turnstile]");if(_hpCfe)_hpCfe.src=_hpCfe.src;}}catch(e){}
1773// Surface the server's specific message (e.g. "CAPTCHA verification failed") instead of a
1774// generic one; fall back to the generic message when the body isn't JSON.
1775try{r.json().then(function(d){showMsg(f,false,(d&&d.error)||undefined);},function(){showMsg(f,false);});}catch(e){showMsg(f,false);}
1776}).catch(function(){
1777if(n<_hpDelays.length){setTimeout(function(){_hpAttempt(n+1);},_hpDelays[n]);return;}
1778if(btn)btn.disabled=false;reportFail("network",0,fident);showMsg(f,false);
1779});
1780}
1781_hpAttempt(0);
1782}
1783// Spam-protected form whose Turnstile widget exists but hasn't produced a token yet
1784// (fast submit, or the challenge is still loading). Per the decided fail policy, give the
1785// widget a bounded window plus ONE re-challenge, then submit anyway (the server accepts +
1786// flags unverified — never lose a lead) instead of the old "please submit again" dead end.
1787// Skip the wait when: owner preview (widget is owner-gated), a token is already in hand, the
1788// bridge reported a TERMINAL error (no token could ever come), or no widget is present (site
1789// key unconfigured → nothing to wait for, server fails open). The button stays disabled
1790// during the (sub-second-typical, 6s-worst-case) wait so the visitor can't double-submit.
1791if(_hpIsOwner||_hpCapTok!==""||f.__hpCaptchaError||!f.querySelector("iframe[data-hp-turnstile]")){
1792_hpProceed();
1793}else{
1794_hpWaitForCaptcha(f,_hpProceed);
1795}
1796}
1797}
1798
1799// Snapshot forms in the server-rendered HTML at init; third-party embeds (ConvertKit/ActiveCampaign) inject their <form> later, so they're excluded.
1800var _hpNativeForms=(function(){try{return new WeakSet([].slice.call(document.querySelectorAll("form")));}catch(e){return null;}})();
1801document.addEventListener("submit",function(e){
1802var f=e.target;
1803if(f.tagName!=="FORM")return;
1804if(_hpNativeForms&&!_hpNativeForms.has(f)){reportFail("skipped_non_native",0,formId(f));return;}// injected after init (popup/third-party) — don't hijack it; telemeter so silently-dropped non-native submits are visible [HP-2467]
1805e.preventDefault();
1806// Multi-step: if this form is split into steps and the visitor isn't on the last
1807// one yet, advance (validate current step + Next) instead of submitting. Captures
1808// Enter-in-field and any early submit so a partial lead is never sent. On the last
1809// step, validate it in JS first (the form is novalidate, so nothing else does). [P3]
1810if(f.__hpMultiStep){
1811if(!f.__hpMultiStep.isLast()){f.__hpMultiStep.advance();return;}
1812if(f.__hpMultiStep.validate&&!f.__hpMultiStep.validate())return;
1813}
1814// "Select at least one" enforcement for required checkbox groups (single-step forms have no
1815// __hpMultiStep validate pass, and it's a cheap final guard for multi-step too).
1816if(!_hpGroupReqOK(f))return;
1817var data=collect(f);
1818if(Object.keys(data).length===0){if(f.querySelector&&f.querySelector("input,textarea,select"))reportFail("skipped_empty",0,formId(f));return;}// nothing collected — telemeter only when the form actually has fields (real form, nothing captured) [HP-2467]
1819submitData(f,data);
1820},true);
1821
1822// --- Fake form interception (inputs outside <form>) ---
1823var lastFakeSubmit=0;
1824// Walk up from the clicked element to find a "form-like" container:
1825//   - has 1-20 inputs/textareas/selects (excluding hidden/submit/button types)
1826//   - has ≤4 button-like descendants (more = page scaffolding, not a form)
1827//   - the clicked element sits AFTER the last input in document order
1828//     (real submits sit below fields; uses DOCUMENT_POSITION_PRECEDING = 2)
1829// Walk depth capped at 3 — further up is <section>, <main>, or <body>.
1830function findFormLikeContainer(t){
1831var cur=t.parentElement;
1832for(var depth=0;cur&&depth<3;depth++){
1833if(cur.tagName==="FORM")return null;// real form, skip
1834var inputs=cur.querySelectorAll("input:not([type=hidden]):not([type=submit]):not([type=button]),textarea,select");
1835if(inputs.length>=1&&inputs.length<=20){
1836var ctas=cur.querySelectorAll("button,a[href],[role=button],input[type=submit]");
1837if(ctas.length<=4){
1838return (t.compareDocumentPosition(inputs[inputs.length-1])&2)?cur:null;
1839}
1840}
1841cur=cur.parentElement;
1842}
1843return null;
1844}
1845// <a> with a real href is navigation, never a submit. Allow empty href / "#" /
1846// no href (button-styled anchors). <button type="button"> is explicitly non-submit.
1847function isPlausibleSubmit(t){
1848if(t.tagName==="A"){
1849var href=t.getAttribute("href");
1850if(href!==null){
1851href=(href+"").trim();
1852if(href!==""&&href!=="#")return false;
1853}
1854}
1855if(t.tagName==="BUTTON"&&t.getAttribute("type")==="button")return false;
1856return true;
1857}
1858document.addEventListener("click",function(e){
1859var t=e.target.closest?e.target.closest("button,a,[role=button],input[type=submit]"):null;
1860if(!t)return;
1861if(t.closest("form"))return;// inside a real form, native handler covers it
1862// Third-party consent-management (CMP) dialogs (Cookiebot/OneTrust/Osano/
1863// TrustArc/CookieYes) inject a body-level dialog whose "Accept" button + single
1864// pre-checked "necessary" checkbox otherwise look form-like. Cheap early-exit
1865// for known vendors; the lead-field guard below is the load-bearing check.
1866// Vendor tokens are boundary-anchored (CookieYes cky-* matched as whole class
1867// tokens; TrustArc truste-/truste_/trustarc) so they never collide with
1868// sticky-*/trusted* names. [HP-3292]
1869try{if(t.closest("[id*='Cookiebot' i],[id*='CybotCookiebot' i],[id*='onetrust' i],[id*='osano' i],[id*='truste-' i],[id*='truste_' i],[id*='trustarc' i],[class*='cookie-consent' i],[class*='cookieconsent' i],[class^='cky-' i],[class*=' cky-' i]"))return;}catch(e){}
1870if(!isPlausibleSubmit(t))return;
1871var now=Date.now();
1872if(now-lastFakeSubmit<2000)return;
1873var container=findFormLikeContainer(t);
1874if(!container)return;
1875// A genuine lead always carries at least one typed (non checkbox/radio) field
1876// with a value. A form-like container whose only populated field is a
1877// checkbox/radio is a consent/cookie dialog, not a form — never fire a lead for
1878// it. Keys off DOM field TYPE, never payload values, so real leads whose data
1879// merely contains vendor-name substrings are unaffected. [HP-3292]
1880var _leadFields=container.querySelectorAll("input:not([type=hidden]):not([type=submit]):not([type=button]):not
1880([type=checkbox]):not([type=radio]),textarea,select");
1881var _hasLeadField=false;
1882for(var _lf=0;_lf<_leadFields.length;_lf++){if((_leadFields[_lf].value||"").trim()){_hasLeadField=true;break;}}
1883if(!_hasLeadField)return;
1884var data=collect(container);
1885if(Object.keys(data).length===0)return;
1886// Skip if all field values are empty (button click near empty form fields)
1887var hasAnyValue=Object.keys(data).some(function(k){return data[k]&&String(data[k]).trim();});
1888if(!hasAnyValue)return;
1889lastFakeSubmit=now;
1890container.setAttribute("data-htmlpub-fake-form","");
1891submitData(container,data);
1892// Notify analytics script about this fake form submission
1893try{document.dispatchEvent(new CustomEvent("htmlpub:form-submit",{detail:{formIdentifier:formId(container)}}));}catch(e){}
1894},true);
1895
1896// Always report form count to parent (even for non-owner views)
1897function reportFormCount(){
1898var forms=document.querySelectorAll("form");
1899var count=forms.length;
1900var labels=[];
1901for(var i=0;i<forms.length;i++){
1902var ff=forms[i];
1903var label=ff.getAttribute("aria-label")||ff.getAttribute("name")||ff.getAttribute("id")||"";
1904if(!label){
1905var heading=ff.querySelector("h1,h2,h3,h4,h5,h6,label,legend");
1906if(heading) label=heading.textContent.trim().substring(0,50);
1907}
1908labels.push(label||("Form "+(i+1)));
1909}
1910// needsCaptcha tells the parent shell (sandbox path) to render a Turnstile
1911// widget on its own origin: the sandboxed iframe has an opaque origin so it
1912// can't run Turnstile itself. Owner previews never require the token.
1913var _hpNeedsCaptcha=!_hpIsOwner&&!!document.querySelector("form[data-persist-captcha]");
1914if(inSandbox) parent.postMessage({type:"htmlpub-form-count",count:count,labels:labels,needsCaptcha:_hpNeedsCaptcha},"*");
1915}
1916function initFormCount(){
1917reportFormCount();
1918if(typeof MutationObserver!=="undefined"){
1919new MutationObserver(function(){reportFormCount();}).observe(document.body||document.documentElement,{childList:true,subtree:true});
1920}
1921}
1922if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",initFormCount);}
1923else{initFormCount();}
1924
1925// Leadbox/leadbar iframe form bridge. SYNC with worker-pages/src/scripts/forms.ts.
1926window.addEventListener("message",function(e){
1927if(!e||!e.data||e.data.type!=="htmlpub:iframe-form-submit")return;
1928var fid=String(e.data.formIdentifier||"iframe-form").slice(0,255);
1929var fsid=e.data.formSourceId?String(e.data.formSourceId).slice(0,255):"";
1930var raw=e.data.data;
1931if(!raw||typeof raw!=="object")return;
1932var clean={};
1933for(var k in raw){
1934if(!Object.prototype.hasOwnProperty.call(raw,k))continue;
1935if(looksLikeRawId(k))continue;
1936if(_blocklist.test(k))continue;
1937clean[k]=raw[k];
1938}
1939var redirect=typeof e.data.redirect==="string"?e.data.redirect:"";
1940var relayCaptcha=typeof e.data.captchaToken==="string"?e.data.captchaToken:undefined;
1941fetch(api,{method:"POST",keepalive:true,headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:pageId,pageSlug:slug,formIdentifier:fid,formSourceId:fsid,data:clean,captchaToken:relayCaptcha})}).then(function(r){if(r.ok){if(redirect)maybeRedirectUrl(redirect);}else{reportFail("http_error",r.status,fid);}}).catch(function(){reportFail("network",0,fid);});
1942},false);
1943})();
1944</script>
1944<script data-htmlpub-popups>
1945(function(){
1946"use strict";
1947
1948var SCOPE = "pathname";
1949var PAGE_ID = "bthr9fgjr4tunfrsf2zhq0ba";
1950
1951var DEFAULTS = {
1952  overlay:   { color: "#000000", opacity: 0.5,  clickToClose: true },
1953  close:     { enabled: true, position: "top-right", escapeToClose: true },
1954  animation: { open: "fade", close: "fade", durationMs: 250 },
1955  frequency: { visitsBefore: 0, daysCooldown: 0 }
1956};
1957
1958function parseJsonAttr(raw, fallback) {
1959  if (!raw) return fallback;
1960  try {
1961    var p = JSON.parse(raw);
1962    if (p && typeof p === "object") return p;
1963  } catch(e) {}
1964  return fallback;
1965}
1966
1967// Back-compat: pages published before the data-persist-popup* rename carry the
1968// legacy data-htmlpub-popup* names. Read canonical first, fall back to legacy.
1969// suffix is "" for the marker, "-name", "-overlay", "-target", etc.
1970function pAttr(el, suffix) {
1971  var v = el.getAttribute("data-persist-popup" + suffix);
1972  return v !== null ? v : el.getAttribute("data-htmlpub-popup" + suffix);
1973}
1974
1975function readConfig(el) {
1976  var overlay   = parseJsonAttr(pAttr(el, "-overlay"),   {});
1977  var closeCfg  = parseJsonAttr(pAttr(el, "-close"),     {});
1978  var anim      = parseJsonAttr(pAttr(el, "-animation"), {});
1979  var triggers  = parseJsonAttr(pAttr(el, "-triggers"),  {});
1980  var frequency = parseJsonAttr(pAttr(el, "-frequency"), {});
1981  return {
1982    overlay: {
1983      color:        typeof overlay.color === "string"   ? overlay.color   : DEFAULTS.overlay.color,
1984      opacity:      typeof overlay.opacity === "number" ? overlay.opacity : DEFAULTS.overlay.opacity,
1985      clickToClose: overlay.clickToClose !== false
1986    },
1987    close: {
1988      enabled:        closeCfg.enabled !== false,
1989      position:       closeCfg.position === "top-left" ? "top-left" : "top-right",
1990      escapeToClose:  closeCfg.escapeToClose !== false
1991    },
1992    animation: {
1993      open:        typeof anim.open === "string"  ? anim.open       : DEFAULTS.animation.open,
1994      close:       typeof anim.close === "string" ? anim.close      : DEFAULTS.animation.close,
1995      durationMs:  typeof anim.durationMs === "number" ? anim.durationMs : DEFAULTS.animation.durationMs
1996    },
1997    triggers: triggers,
1998    frequency: {
1999      visitsBefore: typeof frequency.visitsBefore === "number" ? frequency.visitsBefore : 0,
2000      daysCooldown: typeof frequency.daysCooldown === "number" ? frequency.daysCooldown : 0
2001    },
2002    // "none" = the marker's content owns its own chrome, so this runtime paints none of it.
2003    // Migrated Classic pop-ups: the marker holds an <iframe> whose document already draws the
2004    // mask, centring, card and close button. Nova-authored pop-ups never set it.
2005    chrome: pAttr(el, "-chrome") === "none" ? "none" : "default"
2006  };
2007}
2008
2009// ── LocalStorage helpers — scoped per pathname so two pages on the same
2010// origin track their popups independently. Wrapped in try/catch because
2011// Safari private mode + iframe sandboxing can throw on access.
2012var STORE_PREFIX = SCOPE === "popup-id" ? "_hpup:popup:" : ("_hpup:" + (location.pathname || "/") + ":");
2013function lsGet(key) {
2014  try { return localStorage.getItem(STORE_PREFIX + key); } catch(e) { return null; }
2015}
2016function lsSet(key, value) {
2017  try { localStorage.setItem(STORE_PREFIX + key, value); } catch(e) {}
2018}
2019
2020// Bump the visit counter once per pageload. Used by visitsBefore. In embed
2021// (popup-id) scope callers pass the popup id as a suffix so each standalone
2022// popup tracks its own visit count — a busy host page with two embedded popups
2023// must not let one popup's pageviews satisfy another's visitsBefore gate.
2024function recordVisit(suffix) {
2025  var key = "visits" + (suffix ? ":" + suffix : "");
2026  var prev = parseInt(lsGet(key) || "0", 10);
2027  if (!isFinite(prev) || prev < 0) prev = 0;
2028  lsSet(key, String(prev + 1));
2029  return prev + 1;
2030}
2031
2032function isEligible(cfg, popupId, currentVisit) {
2033  // visitsBefore: 0 = show on first visit. So eligible iff currentVisit > visitsBefore.
2034  if (cfg.frequency.visitsBefore > 0 && currentVisit <= cfg.frequency.visitsBefore) return false;
2035  // daysCooldown: don't reshow until N days have passed since last close.
2036  if (cfg.frequency.daysCooldown > 0) {
2037    var last = parseInt(lsGet("close:" + popupId) || "0", 10);
2038    if (last > 0) {
2039      var elapsedMs = Date.now() - last;
2040      if (elapsedMs < cfg.frequency.daysCooldown * 86400000) return false;
2041    }
2042  }
2043  return true;
2044}
2045
2046function composeRgba(color, opacity) {
2047  var hex = color.match(/^#([0-9a-f]{6})$/i);
2048  if (hex) {
2049    var n = parseInt(hex[1], 16);
2050    return "rgba(" + ((n >> 16) & 0xff) + "," + ((n >> 8) & 0xff) + "," + (n & 0xff) + "," + opacity + ")";
2051  }
2052  var rgb = color.match(/^rgb(?:a)?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);
2053  if (rgb) return "rgba(" + rgb[1] + "," + rgb[2] + "," + rgb[3] + "," + opacity + ")";
2054  return "rgba(0,0,0," + opacity + ")";
2055}
2056
2057function animStart(kind) {
2058  if (kind === "slide-up")   return { opacity: 0, transform: "translate(-50%, -40%)" };
2059  if (kind === "slide-down") return { opacity: 0, transform: "translate(-50%, -60%)" };
2060  if (kind === "zoom")       return { opacity: 0, transform: "translate(-50%, -50%) scale(0.92)" };
2061  if (kind === "none")       return { opacity: 1, transform: "translate(-50%, -50%)" };
2062  return { opacity: 0, transform: "translate(-50%, -50%)" }; // fade
2063}
2064function animEnd() {
2065  return { opacity: 1, transform: "translate(-50%, -50%) scale(1)" };
2066}
2067
2068// Body scroll lock — refcounted because two popups can technically be in
2069// the open state at once (different triggers firing back-to-back). The
2070// first lock saves the body's prior overflow + padding-right and replaces
2071// them; subsequent locks just bump the count. We only restore once every
2072// popup that locked has closed, so a still-open popup keeps the page held.
2073// padding-right compensates for the scrollbar disappearing — without it,
2074// the dimmed page behind the overlay shifts right at the moment of open.
2075var _hpupLockCount = 0;
2076var _hpupSavedOverflow = "";
2077var _hpupSavedPaddingRight = "";
2078function lockBodyScroll() {
2079  if (_hpupLockCount === 0) {
2080    var scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
2081    _hpupSavedOverflow = document.body.style.overflow || "";
2082    _hpupSavedPaddingRight = document.body.style.paddingRight || "";
2083    if (scrollbarWidth > 0) document.body.style.paddingRight = scrollbarWidth + "px";
2084    document.body.style.overflow = "hidden";
2085  }
2086  _hpupLockCount++;
2087}
2088function unlockBodyScroll() {
2089  if (_hpupLockCount === 0) return;
2090  _hpupLockCount--;
2091  if (_hpupLockCount === 0) {
2092    if (_hpupSavedOverflow) document.body.style.overflow = _hpupSavedOverflow;
2093    else document.body.style.removeProperty("overflow");
2094    if (_hpupSavedPaddingRight) document.body.style.paddingRight = _hpupSavedPaddingRight;
2095    else document.body.style.removeProperty("padding-right");
2096  }
2097}
2098
2099// Build the overlay backdrop. Returns the element. Wired with the right
2100// pointer behaviour for the popup's clickToClose setting.
2101function buildOverlay(cfg, onOverlayClick) {
2102  var ov = document.createElement("div");
2103  ov.setAttribute("data-htmlpub-popup-backdrop", "");
2104  ov.style.cssText = "position:fixed;inset:0;background:" + composeRgba(cfg.overlay.color, cfg.overlay.opacity) +
2105    ";z-index:2147483646;opacity:0;transition:opacity " + cfg.animation.durationMs + "ms ease;";
2106  if (cfg.overlay.clickToClose) ov.addEventListener("click", onOverlayClick);
2107  return ov;
2108}
2109
2110// Inject a close ✕ button if the popup doesn't already have one. We mark our
2111// injected button so re-show calls don't duplicate it.
2112function ensureCloseButton(el, cfg, onClose) {
2113  if (el.querySelector("[data-htmlpub-popup-close-btn]")) return;
2114  if (!cfg.close.enabled) return;
2115  var btn = document.createElement("button");
2116  btn.setAttribute("type", "button");
2117  btn.setAttribute("aria-label", "Close pop-up");
2118  btn.setAttribute("data-htmlpub-popup-close-btn", "");
2119  var posStyle = cfg.close.position === "top-left" ? "left:12px;" : "right:12px;";
2120  btn.style.cssText = "position:absolute;top:12px;" + posStyle +
2121    "width:28px;height:28px;border-radius:9999px;border:0;background:rgba(0,0,0,0.45);color:#fff;" +
2122    "font:16px/1 system-ui,-apple-system,sans-serif;cursor:pointer;display:flex;align-items:center;" +
2123    "justify-content:center;z-index:1;padding:0;";
2124  btn.textContent = "×";
2125  btn.addEventListener("click", function(e){ e.preventDefault(); e.stopPropagation(); onClose(); });
2126  // Ensure the popup itself is a positioning context so absolute close button
2127  // anchors to it. Cheap: only sets if not already positioned.
2128  var pos = getComputedStyle(el).position;
2129  if (pos === "static" || !pos) el.style.position = "relative";
2130  el.appendChild(btn);
2131}
2132
2133// ── Per-popup wiring ──────────────────────────────────────────────────────
2134// Each popup gets its own controller closing over its element + config +
2135// trigger cleanup so we can tear down listeners on close.
2136
2137// HP-1557 — fire an analytics event for this popup. Hands off to the
2138// analytics.ts buffer via window.__hpupPushEvent (registered there). If
2139// analytics isn't loaded for some reason we silently no-op rather than
2140// breaking the popup runtime.
2141function emitPopupEvent(eventType, popup, extras) {
2142  if (typeof window.__hpupPushEvent !== "function") return;
2143  var payload = {
2144    popupId: popup.getAttribute("id") || "",
2145    popupName: (pAttr(popup, "-name") || "").replace(/^\s+|\s+$/g, "")
2146  };
2147  // Standalone-embed pop-ups carry their page id via data-hp-popup-cuid (set by
2148  // the embed bundle) so analytics can attribute to a specific pop-up; the DOM
2149  // id in popupId is a shared name-slug. In-page pop-ups have no cuid so this
2150  // stays absent.
2151  var _hpCuid = popup.getAttribute("data-hp-popup-cuid");
2152  if (_hpCuid) payload.popupCuid = _hpCuid;
2153  if (extras && typeof extras === "object") {
2154    for (var k in extras) {
2155      if (Object.prototype.hasOwnProperty.call(extras, k)) payload[k] = extras[k];
2156    }
2157  }
2158  window.__hpupPushEvent(eventType, payload);
2159}
2160
2161// Single-open invariant: only one popup may be visible at a time.
2162// show() force-closes whatever is up before painting itself.
2163var _hpupCurrentOpen = null;
2164
2165function wirePopup(el, currentVisit) {
2166  var cfg = readConfig(el);
2167  var popupId = el.getAttribute("id") || "";
2168  if (!popupId) return;
2169  // The editor stores popups hidden via inline display:none. We never strip
2170  // that — we toggle it at show/close time so a never-shown popup stays
2171  // invisible (matching its rendered state in the DOM).
2172  var originalDisplay = el.style.display || "";
2173  var isOpen = false;
2174  var overlay = null;
2175  var keyListener = null;
2176  var sizeObserver = null;
2177  var cleanups = []; // trigger listener removers; called on first show
2178
2179  function cleanupTriggers() {
2180    for (var i = 0; i < cleanups.length; i++) {
2181      try { cleanups[i](); } catch(e) {}
2182    }
2183    cleanups = [];
2184  }
2185
2186  // Why a popup was opened — informs the parent analytics event so the
2187  // dashboard can distinguish "fired by timer" vs. "explicit user click".
2188  // Updated by callers before show() and reset to null after emit.
2189  var lastShowReason = null;
2190
2191  // HP-4147 — the overflow choice in show() is a measurement, and measurements
2192  // go stale. Content can grow AFTER open: an inline checkout's Stripe Payment
2193  // Element progressively reveals card fields and then a "Save your info"
2194  // section as the buyer types. A popup that opened short (overflow:visible, so
2195  // its shadow paints) and then grows past maxHeight spills below the viewport
2196  // instead of scrolling, and because show() locked the body scroll there is
2197  // nothing left for a touch drag to move — the Pay button becomes unreachable
2198  // and closing + reopening is the only way out (reopening re-runs show(), which
2199  // re-measures against the now-tall content and lands on "auto"). So re-decide
2200  // on every resize — but only ever upgrade to "auto", never back to "visible".
2201  //
2202  // One-way on purpose. Reverting to "visible" when content shrinks back under
2203  // maxHeight sounds harmless (it hands HP-3771 its shadow back) but it
2204  // re-releases horizontal spill that "auto" had been containing, so a wide
2205  // child paints outside the popup over the page, and it discards scrollTop,
2206  // bouncing the buyer to the top of the form. Both were measured in Chromium
2207  // at a Pixel viewport. Staying in "auto" costs only the shadow, and only for
2208  // the rest of an open in which content already exceeded the viewport: "auto"
2209  // paints no scrollbar once content fits again, it merely clips. close()
2210  // strips every inline style, so the next open re-decides from scratch.
2211  function syncOverflow() {
2212    if (!isOpen) return;
2213    // Guarded on a real change. Toggling overflow lays out a scrollbar, which
2214    // resizes content, which re-enters this observer — an unguarded write there
2215    // is a feedback loop that never settles.
2216    if (el.scrollHeight > el.clientHeight + 1 && el.style.overflow !== "auto") {
2217      el.style.overflow = "auto";
2218    }
2219  }
2220
2221  function observeSize() {
2222    if (sizeObserver || typeof ResizeObserver === "undefined") return;
2223    sizeObserver = new ResizeObserver(syncOverflow);
2224    // Observing el catches the growth that crosses maxHeight, since its own box
2225    // tracks content right up to the clamp. Observing its element children
2226    // catches growth that continues past the clamp, where el's box is pinned and
2227    // reports no resize at all — content 1px under maxHeight that then expands
2228    // would otherwise never re-decide.
2229    sizeObserver.observe(el);
2230    for (var childIndex = 0; childIndex < el.children.length; childIndex++) {
2231      sizeObserver.observe(el.children[childIndex]);
2232    }
2233  }
2234
2235  function unobserveSize() {
2236    if (!sizeObserver) return;
2237    sizeObserver.disconnect();
2238    sizeObserver = null;
2239  }
2240
2241  function show(reason) {
2242    if (isOpen) return;
2243    if (_hpupCurrentOpen && _hpupCurrentOpen !== el && typeof _hpupCurrentOpen._hpupClose === "function") {
2244      _hpupCurrentOpen._hpupClose("replaced", true);
2245    }
2246    _hpupCurrentOpen = el;
2247    isOpen = true;
2248    lastShowReason = reason || "explicit";
2249    cleanupTriggers();
2250    lockBodyScroll();
2251    // chrome:none — the content paints its own ✕ (Classic's .js-close, inside the iframe).
2252    var bare = cfg.chrome === "none";
2253    if (!bare) ensureCloseButton(el, cfg, function(){ close("close_button"); });
2254
2255    var start = animStart(cfg.animation.open);
2256    var end   = animEnd();
2257
2258    // Centered fixed positioning with a high z-index so we float above any
2259    // page content + checkout / chat widgets.
2260    el.style.display      = "block";
2261    el.style.position     = "fixed";
2262    el.style.zIndex       = "2147483647";
2263
2264    if (bare) {
2265      // Full-viewport shell. An <iframe> has no intrinsic content height (~150px, and it never
2266      // reports its content size to the parent), so the shrink-wrapped-card model below cannot
2267      // measure it — centring, the maxHeight/maxWidth clamps and the overflow logic all assume a
2268      // box that sizes to its content. Reproduce CDA's model instead: the frame fills the
2269      // viewport and the Classic document inside owns mask, centring and card.
2270      //
2271      // No transform either: every animStart transform carries translate(-50%,-50%), which
2272      // centres a card and would shove a full-viewport shell off screen. Opacity alone.
2273      el.style.top        = "0";
2274      el.style.left       = "0";
2275      el.style.width      = "100%";
2276      el.style.height     = "100%";
2277      el.style.opacity    = String(start.opacity);
2278      el.style.transition = "opacity " + cfg.animation.durationMs + "ms ease";
2279      openClassicFrame(el);
2280    } else {
2281    el.style.top          = "50%";
2282    el.style.left         = "50%";
2283    el.style.transform    = start.transform;
2284    el.style.opacity      = String(start.opacity);
2285    el.style.maxHeight    = "calc(100vh - 32px)";
2286    el.style.maxWidth     = "calc(100vw - 32px)";
2287    // HP-3771 — "auto" clips any box-shadow set on the popup's own content:
2288    // box-shadow doesn't affect layout size, so this element shrink-wraps to its
2289    // content and its own overflow then clips the shadow it should cast.
2290    //
2291    // But "visible" unconditionally is not safe either. This element is
2292    // position:fixed and centred, so content taller than maxHeight does not
2293    // clip — it spills past the viewport with no scrollbar and nothing can
2294    // reach it. A lead-capture form taller than the viewport would lose its
2295    // submit button. So decide per popup, after layout: overflow stays "auto"
2296    // only when the content genuinely overflows (scrolling wins), and is
2297    // "visible" otherwise (shadow wins). Short popups are the overwhelmingly
2298    // common case, so the shadow renders for almost everyone.
2299    //
2300    // syncOverflow re-applies this same rule for the rest of the open (HP-4147).
2301    el.style.overflow     = "visible";
2302    syncOverflow();
2303    el.style.transition   = "opacity " + cfg.animation.durationMs + "ms ease, transform " + cfg.animation.durationMs + "ms ease";
2304    }
2305
2306    if (!el.parentNode) document.body.appendChild(el);
2307    if (!bare) {
2308      // Backdrop. Inserted before the popup so the popup naturally paints on top.
2309      // chrome:none skips it — the Classic document paints its own .js-leadbox-mask, and a second
2310      // backdrop would darken the page twice.
2311      overlay = buildOverlay(cfg, function(){ close("overlay_click"); });
2312      (el.parentNode || document.body).insertBefore(overlay, el);
2313
2314      // Started only once el is attached, so the observer's first delivery measures
2315      // real geometry rather than the 0x0 of a detached node.
2316      observeSize();
2317    }
2318
2319    // Force reflow so the next style change animates from start, not jumps.
2320    /* eslint-disable-next-line no-unused-expressions */ void el.offsetWidth;
2321
2322    el.style.opacity   = String(end.opacity);
2323    if (!bare) el.style.transform = end.transform;
2324    if (overlay) overlay.style.opacity = "1";
2325
2326    if (cfg.close.escapeToClose) {
2327      keyListener = function(e) { if (e.key === "Escape") close("escape"); };
2328      document.addEventListener("keydown", keyListener);
2329    }
2330
2331    emitPopupEvent("popup_view", el, { reason: lastShowReason });
2332    lastShowReason = null;
2333  }
2334
2335  function close(reason, hard) {
2336    if (!isOpen) return;
2337    isOpen = false;
2338    emitPopupEvent("popup_dismiss", el, { reason: reason || "unknown" });
2339    var start = animStart(cfg.animation.close);
2340    el.style.opacity   = String(start.opacity);
2341    // Same reason as show(): the close transform centres a card, and applying it to a
2342    // full-viewport shell would slide it off screen instead of fading it out.
2343    if (cfg.chrome !== "none") el.style.transform = start.transform;
2344    if (overlay) overlay.style.opacity = "0";
2345
2346    if (keyListener) {
2347      document.removeEventListener("keydown", keyListener);
2348      keyListener = null;
2349    }
2350
2351    var afterAnim = function() {
2352      if (_hpupCurrentOpen === el) _hpupCurrentOpen = null;
2353      unobserveSize();
2354      el.style.display = originalDisplay || "none";
2355      el.style.removeProperty("position");
2356      el.style.removeProperty("top");
2357      el.style.removeProperty("left");
2358      el.style.removeProperty("transform");
2359      el.style.removeProperty("opacity");
2360      el.style.removeProperty("z-index");
2361      el.style.removeProperty("max-height");
2362      el.style.removeProperty("max-width");
2363      // Only the chrome:none branch sets these, and teardown must remove exactly what this show
2364      // set — a marker can legitimately carry an author's own inline width/height, and stripping
2365      // it on close would resize the pop-up the second time it opens.
2366      if (cfg.chrome === "none") {
2367        el.style.removeProperty("width");
2368        el.style.removeProperty("height");
2369      }
2370      el.style.removeProperty("overflow");
2371      el.style.removeProperty("transition");
2372      if (overlay && overlay.parentNode) overlay.parentNode.removeChild(overlay);
2373      overlay = null;
2374      // Tear down the close button — its click handler closes over THIS
2375      // show's overlay reference. Leaving it across opens means a second
2376      // show's X would call the previous close() with a stale overlay and
2377      // leave the current overlay floating.
2378      var existingBtn = el.querySelector("[data-htmlpub-popup-close-btn]");
2379      if (existingBtn && existingBtn.parentNode) existingBtn.parentNode.removeChild(existingBtn);
2380      // Release the scroll lock only after the popup is fully torn down so
2381      // the page doesn't pop back to scrollable while the close animation
2382      // is still painting.
2383      unlockBodyScroll();
2384      lsSet("close:" + popupId, String(Date.now()));
2385    };
2386    if (hard || cfg.animation.close === "none") afterAnim();
2387    else setTimeout(afterAnim, cfg.animation.durationMs);
2388  }
2389
2390  // ── Triggers ────────────────────────────────────────────────────────────
2391  // Only wire if the popup is eligible to show this pageload (frequency
2392  // rules). Click-to-open via [data-htmlpub-popup-target] always works,
2393  // regardless of eligibility — it's an explicit user action.
2394  var eligible = isEligible(cfg, popupId, currentVisit);
2395
2396  if (eligible) {
2397    var t = cfg.triggers || {};
2398
2399    if (t.timed && typeof t.timed.delaySec === "number") {
2400      var delayMs = Math.max(0, t.timed.delaySec) * 1000;
2401      var timer = setTimeout(function(){ show("timed"); }, delayMs);
2402      cleanups.push(function(){ clearTimeout(timer); });
2403    }
2404
2405    if (t.exitIntent === true) {
2406      // Mobile / touch devices don't have a meaningful "exit toward chrome"
2407      // gesture. Standard heuristic: skip if no mouse pointer is available.
2408      if (!matchMedia("(pointer: coarse)").matches) {
2409        var onMove = function(e) {
2410          if (e.clientY < 8) show("exit_intent");
2411        };
2412        document.addEventListener("mousemove", onMove);
2413        cleanups.push(function(){ document.removeEventListener("mousemove", onMove); });
2414      }
2415    }
2416
2417    if (typeof t.scrollPercent === "number" && t.scrollPercent > 0) {
2418      var threshold = Math.max(1, Math.min(100, t.scrollPercent));
2419      var onScroll = function() {
2420        var doc = document.documentElement;
2421        var scrolled = (window.scrollY || doc.scrollTop || 0);
2422        var max = (doc.scrollHeight - doc.clientHeight) || 1;
2423        var pct = (scrolled / max) * 100;
2424        if (pct >= threshold) show("scroll");
2425      };
2426      window.addEventListener("scroll", onScroll, { passive: true });
2427      cleanups.push(function(){ window.removeEventListener("scroll", onScroll); });
2428    }
2429  }
2430
2431  // Note: in-popup form submits and CTA clicks are NOT emitted as separate
2432  // popup_* events. They already fire as form_submit / element_click via
2433  // analytics.ts's global listeners, which now attach popupId + popupName
2434  // to the payload so customers can still see which pop-up the conversion
2435  // came from while continuing to track the standard goal types.
2436
2437  // Expose the show function on the element so [data-htmlpub-popup-target]
2438  // clicks (wired globally below) can find and trigger it without re-parsing
2439  // the config. _hpupShow / _hpupClose are deliberately namespaced + ugly to
2440  // avoid colliding with user code.
2441  el._hpupShow = show;
2442  el._hpupClose = close;
2443  // Returned so boot() can flush unfired trigger listeners on pagehide.
2444  return cleanupTriggers;
2445}
2446
2447// A served Classic leadbox renders INACTIVE: its controller only adds js-active to the dialog
2448// and mask when it receives an "open" message, so a frame nobody tells to open is a full-viewport
2449// sheet showing nothing.
2450//
2451// TWO WIRE FORMATS, because there are two leadbox builds in the corpus and they do NOT agree —
2452// measured across all 462 live clones on 2026-09-09, not inferred from one of them (D71):
2453//
2454//   · newer build (410 of 462): a handleMessage controller that accepts EITHER the bare string
2455//     "open" or {type:"open"}.
2456//   · OLDER build (52 of 462): a hand-rolled listener whose whole test is
2457//         window.addEventListener('message', function(e){ e && e.data && 'open' === e.data && j.open() })
2458//     read verbatim out of the served bundle. The test 'open' === e.data is a STRING identity check, so
2459//     an object payload fails it silently and that pop-up never opens.
2460//
2461// This function used to post ONLY {type:"open"}, and the comment here used to assert both builds
2462// took it. They do not: every old-build pop-up rendered a full-viewport dark sheet with an
2463// invisible modal — no error, no console message, and zero lead capture. So post BOTH forms. The
2464// duplicate is harmless in each direction: the old build ignores the object, and the newer one's
2465// open() just re-adds the class and refocuses.
2466//
2467// The string form is also what Classic's own embed.js sent, which is why the defect stayed hidden
2468// on the two pages that still carried embed.js — its copy opened correctly beside our blank one.
2469// (The close relay below had this right already: it reads Classic's bare-string "close leadbox"
2470// off the wire. Open is the direction that was guessed.)
2471//
2472// Posted on both paths because the ordering is not ours to control: if the frame is already
2473// loaded the immediate post lands, and if it is not, the load listener catches it. Opening twice
2474// is harmless — open() just re-adds the class and refocuses.
2475function openClassicFrame(el) {
2476  var frame = el.querySelector("iframe");
2477  if (!frame) return;
2478  var post = function() {
2479    // targetOrigin "*": the frame is served sandboxed, so its origin is opaque and cannot be
2480    // named. The payload is a bare open signal carrying nothing worth protecting.
2481    try {
2482      if (!frame.contentWindow) return;
2483      // String FIRST: it is the format the old build needs, and the one that was missing.
2484      frame.contentWindow.postMessage("open", "*");
2485      frame.contentWindow.postMessage({ type: "open" }, "*");
2486    } catch(e) {}
2487  };
2488  post();
2489  frame.addEventListener("load", post);
2490}
2491
2492// Global close relay. A chrome:none pop-up's ✕ lives INSIDE its iframe (Classic's .js-close), so
2493// the click is invisible to this document — the frame posts htmlpub:leadbox-close instead and we
2494// close the marker holding it. Without this the Classic card hides itself and the full-viewport
2495// iframe stays put, covering the page with an invisible sheet that swallows every click.
2496//
2497// Identify the marker by matching iframe.contentWindow against e.source, NOT by the message's
2498// uuid: a page can carry several migrated pop-ups, and a uuid can be placed more than once. This
2499// is the technique CDA's own injected handler used.
2500function handleCloseRelay(e) {
2501  if (!e || !e.data) return;
2502  // Classic's own leadbox controller posts the bare STRING "close leadbox" to window.parent when
2503  // it closes (300ms after the fade, from its close() method) — read out of the served bundle, not
2504  // guessed. It is already the wire format, so nothing needs injecting into the frame. The
2505  // namespaced form is accepted too, for anything we serve ourselves later.
2506  var type = typeof e.data === "string" ? e.data : e.data.type;
2507  if (type !== "close leadbox" && type !== "htmlpub:leadbox-close") return;
2508  var frames = document.querySelectorAll("[data-persist-popup] iframe, [data-htmlpub-popup] iframe");
2509  for (var i = 0; i < frames.length; i++) {
2510    if (frames[i].contentWindow !== e.source) continue;
2511    var marker = frames[i].closest("[data-persist-popup], [data-htmlpub-popup]");
2512    if (marker && typeof marker._hpupClose === "function") marker._hpupClose("close_relay");
2513    return;
2514  }
2515}
2516
2517// The migrated pop-up runs in a sandboxed cross-origin iframe and cannot read this page's anal
2517ytics
2518// session/visitor ids (opaque origin blocks its storage). Hand them over when the in-frame capture
2519// script asks — matching e.source to one of our own pop-up iframes so we only answer our own frames.
2520// The ids exist only once analytics consent has minted them, so with no consent nothing is sent and
2521// the ingest keeps the lead but skips the conversion event (there is no page_view session to join).
2522// The page id rides along either way, so the lead files under the page that was served, whatever
2523// URL the browser reports.
2524function handleSessionReq(e) {
2525  if (!e || !e.data || e.data.type !== "hp-popup-session-req" || !e.source) return;
2526  var frames = document.querySelectorAll("[data-persist-popup] iframe, [data-htmlpub-popup] iframe");
2527  var mine = false;
2528  for (var i = 0; i < frames.length; i++) { if (frames[i].contentWindow === e.source) { mine = true; break; } }
2529  if (!mine) return;
2530  var sid = null, vid = null;
2531  try { sid = sessionStorage.getItem("_hp_sid"); } catch(err) {}
2532  try { vid = localStorage.getItem("_hp_vid"); } catch(err) {}
2533  try { e.source.postMessage({ type: "hp-popup-session", sid: sid, vid: vid, pid: PAGE_ID }, "*"); } catch(err) {}
2534}
2535
2536// Global click-to-open dispatcher. Targets carry [data-persist-popup-target]
2537// (or legacy [data-htmlpub-popup-target]) or href="#popup-…" (for plain anchors
2538// that the link picker auto-generated).
2539function handleTargetClick(e) {
2540  var t = e.target;
2541  if (!t || !t.closest) return;
2542  var hit = t.closest("[data-persist-popup-target], [data-htmlpub-popup-target], a[href^='#popup-'], a[href^='#modal-'], a[href^='#dialog-']");
2543  if (!hit) return;
2544  var id = pAttr(hit, "-target");
2545  if (!id) {
2546    var href = hit.getAttribute("href") || "";
2547    if (href.charAt(0) === "#") id = href.slice(1);
2548  }
2549  if (!id) return;
2550  var popup = document.getElementById(id);
2551  if (!popup || pAttr(popup, "") === null) return;
2552  e.preventDefault();
2553  if (typeof popup._hpupShow === "function") popup._hpupShow("click_target");
2554}
2555
2556// ── Boot ──────────────────────────────────────────────────────────────────
2557
2558function flushTeardowns(list) {
2559  for (var j = 0; j < list.length; j++) {
2560    try { list[j](); } catch(e) {}
2561  }
2562}
2563
2564function boot() {
2565  if (SCOPE === "popup-id") {
2566    // Embed mode: each standalone popup ships its OWN copy of this runtime, so
2567    // a single global boot guard would make a second embedded popup bail. Wire
2568    // each popup once via a per-element marker, count visits per popup id, and
2569    // attach the global click / pagehide listeners only once across copies.
2570    var list = document.querySelectorAll("[data-persist-popup],[data-htmlpub-popup]");
2571    if (!list.length) return;
2572    if (!window.__hpupTeardowns) window.__hpupTeardowns = [];
2573    for (var n = 0; n < list.length; n++) {
2574      var pel = list[n];
2575      if (pel.__hpupWired) continue;
2576      pel.__hpupWired = true;
2577      var pt = wirePopup(pel, recordVisit(pel.getAttribute("id") || ""));
2578      if (typeof pt === "function") window.__hpupTeardowns.push(pt);
2579    }
2580    if (!window.__hpupClickWired) {
2581      window.__hpupClickWired = true;
2582      document.addEventListener("click", handleTargetClick, false);
2583      window.addEventListener("message", handleCloseRelay, false);
2584      window.addEventListener("message", handleSessionReq, false);
2585      window.addEventListener("pagehide", function(){ flushTeardowns(window.__hpupTeardowns || []); });
2586    }
2587    return;
2588  }
2589
2590  // In-page mode: one runtime per page wires every popup. Guard against
2591  // double-injection (HMR, accidental double-include).
2592  if (window.__hpupBooted) return;
2593  window.__hpupBooted = true;
2594  var popups = document.querySelectorAll("[data-persist-popup],[data-htmlpub-popup]");
2595  if (!popups.length) return;
2596  var visit = recordVisit();
2597  var teardowns = [];
2598  for (var i = 0; i < popups.length; i++) {
2599    var t = wirePopup(popups[i], visit);
2600    if (typeof t === "function") teardowns.push(t);
2601  }
2602  document.addEventListener("click", handleTargetClick, false);
2603  window.addEventListener("message", handleCloseRelay, false);
2604  window.addEventListener("message", handleSessionReq, false);
2605  // Flush unfired trigger listeners on pagehide.
2606  window.addEventListener("pagehide", function(){ flushTeardowns(teardowns); });
2607}
2608
2609if (document.readyState === "loading") {
2610  document.addEventListener("DOMContentLoaded", boot);
2611} else {
2612  boot();
2613}
2614
2615})();
2616</script>
2616<script data-htmlpub-countdown-runtime>
2617(function(){
2618var nodes=document.querySelectorAll('[data-htmlpub-countdown]');
2619if(!nodes.length)return;
2620function pad(n){n=String(n);return n.length<2?'0'+n:n;}
2621function setDigit(root,sel,val){var el=root.querySelector(sel);if(el)el.textContent=pad(val);}
2622function tick(node,endMs){
2623var diff=Math.max(0,endMs-Date.now());
2624var s=Math.floor(diff/1000);
2625var d=Math.floor(s/86400);s-=d*86400;
2626var h=Math.floor(s/3600);s-=h*3600;
2627var m=Math.floor(s/60);s-=m*60;
2628setDigit(node,'.countdown-days',d);
2629setDigit(node,'.countdown-hours',h);
2630setDigit(node,'.countdown-minutes',m);
2631setDigit(node,'.countdown-seconds',s);
2632if(diff===0){
2633var redirect=node.getAttribute('data-redirect');
2634var inFrame=false;try{inFrame=window!==window.top;}catch(e){inFrame=true;}
2635if(redirect&&!inFrame){try{window.location.href=redirect;}catch(e){}}
2636return true;
2637}
2638return false;
2639}
2640function endMsFor(node){
2641var mode=node.getAttribute('data-htmlpub-countdown');
2642if(mode==='fixed'){
2643var target=node.getAttribute('data-target');
2644var t=target?Date.parse(target):NaN;
2645return isNaN(t)?0:t;
2646}
2647if(mode==='evergreen'){
2648var dur=parseInt(node.getAttribute('data-duration')||'0',10);
2649if(!dur)return 0;
2650var idx=Array.prototype.indexOf.call(nodes,node);
2651var base='htmlpub_cd_'+(node.getAttribute('data-persist-countdown-id')||node.id||(location.pathname+'|'+dur+'|'+idx));
2652var ver=parseInt(node.getAttribute('data-persist-countdown-reset')||'0',10)||0;
2653var key=ver>0?base+'|v'+ver:base;
2654if(ver>0){try{for(var li=localStorage.length-1;li>=0;li--){var lk=localStorage.key(li);if(!lk)continue;if(lk===base){localStorage.removeItem(lk);continue;}if(lk.indexOf(base+'|v')===0){var lv=lk.slice(base.length+2);if(/^[0-9]+$/.test(lv)&&parseInt(lv,10)<ver){localStorage.removeItem(lk);}}}}catch(e){}}
2655var first=null;
2656try{first=localStorage.getItem(key);}catch(e){}
2657if(!first){first=String(Date.now());try{localStorage.setItem(key,first);}catch(e){}}
2658return parseInt(first,10)+dur*1000;
2659}
2660return 0;
2661}
2662for(var i=0;i<nodes.length;i++){(function(node){
2663var endMs=endMsFor(node);
2664if(!endMs)return;
2665if(tick(node,endMs))return;
2666var iv=setInterval(function(){if(tick(node,endMs))clearInterval(iv);},1000);
2667})(nodes[i]);}
2668})();
2669</script>
2669<script data-text-anim-runtime>
2670(function(){
2671var nodes=document.querySelectorAll('[data-persist-text-anim]');
2672if(!nodes.length)return;
2673try{if(window.matchMedia('(prefers-reduced-motion: reduce)').matches)return;}catch(e){}
2674var KEYFRAMES={
2675fadeIn:[{opacity:0},{opacity:1}],
2676slideUp:[{opacity:0,transform:'translateY(32px)'},{opacity:1,transform:'translateY(0)'}],
2677slideDown:[{opacity:0,transform:'translateY(-32px)'},{opacity:1,transform:'translateY(0)'}],
2678slideLeft:[{opacity:0,transform:'translateX(32px)'},{opacity:1,transform:'translateX(0)'}],
2679slideRight:[{opacity:0,transform:'translateX(-32px)'},{opacity:1,transform:'translateX(0)'}],
2680zoomIn:[{opacity:0,transform:'scale(0.85)'},{opacity:1,transform:'scale(1)'}],
2681blurIn:[{opacity:0,filter:'blur(8px)'},{opacity:1,filter:'blur(0)'}],
2682bounceIn:[{offset:0,opacity:0,transform:'translateY(40px)'},{offset:0.55,opacity:1,transform:'translateY(-8px)'},{offset:0.8,transform:'translateY(4px)'},{offset:1,transform:'translateY(0)'}]
2683};
2684var DEFAULTS={duration:600,delay:0,easing:'ease-out'};
2685function readInt(el,attr,fallback,min){
2686var n=parseInt(el.getAttribute(attr)||'',10);
2687if(!isFinite(n)||n<min)return fallback;
2688return n;
2689}
2690function arm(el){
2691var type=el.getAttribute('data-persist-text-anim')||'fadeIn';
2692var frames=KEYFRAMES[type];
2693if(!frames)return null;
2694var duration=readInt(el,'data-persist-text-anim-duration',DEFAULTS.duration,1);
2695var delay=readInt(el,'data-persist-text-anim-delay',DEFAULTS.delay,0);
2696var easing=el.getAttribute('data-persist-text-anim-easing')||DEFAULTS.easing;
2697try{
2698var anim=el.animate(frames,{duration:duration,delay:delay,easing:easing,fill:'both'});
2699anim.pause();
2700anim.currentTime=0;
2701return anim;
2702}catch(e){return null;}
2703}
2704if('IntersectionObserver' in window){
2705var io=new IntersectionObserver(function(entries){
2706for(var i=0;i<entries.length;i++){
2707var en=entries[i];
2708if(!en.isIntersecting)continue;
2709io.unobserve(en.target);
2710var armed=en.target._hpTextAnim;
2711if(!armed)continue;
2712en.target._hpTextAnim=null;
2713try{armed.play();}catch(e){}
2714}
2715},{threshold:0.15});
2716for(var j=0;j<nodes.length;j++){
2717var pending=arm(nodes[j]);
2718if(!pending)continue;
2719nodes[j]._hpTextAnim=pending;
2720io.observe(nodes[j]);
2721}
2722}else{
2723for(var k=0;k<nodes.length;k++){
2724var immediate=arm(nodes[k]);
2725if(immediate)try{immediate.play();}catch(e){}
2726}
2727}
2728})();
2729</script>
2729<script data-htmlpub-nav>
2730(function(){
2731"use strict";
2732
2733function closeAllSubmenus(except) {
2734  var panels = document.querySelectorAll('[data-persist-nav-submenu-panel]');
2735  for (var i = 0; i < panels.length; i++) {
2736    var panel = panels[i];
2737    if (panel === except) continue;
2738    panel.classList.remove('is-open');
2739    var trigger = panel.__hpNavTrigger;
2740    if (trigger) trigger.setAttribute('aria-expanded', 'false');
2741  }
2742}
2743
2744function wireSubmenus() {
2745  var triggers = document.querySelectorAll('[data-persist-nav-submenu]');
2746  if (!triggers.length) return;
2747  for (var i = 0; i < triggers.length; i++) {
2748    (function(trigger) {
2749      if (trigger.__hpNavWired) return;
2750      trigger.__hpNavWired = true;
2751      var panelId = trigger.getAttribute('data-persist-nav-submenu');
2752      var panel = panelId ? document.getElementById(panelId) : (trigger.parentElement ? trigger.parentElement.querySelector('[data-persist-nav-submenu-panel]') : null);
2753      if (!panel) return;
2754      panel.__hpNavTrigger = trigger;
2755      trigger.setAttribute('aria-haspopup', 'true');
2756      trigger.setAttribute('aria-expanded', 'false');
2757      trigger.addEventListener('click', function(e) {
2758        var isOpen = panel.classList.contains('is-open');
2759        e.preventDefault();
2760        e.stopPropagation();
2761        closeAllSubmenus(isOpen ? null : panel);
2762        panel.classList.toggle('is-open', !isOpen);
2763        trigger.setAttribute('aria-expanded', isOpen ? 'false' : 'true');
2764      });
2765    })(triggers[i]);
2766  }
2767  document.addEventListener('click', function(e) {
2768    var t = e.target;
2769    if (t && t.closest && t.closest('[data-persist-nav-submenu-panel], [data-persist-nav-submenu]')) return;
2770    closeAllSubmenus(null);
2771  });
2772}
2773
2774function wireMobileMenu() {
2775  var toggles = document.querySelectorAll('[data-persist-nav-mobile-toggle], [data-persist-nav-tablet-toggle]');
2776  if (!toggles.length) return;
2777  for (var i = 0; i < toggles.length; i++) {
2778    (function(toggle) {
2779      if (toggle.__hpNavWired) return;
2780      toggle.__hpNavWired = true;
2781      var isTablet = toggle.hasAttribute('data-persist-nav-tablet-toggle');
2782      var targetId = isTablet ? toggle.getAttribute('data-persist-nav-tablet-toggle') : toggle.getAttribute('data-persist-nav-mobile-toggle');
2783      var panelSelector = isTablet ? '[data-persist-nav-tablet-panel]' : '[data-persist-nav-mobile-panel]';
2784      var panel = targetId ? document.getElementById(targetId) : (toggle.parentElement ? toggle.parentElement.querySelector(panelSelector) : null);
2785      if (!panel) return;
2786      toggle.setAttribute('aria-expanded', 'false');
2787      toggle.addEventListener('click', function(e) {
2788        var isOpen = panel.classList.contains('is-open');
2789        e.preventDefault();
2790        e.stopPropagation();
2791        if (isOpen) panel.classList.remove('is-open'); else panel.classList.add('is-open');
2792        toggle.setAttribute('aria-expanded', isOpen ? 'false' : 'true');
2793      });
2794    })(toggles[i]);
2795  }
2796}
2797
2798function wireScrollBackground() {
2799  // Every nav this system manages, not just ones with scroll-bg/blur
2800  // currently set — a page published while an OLDER build still applied
2801  // blur directly to nav carries that inline backdrop-filter baked into
2802  // its served HTML even after blur is later turned off, so the self-heal
2803  // below has to run regardless of the CURRENT attribute state.
2804  var navs = document.querySelectorAll('[data-persist-nav-id]');
2805  if (!navs.length) return;
2806  for (var i = 0; i < navs.length; i++) {
2807    (function(nav) {
2808      // Self-heal: strip a stale inline backdrop-filter baked into a page
2809      // saved before this fix (HP-3558 round 15 follow-up) — see the
2810      // dedicated blur-layer comment below for why it must never live on
2811      // nav itself.
2812      if (nav.style.getPropertyValue('backdrop-filter') || nav.style.getPropertyValue('-webkit-backdrop-filter')) {
2813        nav.style.removeProperty('backdrop-filter');
2814        nav.style.removeProperty('-webkit-backdrop-filter');
2815      }
2816      // "Transparent" (data-persist-nav-always-transparent, HP-3558 round
2817      // 16) — the non-sticky counterpart of scroll-bg above. "Useful over a
2818      // hero image" only holds if nav visually overlaps whatever follows
2819      // it, so lift it out of flow the same way Sticky's own
2820      // position:fixed/sticky already does, rather than leaving it
2821      // position:static (which just reveals blank page background above
2822      // the hero, not the hero itself — see iframe-script/utils.ts's
2823      // ensureNavScrollBackground for the matching editor-side comment).
2824      var alwaysTransparent = nav.hasAttribute('data-persist-nav-always-transparent');
2825      if (alwaysTransparent) {
2826        var navCsForOverlay = window.getComputedStyle(nav);
2827        if (!navCsForOverlay || (navCsForOverlay.position !== 'fixed' && navCsForOverlay.position !== 'sticky')) {
2828          nav.style.position = 'absolute';
2829          nav.style.top = '0px';
2830          nav.style.left = '0px';
2831          nav.style.right = '0px';
2832          if (!nav.style.zIndex) nav.style.zIndex = '1000';
2833        }
2834      }
2835      // Blur needs no scroll-reactivity — a blurred OPAQUE background
2836      // looks identical to an unblurred one, so it's simplest and correct
2837      // to apply it once, unconditionally, regardless of scroll state.
2838      // Applied to a dedicated decorative layer BEHIND nav's real
2839      // content, never to nav itself — backdrop-filter promotes whatever
2840      // element carries it into a new containing block for any
2841      // position:fixed descendant, which silently shrank the full-screen/
2842      // bottom-drawer hamburger panel (both position:fixed) down to nav's
2843      // own small box instead of the viewport when it lived on nav
2844      // directly (HP-3558 round 15 follow-up: "the full-screen hamburger
2845      // menu... ended up being covered by the next section").
2846      var blur = nav.getAttribute('data-persist-nav-scroll-blur');
2847      if (blur) {
2848        var blurLayer = nav.querySelector('[data-persist-nav-scroll-blur-layer]');
2849        if (!blurLayer) {
2850          blurLayer = document.createElement('div');
2851          blurLayer.setAttribute('data-persist-nav-scroll-blur-layer', '');
2852          // z-index:-1 required — without it, backdrop-filter's own
2853          // compositing samples nav's LATER siblings (logo/links/CTA) too,
2854          // visibly blurring them despite painting after this layer in
2855          // plain DOM order. Safe from escaping behind nav's own box into
2856          // the page below because Sticky header always sets an explicit,
2857          // non-auto nav.style.zIndex — position:fixed/sticky + a non-auto
2858          // z-index already makes nav its own stacking context.
2859          blurLayer.style.cssText = 'position:absolute;inset:0;pointer-events:none;z-index:-1;';
2860          nav.insertBefore(blurLayer, nav.firstChild);
2861          var navCs = window.getComputedStyle(nav);
2862          if (!navCs || navCs.position === 'static' || !navCs.position) nav.style.position = 'relative';
2863        }
2864        // Self-heal a layer saved before the z-index fix landed (see
2865        // iframe-script/utils.ts's ensureNavScrollBackground for the
2866        // matching editor-side comment).
2867        if (blurLayer.style.zIndex !== '-1') blurLayer.style.zIndex = '-1';
2868        blurLayer.style.setProperty('backdrop-filter', 'blur(' + blur + ')', 'important');
2869        blurLayer.style.setProperty('-webkit-backdrop-filter', 'blur(' + blur + ')', 'important');
2870      }
2871      if (alwaysTransparent) {
2872        nav.style.setProperty('background-color', 'transparent', 'important');
2873        return;
2874      }
2875      var color = nav.getAttribute('data-persist-nav-scroll-bg');
2876      if (!color || nav.__hpNavScrollWired) return;
2877      nav.__hpNavScrollWired = true;
2878      function sync() {
2879        nav.style.setProperty('background-color', window.scrollY > 24 ? color : 'transparent', 'important');
2880      }
2881      window.addEventListener('scroll', sync, { passive: true });
2882      sync();
2883    })(navs[i]);
2884  }
2885}
2886
2887function boot() {
2888  wireSubmenus();
2889  wireMobileMenu();
2890  wireScrollBackground();
2891}
2892
2893if (document.readyState === "loading") {
2894  document.addEventListener("DOMContentLoaded", boot);
2895} else {
2896  boot();
2897}
2898
2899})();
2900</script>
2900<script data-htmlpub-dtr>
2901(function(){
2902if(false)return;
2903var params=new URLSearchParams(location.search);
2904if(!params.toString())return;
2905function run(){
2906var MAX=500;
2907var replacements=[];
2908function strip(s){return s.replace(/<[^>]*>/g,"");}
2909function clean(s){try{s=decodeURIComponent(s);}catch(e){}s=strip(s);if(s.length>MAX)s=s.slice(0,MAX);return s;}
2910function replace(el,val,param){
2911if(!el||!val)return;
2912var orig=el.textContent||"";
2913var cleaned=clean(val);
2914if(cleaned===orig)return;
2915el.setAttribute("data-dtr-original",orig);
2916el.textContent=cleaned;
2917replacements.push({param:param,target:el.tagName.toLowerCase()+(el.id?"#"+el.id:""),original:orig,replacement:cleaned});
2918}
2919// 1. Explicit data-dtr attributes
2920var dtrMap={headline:"utm_headline",subheadline:"utm_subheadline",cta:"utm_cta"};
2921var explicitFound={};
2922for(var key in dtrMap){
2923var pv=params.get(dtrMap[key]);
2924if(pv){
2925var els=document.querySelectorAll('[data-dtr="'+key+'"]');
2926if(els.length>0){
2927explicitFound[key]=true;
2928for(var i=0;i<els.length;i++)replace(els[i],pv,dtrMap[key]);
2929}
2930}
2931}
2932// 2. Custom data-dtr-param attributes
2933var customEls=document.querySelectorAll("[data-dtr-param]");
2934for(var j=0;j<customEls.length;j++){
2935var pn=customEls[j].getAttribute("data-dtr-param");
2936if(pn){var cv=params.get(pn);if(cv)replace(customEls[j],cv,pn);}
2937}
2938// 3. Auto-detect fallback for standard params (only if no explicit match)
2939if(!explicitFound.headline){
2940var hv=params.get("utm_headline");
2941if(hv){var h1=document.querySelector("h1");if(h1)replace(h1,hv,"utm_headline");}
2942}
2943if(!explicitFound.subheadline){
2944var sv=params.get("utm_subheadline");
2945if(sv){var sub=document.querySelector("h2")||document.querySelector(".subtitle")||document.querySelector(".subheadline");if(sub)replace(sub,sv,"utm_subheadline");}
2946}
2947if(!explicitFound.cta){
2948var cv2=params.get("utm_cta");
2949if(cv2){var btn=document.querySelector('a.cta,button.cta,a[class*="cta"],button[class*="cta"]')||document.querySelector("a.btn,button.btn,a.button,button[type=submit]")||document.querySelector('a[href]:not([href^="#"]):not([href^="mailto"]):not([href^="tel"])>span,a[href]:not([href^="#"]):not([href^="mailto"]):not([href^="tel"])')||document.querySelector("button");if(btn)replace(btn,cv2,"utm_cta");}
2950}
2951// 4. Generic dtr_* prefix params
2952params.forEach(function(val,key){
2953if(key.indexOf("dtr_")===0){
2954var slug=key.slice(4);
2955var targets=document.querySelectorAll('[data-dtr-param="'+key+'"]');
2956if(targets.length>0){for(var k=0;k<targets.length;k++)replace(targets[k],val,key);}
2957}
2958});
2959// Fire analytics event
2960if(replacements.length===0)return;
2961var PID="bthr9fgjr4tunfrsf2zhq0ba";
2962var API="https://htmlpub.com"+"/api/analytics/collect";
2963function vid(){try{return localStorage.getItem("_hp_vid")||""}catch(e){return""}}
2964function sid(){try{return sessionStorage.getItem("_hp_sid")||""}catch(e){return""}}
2965var ev={pageId:PID,eventType:"dtr_applied",visitorId:vid(),sessionId:sid(),payload:{replacements:replacements},timestamp:Date.now()};
2966var body=JSON.stringify({events:[ev]});
2967try{if(navigator.sendBeacon){navigator.sendBeacon(API,new Blob([body],{type:"text/plain"}));}
2968else{fetch(API,{method:"POST",headers:{"Content-Type":"application/json"},body:body,keepalive:true}).catch(function(){});}}catch(e){}
2969}
2970if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",run);}else{run();}
2971})();
2972</script>
2972<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a44560d508bff60a',t:'MTc5MDk2MTYzMQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
2972</body></html><!-- v5.1.13 -->

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.