<!DOCTYPE html><html lang="en" style=""><head><meta name="description" content="View this page published on www.sukiebaxter.com">
<meta property="og:title" content="Sukie Baxter — Writer &amp; Somatic Educator">
<meta property="og:description" content="View this page published on www.sukiebaxter.com">
<meta property="og:image" content="https://htmlpub.com/api/og/screenshot?slug=6lZ-H2eoaq">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:url" content="https://www.sukiebaxter.com/?feed=rss2">
<meta name="twitter:url" content="https://www.sukiebaxter.com/?feed=rss2">
<meta property="og:type" content="website">
<meta property="og:site_name" content="www.sukiebaxter.com">
<meta property="og:locale" content="en_US">
<meta property="fb:app_id" content="4198265810445529">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Sukie Baxter — Writer &amp; Somatic Educator">
<meta name="twitter:description" content="View this page published on www.sukiebaxter.com">
<meta name="twitter:image" content="https://htmlpub.com/api/og/screenshot?slug=6lZ-H2eoaq">
<meta name="twitter:image:width" content="1200">
<meta name="twitter:image:height" content="630">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://www.sukiebaxter.com/?feed=rss2">
<title>Sukie Baxter — Writer &amp; Somatic Educator</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;1,400;1,500&amp;family=Source+Sans+3:wght@300;400;500&amp;display=swap" rel="stylesheet">

<style id="htmlpub-breakpoint-visibility">@media (max-width: 767px) { .hp-hide-mobile { display: none !important; } }
@media (min-width: 768px) and (max-width: 1199px) { .hp-hide-tablet { display: none !important; } }
@media (min-width: 1200px) { .hp-hide-desktop { display: none !important; } }</style><style>
@import url('https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;1,400;1,500&family=Fira+Sans:wght@300;400;500&display=swap');
:root {
  --cream: #eae7df;
  --cream-dark: #d8d4ca;
  --teal: #1f2e38;
  --teal-light: #2d4254;
  --red: #7b2d26;
  --red-light: #9a3a32;
  --ink: #1c1c1c;
  --ink-soft: #3a3530;
  --muted: #7a736b;
  --rule: #d8d2c8;
  --heading: 'Lora', Georgia, serif;
  --body: 'Fira Sans', sans-serif;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 16px; scroll-behavior: smooth; }
body { background: var(--cream); color: var(--ink-soft); font-family: var(--body); font-weight: 400; line-height: 1.7; -webkit-font-smoothing: antialiased; }

nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: rgba(247,243,236,0.92); backdrop-filter: blur(12px); border-bottom: 1px solid var(--rule); padding: 0 clamp(1.5rem,5vw,4rem); }
.nav-inner { max-width: 1100px; margin: 0 auto; display: flex; align-items: center; justify-content: space-between; height: 64px; }
.nav-logo { font-family: var(--heading); font-size: 1rem; font-weight: 500; color: var(--ink); letter-spacing: .01em; text-decoration: none; }
.nav-links { display: flex; gap: 2.5rem; list-style: none; }
.nav-links a { font-family: var(--body); font-size: .875rem; font-weight: 500; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); text-decoration: none; transition: color .2s; }
.nav-links a:hover { color: var(--teal); }
.nav-cta { font-family: var(--body); font-size: .875rem; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--cream); background: var(--teal); padding: .6rem 1.4rem; border-radius: 2px; text-decoration: none; transition: background .2s; }
.nav-cta:hover { background: var(--teal-light); }
.hamburger { display: none; cursor: pointer; border: none; background: none; padding: .5rem; flex-direction: column; gap: 5px; }
.hamburger span { display: block; width: 24px; height: 2px; background: var(--ink); border-radius: 2px; transition: all .3s; }
.mobile-nav { display: none; position: fixed; top: 64px; left: 0; right: 0; background: var(--cream); border-bottom: 1px solid var(--rule); padding: 1.5rem clamp(1.5rem,5vw,4rem); z-index: 99; }
.mobile-nav.open { display: block; }
.mobile-nav ul { list-style: none; display: flex; flex-direction: column; gap: 1.25rem; }
.mobile-nav a { font-family: var(--body); font-size: 1rem; font-weight: 500; color: var(--ink-soft); text-decoration: none; }
.mobile-nav .mnav-cta { display: inline-block; margin-top: .5rem; font-family: var(--body); font-size: .875rem; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--cream); background: var(--teal); padding: .6rem 1.4rem; border-radius: 2px; text-decoration: none; }

.hero { min-height: 100svh; display: flex; align-items: center; padding: clamp(5rem,8vw,8rem) clamp(1.5rem,5vw,4rem) clamp(4rem,6vw,6rem); position: relative; overflow: hidden; background: var(--cream); }
.hero::before { content: ''; position: absolute; inset: 0; z-index: 0; background: radial-gradient(ellipse 60% 50% at 80% 30%, rgba(29,74,71,.06) 0%, transparent 70%), radial-gradient(ellipse 40% 60% at 15% 70%, rgba(184,76,58,.04) 0%, transparent 60%); }
.hero-grain { position: absolute; inset: 0; z-index: 0; opacity: .3; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.4'/%3E%3C/svg%3E"); background-size: 180px 180px; }
.hero-inner { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; width: 100%; }
.hero-eyebrow { font-family: var(--body); font-size: .75rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--red); margin-bottom: 2rem; opacity: 0; animation: fadeUp .8s cubic-bezier(.16,1,.3,1) .1s forwards; }
.hero h1 { font-family: var(--heading); font-size: clamp(3rem,7vw,6.5rem); font-weight: 400; line-height: 1.06; letter-spacing: -.025em; color: var(--ink); margin-bottom: 2rem; opacity: 0; animation: fadeUp .9s cubic-bezier(.16,1,.3,1) .25s forwards; width: max-content; max-width: 100%; }
.hero h1 em { font-style: italic; color: var(--teal); }
.hero-sub { font-family: var(--body); font-size: clamp(1rem,1.5vw,1.2rem); font-weight: 400; line-height: 1.6; color: var(--ink-soft); max-width: 52ch; margin-bottom: 3rem; opacity: 0; animation: fadeUp .9s cubic-bezier(.16,1,.3,1) .4s forwards; }
.hero-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 2rem; opacity: 0; animation: fadeUp .9s cubic-bezier(.16,1,.3,1) .55s forwards; }
.btn-primary { display: inline-block; font-family: var(--body); font-size: .9rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; text-decoration: none; color: var(--cream); background: var(--teal); padding: 1rem 2.2rem; border-radius: 2px; transition: background .25s, transform .2s; box-shadow: 0 2px 12px rgba(29,74,71,.18); }
.btn-primary:hover { background: var(--teal-light); transform: translateY(-1px); }
.btn-secondary { font-family: var(--body); font-size: .9rem; font-weight: 500; color: var(--teal); text-decoration: none; border-bottom: 1px solid var(--teal); padding-bottom: 2px; transition: color .2s, border-color .2s; }
.btn-secondary:hover { color: var(--red); border-color: var(--red); }
.hero-rule { position: absolute; bottom: 0; left: clamp(1.5rem,5vw,4rem); right: clamp(1.5rem,5vw,4rem); height: 1px; background: var(--rule); }

.sec { padding: clamp(5rem,10vw,9rem) clamp(1.5rem,5vw,4rem); }
.sec-inner { max-width: 1100px; margin: 0 auto; }
.sec-label { font-family: var(--body); font-size: .7rem; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); margin-bottom: 3rem; }

.opening-bg { background: var(--cream); }
.opening-grid { display: grid; grid-template-columns: 1fr 2fr; gap: clamp(3rem,6vw,7rem); align-items: start; }
.opening-aside { padding-top: .4rem; }
.opening-rule { width: 40px; height: 3px; background: var(--red); margin-bottom: 1.5rem; }
.opening-aside p { font-family: var(--body); font-size: .85rem; font-weight: 400; line-height: 1.65; color: var(--muted); max-width: 22ch; }
.essay-text p { font-family: var(--body); font-size: clamp(1.05rem,1.4vw,1.2rem); font-weight: 400; line-height: 1.8; color: var(--ink-soft); max-width: 62ch; margin-bottom: 1.5rem; }
.essay-text p:last-child { margin-bottom: 0; }
.essay-text strong { font-weight: 500; color: var(--ink); }

.work-bg { background: var(--teal); }
.work-bg .sec-label { color: rgba(247,243,236,.5); }
.work-grid { display: grid; grid-template-columns: 2fr 1fr; gap: clamp(3rem,6vw,7rem); align-items: start; }
.work-text h2 { font-family: var(--heading); font-size: clamp(2rem,4vw,3.5rem); font-weight: 400; line-height: 1.12; letter-spacing: -.02em; color: var(--cream); margin-bottom: 2.5rem; max-width: 20ch; }
.work-text h2 em { font-style: italic; color: rgba(247,243,236,.65); }
.work-text p { font-family: var(--body); font-size: clamp(1rem,1.3vw,1.1rem); font-weight: 400; line-height: 1.8; color: rgba(247,243,236,.82); max-width: 58ch; margin-bottom: 1.5rem; }
.work-text p:last-child { margin-bottom: 0; }
.work-aside { padding-top: 5rem; }
.work-pullquote { border-left: 3px solid var(--red); padding-left: 1.5rem; }
.work-pullquote p { font-family: var(--heading); font-size: clamp(1.15rem,1.8vw,1.4rem); font-style: italic; font-weight: 400; line-height: 1.5; color: rgba(247,243,236,.7); }

.find-bg { background: var(--cream-dark); }
.find-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: clamp(2rem,4vw,5rem); margin-top: 1rem; }
.find-item { padding: 2.5rem 0 0; border-top: 2px solid var(--teal); transition: border-color .2s; }
.find-item:hover { border-top-color: var(--red); }
.find-item-tag { font-family: var(--body); font-size: .7rem; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); margin-bottom: .75rem; }
.find-item h3 { font-family: var(--heading); font-size: clamp(1.4rem,2.2vw,2rem); font-weight: 500; line-height: 1.2; letter-spacing: -.01em; color: var(--ink); margin-bottom: 1rem; }
.find-item p { font-family: var(--body); font-size: .95rem; font-weight: 400; line-height: 1.7; color: var(--ink-soft); margin-bottom: 1.5rem; }
.find-link { font-family: var(--body); font-size: .82rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--teal); text-decoration: none; display: inline-flex; align-items: center; gap: .5rem; transition: color .2s; }
.find-link:hover { color: var(--red); }
.find-link svg { transition: transform .2s; }
.find-link:hover svg { transform: translateX(3px); }

.about-bg { background: var(--cream); }
.about-grid { display: grid; grid-template-columns: 1fr 2fr; gap: clamp(3rem,6vw,7rem); align-items: start; }
.about-monogram { width: 72px; height: 72px; background: var(--teal); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-bottom: 2rem; }
.about-monogram span { font-family: var(--heading); font-size: 1.6rem; font-weight: 500; color: var(--cream); letter-spacing: -.02em; }
.about-left h2 { font-family: var(--heading); font-size: clamp(1.8rem,3vw,2.6rem); font-weight: 400; line-height: 1.15; letter-spacing: -.02em; color: var(--ink); }
.about-left h2 em { font-style: italic; color: var(--teal); }
.about-text p { font-family: var(--body); font-size: clamp(1rem,1.3vw,1.1rem); font-weight: 400; line-height: 1.8; color: var(--ink-soft); max-width: 60ch; margin-bottom: 1.4rem; }
.about-text p:last-child { margin-bottom: 0; }
.about-creds { margin-top: 2.5rem; padding-top: 2rem; border-top: 1px solid var(--rule); display: flex; gap: 2.5rem; flex-wrap: wrap; }
.cred-num { font-family: var(--heading); font-size: 2rem; font-weight: 400; color: var(--teal); line-height: 1; display: block; }
.cred-label { font-family: var(--body); font-size: .8rem; font-weight: 500; letter-spacing: .05em; color: var(--muted); text-transform: uppercase; display: block; }

.newsletter-bg { background: var(--teal); padding: clamp(5rem,10vw,9rem) clamp(1.5rem,5vw,4rem); }
.newsletter-inner { max-width: 1100px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: clamp(3rem,6vw,6rem); align-items: center; }
.newsletter-copy h2 { font-family: var(--heading); font-size: clamp(1.8rem,3.5vw,3rem); font-weight: 400; line-height: 1.15; letter-spacing: -.02em; color: var(--cream); margin-bottom: 1.25rem; }
.newsletter-copy h2 em { font-style: italic; color: rgba(247,243,236,.6); }
.newsletter-copy p { font-family: var(--body); font-size: clamp(.95rem,1.2vw,1.05rem); line-height: 1.75; color: rgba(247,243,236,.75); max-width: 44ch; }
.nl-label { font-family: var(--body); font-size: .7rem; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: rgba(247,243,236,.5); margin-bottom: .75rem; display: block; }
.nl-row { display: flex; }
.nl-input { flex: 1; font-family: var(--body); font-size: .95rem; color: var(--ink); background: var(--cream); border: none; padding: .9rem 1.2rem; border-radius: 2px 0 0 2px; outline: none; transition: box-shadow .2s; box-sizing: border-box; }
.nl-input::placeholder { color: var(--muted); }
.nl-input:focus { box-shadow: inset 0 0 0 2px var(--red); }
.nl-btn { font-family: var(--body); font-size: .82rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--cream); background: var(--red); border: 1.5px solid var(--red); border-left: none; padding: .9rem 1.5rem; border-radius: 0 2px 2px 0; cursor: pointer; transition: background .2s; white-space: nowrap; box-sizing: border-box; }
.nl-btn:hover { background: var(--red-light); }
.nl-note { font-family: var(--body); font-size: .8rem; color: rgba(247,243,236,.4); line-height: 1.5; margin-top: .75rem; }

footer { background: var(--ink); color: rgba(247,243,236,.5); padding: 3rem clamp(1.5rem,5vw,4rem); }
.footer-inner { max-width: 1100px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 2rem; }
.footer-logo { font-family: var(--heading); font-size: .95rem; font-weight: 500; color: rgba(247,243,236,.7); text-decoration: none; }
.footer-links { display: flex; gap: 2rem; list-style: none; }
.footer-links a { font-family: var(--body); font-size: .8rem; color: rgba(247,243,236,.4); text-decoration: none; transition: color .2s; }
.footer-links a:hover { color: rgba(247,243,236,.8); }
.footer-social { display: flex; gap: 1.25rem; align-items: center; }
.footer-social a { color: rgba(247,243,236,.35); display: flex; align-items: center; transition: color .2s; }
.footer-social a:hover { color: rgba(247,243,236,.8); }

.reveal { opacity: 0; transform: translateY(24px); transition: opacity .8s cubic-bezier(.16,1,.3,1), transform .8s cubic-bezier(.16,1,.3,1); }
.reveal.visible { opacity: 1; transform: translateY(0); }
.reveal-d1 { transition-delay: .1s; }
.reveal-d2 { transition-delay: .2s; }
.reveal-d3 { transition-delay: .3s; }

@keyframes fadeUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }

@media (max-width: 900px) {
  .opening-grid { grid-template-columns: 1fr; }
  .opening-aside { display: none; }
  .work-grid { grid-template-columns: 1fr; }
  .work-aside { display: none; }
  .find-grid { grid-template-columns: 1fr; }
  .about-grid { grid-template-columns: 1fr; }
  .newsletter-inner { grid-template-columns: 1fr; }
}
@media (max-width: 767px) {
  .nav-links, .nav-cta { display: none; }
  .hamburger { display: flex; }
  .footer-inner { flex-direction: column; align-items: flex-start; gap: 1.5rem; }
}
@media (prefers-reduced-motion: reduce) {
  .hero h1, .hero-eyebrow, .hero-sub, .hero-actions { animation: none; opacity: 1; }
  .reveal { opacity: 1; transform: none; transition: none; }
}

.hero-desc { max-width: 480px; margin-bottom: 0; padding-top: 0.25rem; }
.hero-desc-rule { width: 36px; height: 2px; background: var(--red); margin-bottom: 1.25rem; }
.hero-desc-text { font-family: var(--body); font-size: clamp(1rem, 1.4vw, 1.1rem); font-weight: 400; line-height: 1.75; color: var(--ink-soft); }

.hero-inner { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(3rem,6vw,7rem); align-items: center; width: 100%; max-width: 1100px; }
.hero-photo-col { position: relative; }
.hero-photo { width: 100%; height: clamp(480px,70vh,760px); object-fit: cover; object-position: center top; display: block; }
.hero-text-col { display: flex; flex-direction: column; gap: 0; }
.hero-text-col h1 { font-family: var(--heading); font-size: clamp(2rem,3.5vw,3.2rem); font-weight: 400; line-height: 1.1; letter-spacing: -.02em; color: var(--teal); margin-bottom: 1.5rem; }
.hero-text-col h1 em { font-style: italic; color: var(--ink-soft); }
.hero-form-label { font-family: var(--body); font-size: .7rem; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); margin-bottom: 1rem; display: block; }
.hero-nl-input { border: 1.5px solid var(--red); border-right: none; background: var(--cream); }
.hero-nl-input:focus { border-color: var(--red); outline: none; box-shadow: none; }
@media (max-width: 900px) {
  .hero-inner { grid-template-columns: 1fr; }
  .hero-photo { height: 360px; object-position: center 20%; }
  .hero-photo-col { order: 2; }
  .hero-text-col { order: 1; }
}
</style></head>
<body style="" class="">
<nav style="">
  <div class="nav-inner" style="">
    <a href="/" class="nav-logo" style=""><b style=""><span style="font-weight: normal;">SUKIE BAXTER</span></b></a>
    <ul class="nav-links" style="">
      <li style="" class=""><a href="https://sukie-baxter.lpcontent.net/8jb8FCqXzT?v=1779318768914" style="" rel="noopener noreferrer">ABOUT</a></li>
      <li style=""><a href="https://sukiebaxter.substack.com/" style="" rel="noopener noreferrer">Essays</a></li>
      <li style=""><a href="https://sukie-baxter.lpcontent.net/OGG_1bw8PA" style="" rel="noopener noreferrer">TONIC</a></li>
    </ul>
    
    <button class="hamburger" id="nav-hamburger" aria-label="Open menu">
      <span></span><span></span><span></span>
    </button>
  </div>
</nav>

<div class="mobile-nav" id="mobile-nav">
  <ul>
    <li><a href="#the-work">The Work</a></li>
    <li><a href="#essays">Essays</a></li>
    <li><a href="#about">About</a></li>
    <li><a href="#tonic" class="mnav-cta">Learn about Tonic</a></li>
  </ul>
</div>

<section class="hero">
  <div class="hero-grain" style=""></div>
  <div class="hero-inner" style="">
  <div class="hero-photo-col" style="min-height: 500px; overflow: hidden;">
    <img src="/api/pages/6lZ-H2eoaq/assets/et7j9y10bz5t2n60etsv8wt5" alt="Sukie Baxter" class="hero-photo" style="width: 100%; height: 100%; min-height: 500px; object-fit: cover; object-position: center 15%; display: block;">
  </div>
  <div class="hero-text-col" style="">
    
    <h1 style="width: auto; max-width: 100%; color: var(--teal);">You haven't lost your way.&nbsp;<em style="">You've lost yourself.</em></h1>
    <label class="nl-label hero-form-label" for="nl-email-hero" style="color: var(--red); margin-bottom: 1rem;">Subscribe to The Reboot</label>
    <div class="hero-desc" style="">
      <div class="hero-desc-rule"></div>
      <p class="hero-desc-text" style="">Weekly-ish essays on coming home to yourself without burning your life down to do it. <br><br><b>Join 16,794  humans</b> <b>feeling alive again, one moment at a time.</b></p>
    </div>
    <form name="newsletter-signup" data-success-message="You're in. The next essay lands in your inbox soon." style="margin-top: 1.5rem;">
      <div class="nl-row" style="align-items: stretch;">
        <input class="nl-input hero-nl-input" type="email" id="nl-email-hero" name="email" placeholder="your@email.com" required="" style="">
        <button class="nl-btn" type="submit" style="">Subscribe</button>
      </div>
      <p class="nl-note" style="color: rgb(122, 115, 107); font-weight: 300;">Zero spam. Unsubscribe at any time. I won't take it personally.</p>
    </form>
  </div>
</div>
  <div class="hero-rule" style=""></div>
</section>











<footer style="">
  <div class="footer-inner" style="">
    <a href="/" class="footer-logo" style="">SUKIE BAXTER</a>
    <ul class="footer-links" style="">
      <li><a href="#" style="">Privacy</a></li>
      <li><a href="#" style="">Terms</a></li>
      <li><a href="#">Disclaimer</a></li>
    </ul>
    <div class="footer-social">
      <a href="https://www.youtube.com/sukiebaxter" aria-label="YouTube"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.95-1.96C18.88 4 12 4 12 4s-6.88 0-8.59.46a2.78 2.78 0 0 0-1.95 1.96A29 29 0 0 0 1 12a29 29 0 0 0 .46 5.58A2.78 2.78 0 0 0 3.41 19.54C5.12 20 12 20 12 20s6.88 0 8.59-.46a2.78 2.78 0 0 0 1.95-1.96A29 29 0 0 0 23 12a29 29 0 0 0-.46-5.58z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><polygon points="9.75 15.02 15.5 12 9.75 8.98 9.75 15.02" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></polygon></svg></a>
      <a href="https://sukiebaxter.substack.com/" aria-label="Substack"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" style=""><path d="M22 5H2v3.5h20V5zM2 11.5V22l10-5.5 10 5.5V11.5H2z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style=""></path></svg></a>
      
    </div>
  </div>
</footer>

<script>
(function(){
  var btn = document.getElementById('nav-hamburger');
  var menu = document.getElementById('mobile-nav');
  if(btn && menu){
    btn.addEventListener('click', function(){ menu.classList.toggle('open'); });
  }
  var obs = new IntersectionObserver(function(entries){
    entries.forEach(function(e){
      if(e.isIntersecting){ e.target.classList.add('visible'); obs.unobserve(e.target); }
    });
  }, { threshold: 0.1 });
  document.querySelectorAll('.reveal').forEach(function(el){ obs.observe(el); });
})();
</script>
<script data-htmlpub-analytics>
(function(){
var PID="hkqp68gnhsow4z4gvc31azx8";
var EXP_ID="";
var EXP_VARIANT="";
var API="/collect";
var APP_ORIGIN="https://htmlpub.com";
var FLUSH_INTERVAL=5000;
var FLUSH_MAX=20;

function 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)});}
function 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();}}

var visitorId=getOrSet(localStorage,"_hp_vid");
var sessionId=getOrSet(sessionStorage,"_hp_sid");

var params=new URLSearchParams(location.search);
var utmSource=params.get("utm_source")||undefined;
var utmMedium=params.get("utm_medium")||undefined;
var utmCampaign=params.get("utm_campaign")||undefined;

var vw=window.innerWidth||0;
var vh=window.innerHeight||0;
var ua=navigator.userAgent||"";
var isMobileUA=/Android|iPhone|iPod|iPad|webOS|BlackBerry|IEMobile|Opera Mini/i.test(ua);
var maxScreenDim=Math.max(screen.width||0,screen.height||0);
var deviceType=isMobileUA?(maxScreenDim<=812||vw<768?"mobile":"tablet"):"desktop";

function detectBrowser(){
if(ua.indexOf("Edg/")>-1)return"Edge";
if(ua.indexOf("Chrome/")>-1)return"Chrome";
if(ua.indexOf("Safari/")>-1&&ua.indexOf("Chrome/")===-1)return"Safari";
if(ua.indexOf("Firefox/")>-1)return"Firefox";
return"Other";
}
function detectOS(){
if(ua.indexOf("iPhone")>-1||ua.indexOf("iPad")>-1)return"iOS";
if(ua.indexOf("Android")>-1)return"Android";
if(ua.indexOf("Mac OS")>-1)return"macOS";
if(ua.indexOf("Windows")>-1)return"Windows";
if(ua.indexOf("Linux")>-1)return"Linux";
return"Other";
}
var browserFamily=detectBrowser();
var osFamily=detectOS();

var buffer=[];
function makeEvent(type,payload){
return{pageId:PID,eventType:type,visitorId:visitorId,sessionId:sessionId,payload:payload||undefined,referrer:document.referrer||undefined,utmSource:utmSource,utmMedium:utmMedium,utmCampaign:utmCampaign,deviceType:deviceType,browserFamily:browserFamily,osFamily:osFamily,viewportWidth:vw,viewportHeight:vh,experimentId:EXP_ID||undefined,experimentVariant:EXP_VARIANT||undefined,timestamp:Date.now()};
}
function pushEvent(type,payload){buffer.push(makeEvent(type,payload));if(buffer.length>=FLUSH_MAX)flush();}

// HP-1557 — expose a single-arg helper so the popups runtime (separate IIFE,
// no shared closure with analytics) can feed events into the same buffer.
// Defensive: only set if not already defined so a future second analytics
// injection doesn't clobber an in-flight handler.
if(!window.__hpupPushEvent){window.__hpupPushEvent=function(t,p){try{pushEvent(t,p);}catch(e){}};}

function readMmuid(){try{var v=localStorage.getItem("mmuid");return v&&v.length<=128?v:undefined;}catch(e){return undefined;}}

function flush(){
if(buffer.length===0)return;
var batch=buffer.splice(0,FLUSH_MAX);
var payload={events:batch};
var mmuid=readMmuid();
if(mmuid)payload.mmuid=mmuid;
try{navigator.sendBeacon(API,JSON.stringify(payload));}catch(e){}
}

setInterval(flush,FLUSH_INTERVAL);
document.addEventListener("visibilitychange",function(){if(document.visibilityState==="hidden")flush();});
window.addEventListener("pagehide",flush);

pushEvent("page_view");

// On-platform conversion goal ("a thank-you page I own"): report the visitor's
// experiment assignments (_hp_exp_<id> cookies) so the server can count this
// page-view as a conversion if an experiment's goal targets this page. Fires
// once per session per page, only when the visitor is in an experiment.
(function(){
try{
if(!APP_ORIGIN)return;
var guard="_hp_goal:"+PID;
if(sessionStorage.getItem(guard))return;
var exps=[];var ck=document.cookie.split(";");
for(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())});}}
if(exps.length===0)return;
sessionStorage.setItem(guard,"1");
var body=JSON.stringify({pageId:PID,visitorId:visitorId,sessionId:sessionId,experiments:exps});
var url=APP_ORIGIN+"/api/experiments/onsite-conversion";
if(navigator.sendBeacon){navigator.sendBeacon(url,new Blob([body],{type:"text/plain"}));}
else{fetch(url,{method:"POST",headers:{"Content-Type":"application/json"},body:body,keepalive:true}).catch(function(){});}
}catch(e){}
})();

var scrollMilestones={25:false,50:false,75:false,100:false};
function checkScroll(){
var docH=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
var scrollY=window.scrollY||window.pageYOffset;
var winH=window.innerHeight;
if(docH<=winH){if(!scrollMilestones[100]){scrollMilestones[100]=true;pushEvent("scroll_depth",{depth:100});}return;}
var pct=Math.round(((scrollY+winH)/docH)*100);
[25,50,75,100].forEach(function(m){if(pct>=m&&!scrollMilestones[m]){scrollMilestones[m]=true;pushEvent("scroll_depth",{depth:m});}});
}
window.addEventListener("scroll",checkScroll,{passive:true});
setTimeout(checkScroll,1000);

// HP-1557 — when a click/submit happens inside a [data-htmlpub-popup], add
// the popup's id + name to the payload. Customers track conversions on the
// standard form_submit / element_click types; this is just attribution
// metadata so the analytics surface can say "this conversion came from the
// Welcome offer pop-up".
function popupAttribution(node){
var p=node&&node.closest&&node.closest("[data-htmlpub-popup]");
if(!p)return null;
return{popupId:p.getAttribute("id")||"",popupName:(p.getAttribute("data-htmlpub-popup-name")||"").replace(/^\s+|\s+$/g,"")};
}

document.addEventListener("click",function(e){
var el=e.target;
if(!el||!el.tagName)return;
var tag=el.tagName.toLowerCase();
if(!(tag==="a"||tag==="button"||tag==="input"||tag==="select"||tag==="textarea"||el.getAttribute("role")==="button"||el.closest("a,button,[role=button]")))return;
var docH=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,1);
var rect=el.getBoundingClientRect();
var 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};
// HP-1557 — only attribute element_click to a pop-up when the actual
// click target is a button-shaped CTA. A click on the email input
// inside a lead-capture popup would otherwise inflate the popup's
// "Button clicks" count on the dashboard.
var isCtaClick=(tag==="a"||tag==="button"||el.getAttribute("role")==="button"||(el.closest&&el.closest("a,button,[role=button]")));
if(isCtaClick){var pa=popupAttribution(el);if(pa){payload.popupId=pa.popupId;payload.popupName=pa.popupName;}}
pushEvent("element_click",payload);
},true);

document.addEventListener("submit",function(e){
var f=e.target;
if(!f||f.tagName!=="FORM")return;
var payload={formIdentifier:f.id||f.getAttribute("name")||"form-"+([].indexOf.call(document.forms,f))};
var pa=popupAttribution(f);
if(pa){payload.popupId=pa.popupId;payload.popupName=pa.popupName;}
pushEvent("form_submit",payload);
flush();// send now — a thank-you-page redirect may navigate away before the 5s timer, dropping the experiment conversion
},true);

window.addEventListener("load",function(){
setTimeout(function(){
try{
var perf=performance.getEntriesByType("navigation")[0];
if(perf){
var ev=makeEvent("rum_timing",{loadTimeMs:Math.round(perf.loadEventEnd-perf.startTime),ttfbMs:Math.round(perf.responseStart-perf.startTime),fcpMs:undefined});
var paintEntries=performance.getEntriesByType("paint");
for(var i=0;i<paintEntries.length;i++){if(paintEntries[i].name==="first-contentful-paint"){ev.payload.fcpMs=Math.round(paintEntries[i].startTime);break;}}
buffer.push(ev);
}
}catch(e){}
},2000);
});
})();
</script><script data-page-id="hkqp68gnhsow4z4gvc31azx8" data-page-slug="6lZ-H2eoaq" data-api-url="https://htmlpub.com" data-htmlpub-forms>
(function(){
var s=document.querySelector("script[data-htmlpub-forms]");
var pageId=s.getAttribute("data-page-id");
var slug=s.getAttribute("data-page-slug");
var api=s.getAttribute("data-api-url")+"/api/forms/submit";
// Owner-mode: editor previews and the in-app shell load this script with
// data-owner="1". We still listen for submits (the editor surfaces success
// state to the user via the toolbar), but we MUST NOT fire conversion
// pixels — that would pollute the customer's Meta / TikTok pixel data
// with editor test traffic indistinguishable from real visitors.
var _hpIsOwner=s.getAttribute("data-owner")==="1";
var corrId=0;
var pendingCallbacks={};

// Detect if we're in a sandboxed iframe
var inSandbox=false;
try{inSandbox=window!==window.parent;}catch(e){inSandbox=true;}

function cleanKey(s){return s.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_|_$/g,"").substring(0,30);}
// SYNC: mirror worker-pages/src/scripts/forms.ts and app/src/lib/extract-form-fields.ts
function 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);}
function fieldKey(el,idx){
if(el.name&&!looksLikeRawId(el.name))return el.name;
if(el.id&&!looksLikeRawId(el.id))return el.id;
var df=el.getAttribute("data-field")||el.getAttribute("data-name");
if(df&&!looksLikeRawId(df))return df;
// Type-based semantic hint. <input type="email"> without an explicit name
// should still be identified as "email" so the lead-capture extractor can
// find the address. Same for tel/url. Critical when the page builder
// (HTMLPub editor / Sacca's offers.leadpages.com pages) emits inputs
// without name attributes — without this, the email field gets keyed off
// its placeholder ("alex_at_youragency_com") and no lead is extracted.
if(el.type==="email")return "email";
if(el.type==="tel")return "phone";
if(el.type==="url")return "url";
// Sibling label pattern: <label>Foo</label><input ...> inside a wrapper.
// Common in modern form layouts. The existing closest(label) check below
// only catches WRAPPING labels, not sibling ones.
var prev=el.previousElementSibling;
if(prev&&prev.tagName==="LABEL"&&prev.textContent){var pk=cleanKey(prev.textContent);if(pk)return pk;}
if(el.placeholder){var ck=cleanKey(el.placeholder);if(ck)return ck;}
var al=el.getAttribute("aria-label");
if(al){var ck2=cleanKey(al);if(ck2)return ck2;}
if(el.id){var lbl=document.querySelector('label[for="'+el.id+'"]');if(lbl&&lbl.textContent){var ck3=cleanKey(lbl.textContent);if(ck3)return ck3;}}
var par=el.closest?el.closest("label"):null;
if(par&&par.textContent){var ck4=cleanKey(par.textContent);if(ck4)return ck4;}
return (el.type||"field")+"_"+idx;
}
// Known third-party tracking field patterns to ignore
var _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)$/i;
function _isInjected(el){
// Skip hidden inputs not present in the original page HTML.
// Third-party scripts (Customers.ai, HubSpot, etc.) inject hidden fields
// at runtime. We detect these by checking if they were present at DOMContentLoaded.
if(el.type==="hidden"&&!el.hasAttribute("data-hp-original"))return true;
return false;
}
function collect(f){
var d={};
var els=f.elements||f.querySelectorAll("input,textarea,select");
var used={};
var hasVisibleValue=false;
for(var i=0;i<els.length;i++){
var el=els[i];
if(el.type==="file"||el.type==="submit"||el.type==="button")continue;
if((el.type==="checkbox"||el.type==="radio")&&!el.checked)continue;
if(_isInjected(el))continue;
var key=fieldKey(el,i);
if(_blocklist.test(key))continue;
if(used[key]){key=key+"_"+i;}
used[key]=true;
d[key]=el.value;
if(el.type!=="hidden"&&el.value&&el.value.trim())hasVisibleValue=true;
}
// Require at least one visible field with a value — pure hidden-field submissions are noise
if(!hasVisibleValue)return {};
return d;
}

// Generate a UUID v4 (browser-side). Used as the eventID that ties the
// fbq/ttq browser event to the matching CAPI event the server sends via
// the integration queue → provider workflow, so pixel platforms can dedup.
function _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);});}

// Fire the canonical "Lead" event on every installed pixel platform. Only
// platforms that booted (window.fbq, window.ttq, window.gtag, window.dataLayer)
// receive a call — others no-op cleanly. The eventID is threaded into the
// provider-specific dedup parameter (Meta: eventID, TikTok: event_id).
function _hpFireLead(formIdent,data,eventId){
  if(_hpIsOwner)return;
  var em=null,ph=null,fn=null,ln=null;
  for(var k in data){
    if(!Object.prototype.hasOwnProperty.call(data,k))continue;
    var v=(data[k]||"").toString().trim();
    if(!v)continue;
    var kl=k.toLowerCase();
    if(!em&&/email/.test(kl)&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v))em=v;
    else if(!ph&&/phone|tel|mobile/.test(kl))ph=v;
    else if(!fn&&/first.?name|fname/.test(kl))fn=v;
    else if(!ln&&/last.?name|lname/.test(kl))ln=v;
  }
  var custom={};if(em)custom.em=em;if(ph)custom.ph=ph;if(fn)custom.fn=fn;if(ln)custom.ln=ln;
  try{if(window.fbq)window.fbq("track","Lead",custom,{eventID:eventId});}catch(e){}
  try{if(window.ttq&&window.ttq.track)window.ttq.track("SubmitForm",custom,{event_id:eventId});}catch(e){}
  try{if(window.gtag)window.gtag("event","generate_lead",{event_id:eventId,lp_form_id:formIdent});}catch(e){}
  try{if(window.dataLayer&&window.dataLayer.push)window.dataLayer.push({event:"lp_form_submit",lp_event_id:eventId,lp_form_id:formIdent});}catch(e){}
}

// First-interaction hook: when the visitor focuses any form field for the
// first time on this page, fire the platform's "started a form" event.
// Once per form per page (debounced via _hpFiredInitFocus).
var _hpFiredInitFocus={};
function _hpFireInitiateCheckout(formIdent){
  if(_hpIsOwner)return;
  if(_hpFiredInitFocus[formIdent])return;
  _hpFiredInitFocus[formIdent]=true;
  var eid=_hpUuid();
  try{if(window.fbq)window.fbq("track","InitiateCheckout",{},{eventID:eid});}catch(e){}
  try{if(window.ttq&&window.ttq.track)window.ttq.track("InitiateCheckout",{},{event_id:eid});}catch(e){}
  try{if(window.gtag)window.gtag("event","form_start",{event_id:eid,lp_form_id:formIdent});}catch(e){}
  try{if(window.dataLayer&&window.dataLayer.push)window.dataLayer.push({event:"lp_form_start",lp_event_id:eid,lp_form_id:formIdent});}catch(e){}
}
document.addEventListener("focusin",function(e){
  var el=e.target;
  if(!el||(el.tagName!=="INPUT"&&el.tagName!=="TEXTAREA"&&el.tagName!=="SELECT"))return;
  if(el.type==="hidden"||el.type==="submit"||el.type==="button")return;
  var f=el.closest&&(el.closest("form")||el.closest("[data-htmlpub-fake-form]"));
  if(!f)return;
  _hpFireInitiateCheckout(formId(f));
},true);

// Set _hp_email cookie when we find an email in form data (for CRM personalization)
function setEmailCookie(data){
var email=null;
for(var k in data){
if(!data.hasOwnProperty(k))continue;
var v=(data[k]||"").toString();
if(/^[^s@]+@[^s@]+.[^s@]+$/.test(v.trim())){email=v.trim();break;}
}
if(email){
try{var enc=btoa(email.toLowerCase().trim());document.cookie="_hp_email="+encodeURIComponent(enc)+";path=/;max-age=31536000;SameSite=Lax;Secure";}catch(e){}
}
}

// Read _hpid from URL and set cookie for future visits
(function(){
var p=new URLSearchParams(window.location.search);
var hpid=p.get("_hpid");
if(hpid){
try{var decoded=atob(hpid);if(decoded.indexOf("@")!==-1){document.cookie="_hp_email="+encodeURIComponent(hpid)+";path=/;max-age=31536000;SameSite=Lax;Secure";}}catch(e){}
}
})();

// Tag all hidden inputs present in the original HTML so we can distinguish
// them from ones injected later by third-party scripts (Customers.ai, etc.)
document.querySelectorAll('input[type="hidden"]').forEach(function(el){el.setAttribute("data-hp-original","1");});

function showMsg(f,ok){
var m=document.createElement("div");
m.textContent=ok?(f.getAttribute("data-success-message")||"Thank you! Your submission has been received."):"Something went wrong. Please try again.";
m.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");
f.parentNode.insertBefore(m,f.nextSibling);
setTimeout(function(){m.remove()},5000);
}

function formId(f){
if(f.tagName==="FORM")return f.id||f.getAttribute("name")||"form-"+([].indexOf.call(document.forms,f));
return f.id||"section-"+([].indexOf.call(document.querySelectorAll("[data-htmlpub-fake-form]"),f));
}

// Listen for postMessage responses from parent shell
if(inSandbox){
window.addEventListener("message",function(e){
var d=e.data;
if(d&&d.type==="htmlpub-form-submit-result"&&d.correlationId){
var cb=pendingCallbacks[d.correlationId];
if(cb){
delete pendingCallbacks[d.correlationId];
cb(d.success);
}
}
});
}

function isSafeRedirectUrl(url){
if(!url)return false;
if(/^https?:\/\//i.test(url))return true;
if(url.charAt(0)==="/"&&url.charAt(1)!=="/")return true;
return false;
}
// 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).
function stripTrailingSlash(url){
try{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){}
return url;
}
function maybeRedirectUrl(url){
if(window.htmlpubEditorMode)return;
if(!isSafeRedirectUrl(url))return;
if(/\/api\/forms\/submit$/.test(url))return;
setTimeout(function(){window.location.href=stripTrailingSlash(url);},600);
}
function maybeRedirect(f){maybeRedirectUrl(f.getAttribute("action"));}
function reportFail(kind,status,fident){
try{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){}
}
function submitData(f,data){
var btn=f.querySelector("[type=submit],button:not([type])");
if(btn)btn.disabled=true;

// Generate one eventID per submission, threaded through three places:
//   (a) the JSON payload to /api/forms/submit → integration queue
//   (b) the postMessage to the parent shell (which forwards to the same API)
//   (c) the browser pixel events fired on success below
// Both browser and server emit the SAME id to the same downstream provider
// so Meta / TikTok dedup them as a single conversion.
var eventId=_hpUuid();
var fident=formId(f);

if(inSandbox){
var id="fs-"+(++corrId);
var timer=setTimeout(function(){
delete pendingCallbacks[id];
if(btn)btn.disabled=false;
reportFail("timeout",0,fident);showMsg(f,false);
},10000);

pendingCallbacks[id]=function(success){
clearTimeout(timer);
if(btn)btn.disabled=false;
if(success){setEmailCookie(data);_hpFireLead(fident,data,eventId);showMsg(f,true);if(typeof f.reset==="function")f.reset();maybeRedirect(f);}
else{reportFail("relay_error",0,fident);showMsg(f,false);}
};

var vid="";try{vid=localStorage.getItem("_hp_vid")||"";}catch(e){}
parent.postMessage({type:"htmlpub-form-submit",correlationId:id,pageId:pageId,pageSlug:slug,formIdentifier:fident,data:data,visitorId:vid,eventId:eventId},"*");
}else{
var vid2="";try{vid2=localStorage.getItem("_hp_vid")||"";}catch(e){}
fetch(api,{method:"POST",keepalive:true,headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:pageId,pageSlug:slug,formIdentifier:fident,data:data,visitorId:vid2,eventId:eventId})}).then(function(r){
if(btn)btn.disabled=false;
if(r.ok){setEmailCookie(data);_hpFireLead(fident,data,eventId);showMsg(f,true);if(typeof f.reset==="function")f.reset();maybeRedirect(f);}
else{reportFail("http_error",r.status,fident);showMsg(f,false);}
}).catch(function(){
if(btn)btn.disabled=false;
reportFail("network",0,fident);showMsg(f,false);
});
}
}

// Snapshot forms in the server-rendered HTML at init; third-party embeds (ConvertKit/ActiveCampaign) inject their <form> later, so they're excluded.
var _hpNativeForms=(function(){try{return new WeakSet([].slice.call(document.querySelectorAll("form")));}catch(e){return null;}})();
document.addEventListener("submit",function(e){
var f=e.target;
if(f.tagName!=="FORM")return;
if(_hpNativeForms&&!_hpNativeForms.has(f))return;// injected after init = third-party form — don't hijack it
e.preventDefault();
var data=collect(f);
if(Object.keys(data).length===0)return;// No visible field values — skip noise
submitData(f,data);
},true);

// --- Fake form interception (inputs outside <form>) ---
var lastFakeSubmit=0;
// Walk up from the clicked element to find a "form-like" container:
//   - has 1-20 inputs/textareas/selects (excluding hidden/submit/button types)
//   - has ≤4 button-like descendants (more = page scaffolding, not a form)
//   - the clicked element sits AFTER the last input in document order
//     (real submits sit below fields; uses DOCUMENT_POSITION_PRECEDING = 2)
// Walk depth capped at 3 — further up is <section>, <main>, or <body>.
function findFormLikeContainer(t){
var cur=t.parentElement;
for(var depth=0;cur&&depth<3;depth++){
if(cur.tagName==="FORM")return null;// real form, skip
var inputs=cur.querySelectorAll("input:not([type=hidden]):not([type=submit]):not([type=button]),textarea,select");
if(inputs.length>=1&&inputs.length<=20){
var ctas=cur.querySelectorAll("button,a[href],[role=button],input[type=submit]");
if(ctas.length<=4){
return (t.compareDocumentPosition(inputs[inputs.length-1])&2)?cur:null;
}
}
cur=cur.parentElement;
}
return null;
}
// <a> with a real href is navigation, never a submit. Allow empty href / "#" /
// no href (button-styled anchors). <button type="button"> is explicitly non-submit.
function isPlausibleSubmit(t){
if(t.tagName==="A"){
var href=t.getAttribute("href");
if(href!==null){
href=(href+"").trim();
if(href!==""&&href!=="#")return false;
}
}
if(t.tagName==="BUTTON"&&t.getAttribute("type")==="button")return false;
return true;
}
document.addEventListener("click",function(e){
var t=e.target.closest?e.target.closest("button,a,[role=button],input[type=submit]"):null;
if(!t)return;
if(t.closest("form"))return;// inside a real form, native handler covers it
if(!isPlausibleSubmit(t))return;
var now=Date.now();
if(now-lastFakeSubmit<2000)return;
var container=findFormLikeContainer(t);
if(!container)return;
var data=collect(container);
if(Object.keys(data).length===0)return;
// Skip if all field values are empty (button click near empty form fields)
var hasAnyValue=Object.keys(data).some(function(k){return data[k]&&String(data[k]).trim();});
if(!hasAnyValue)return;
lastFakeSubmit=now;
container.setAttribute("data-htmlpub-fake-form","");
submitData(container,data);
// Notify analytics script about this fake form submission
try{document.dispatchEvent(new CustomEvent("htmlpub:form-submit",{detail:{formIdentifier:formId(container)}}));}catch(e){}
},true);

// Always report form count to parent (even for non-owner views)
function reportFormCount(){
var forms=document.querySelectorAll("form");
var count=forms.length;
var labels=[];
for(var i=0;i<forms.length;i++){
var ff=forms[i];
var label=ff.getAttribute("aria-label")||ff.getAttribute("name")||ff.getAttribute("id")||"";
if(!label){
var heading=ff.querySelector("h1,h2,h3,h4,h5,h6,label,legend");
if(heading) label=heading.textContent.trim().substring(0,50);
}
labels.push(label||("Form "+(i+1)));
}
if(inSandbox) parent.postMessage({type:"htmlpub-form-count",count:count,labels:labels},"*");
}
function initFormCount(){
reportFormCount();
if(typeof MutationObserver!=="undefined"){
new MutationObserver(function(){reportFormCount();}).observe(document.body||document.documentElement,{childList:true,subtree:true});
}
}
if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",initFormCount);}
else{initFormCount();}

// Leadbox/leadbar iframe form bridge. SYNC with worker-pages/src/scripts/forms.ts.
window.addEventListener("message",function(e){
if(!e||!e.data||e.data.type!=="htmlpub:iframe-form-submit")return;
var fid=String(e.data.formIdentifier||"iframe-form").slice(0,255);
var fsid=e.data.formSourceId?String(e.data.formSourceId).slice(0,255):"";
var raw=e.data.data;
if(!raw||typeof raw!=="object")return;
var clean={};
for(var k in raw){
if(!Object.prototype.hasOwnProperty.call(raw,k))continue;
if(looksLikeRawId(k))continue;
if(_blocklist.test(k))continue;
clean[k]=raw[k];
}
var redirect=typeof e.data.redirect==="string"?e.data.redirect:"";
fetch(api,{method:"POST",keepalive:true,headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:pageId,pageSlug:slug,formIdentifier:fid,formSourceId:fsid,data:clean})}).then(function(r){if(r.ok){if(redirect)maybeRedirectUrl(redirect);}else{reportFail("http_error",r.status,fid);}}).catch(function(){reportFail("network",0,fid);});
},false);


})();
</script><script data-htmlpub-popups>
(function(){
"use strict";

var DEFAULTS = {
  overlay:   { color: "#000000", opacity: 0.5,  clickToClose: true },
  close:     { enabled: true, position: "top-right", escapeToClose: true },
  animation: { open: "fade", close: "fade", durationMs: 250 },
  frequency: { visitsBefore: 0, daysCooldown: 0 }
};

function parseJsonAttr(raw, fallback) {
  if (!raw) return fallback;
  try {
    var p = JSON.parse(raw);
    if (p && typeof p === "object") return p;
  } catch(e) {}
  return fallback;
}

function readConfig(el) {
  var overlay   = parseJsonAttr(el.getAttribute("data-htmlpub-popup-overlay"),   {});
  var closeCfg  = parseJsonAttr(el.getAttribute("data-htmlpub-popup-close"),     {});
  var anim      = parseJsonAttr(el.getAttribute("data-htmlpub-popup-animation"), {});
  var triggers  = parseJsonAttr(el.getAttribute("data-htmlpub-popup-triggers"),  {});
  var frequency = parseJsonAttr(el.getAttribute("data-htmlpub-popup-frequency"), {});
  return {
    overlay: {
      color:        typeof overlay.color === "string"   ? overlay.color   : DEFAULTS.overlay.color,
      opacity:      typeof overlay.opacity === "number" ? overlay.opacity : DEFAULTS.overlay.opacity,
      clickToClose: overlay.clickToClose !== false
    },
    close: {
      enabled:        closeCfg.enabled !== false,
      position:       closeCfg.position === "top-left" ? "top-left" : "top-right",
      escapeToClose:  closeCfg.escapeToClose !== false
    },
    animation: {
      open:        typeof anim.open === "string"  ? anim.open       : DEFAULTS.animation.open,
      close:       typeof anim.close === "string" ? anim.close      : DEFAULTS.animation.close,
      durationMs:  typeof anim.durationMs === "number" ? anim.durationMs : DEFAULTS.animation.durationMs
    },
    triggers: triggers,
    frequency: {
      visitsBefore: typeof frequency.visitsBefore === "number" ? frequency.visitsBefore : 0,
      daysCooldown: typeof frequency.daysCooldown === "number" ? frequency.daysCooldown : 0
    }
  };
}

// ── LocalStorage helpers — scoped per pathname so two pages on the same
// origin track their popups independently. Wrapped in try/catch because
// Safari private mode + iframe sandboxing can throw on access.
var STORE_PREFIX = "_hpup:" + (location.pathname || "/") + ":";
function lsGet(key) {
  try { return localStorage.getItem(STORE_PREFIX + key); } catch(e) { return null; }
}
function lsSet(key, value) {
  try { localStorage.setItem(STORE_PREFIX + key, value); } catch(e) {}
}

// Bump the page-visit counter once per pageload. Used by visitsBefore.
function recordVisit() {
  var prev = parseInt(lsGet("visits") || "0", 10);
  if (!isFinite(prev) || prev < 0) prev = 0;
  lsSet("visits", String(prev + 1));
  return prev + 1;
}

function isEligible(cfg, popupId, currentVisit) {
  // visitsBefore: 0 = show on first visit. So eligible iff currentVisit > visitsBefore.
  if (cfg.frequency.visitsBefore > 0 && currentVisit <= cfg.frequency.visitsBefore) return false;
  // daysCooldown: don't reshow until N days have passed since last close.
  if (cfg.frequency.daysCooldown > 0) {
    var last = parseInt(lsGet("close:" + popupId) || "0", 10);
    if (last > 0) {
      var elapsedMs = Date.now() - last;
      if (elapsedMs < cfg.frequency.daysCooldown * 86400000) return false;
    }
  }
  return true;
}

function composeRgba(color, opacity) {
  var hex = color.match(/^#([0-9a-f]{6})$/i);
  if (hex) {
    var n = parseInt(hex[1], 16);
    return "rgba(" + ((n >> 16) & 0xff) + "," + ((n >> 8) & 0xff) + "," + (n & 0xff) + "," + opacity + ")";
  }
  var rgb = color.match(/^rgb(?:a)?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);
  if (rgb) return "rgba(" + rgb[1] + "," + rgb[2] + "," + rgb[3] + "," + opacity + ")";
  return "rgba(0,0,0," + opacity + ")";
}

function animStart(kind) {
  if (kind === "slide-up")   return { opacity: 0, transform: "translate(-50%, -40%)" };
  if (kind === "slide-down") return { opacity: 0, transform: "translate(-50%, -60%)" };
  if (kind === "zoom")       return { opacity: 0, transform: "translate(-50%, -50%) scale(0.92)" };
  if (kind === "none")       return { opacity: 1, transform: "translate(-50%, -50%)" };
  return { opacity: 0, transform: "translate(-50%, -50%)" }; // fade
}
function animEnd() {
  return { opacity: 1, transform: "translate(-50%, -50%) scale(1)" };
}

// Body scroll lock — refcounted because two popups can technically be in
// the open state at once (different triggers firing back-to-back). The
// first lock saves the body's prior overflow + padding-right and replaces
// them; subsequent locks just bump the count. We only restore once every
// popup that locked has closed, so a still-open popup keeps the page held.
// padding-right compensates for the scrollbar disappearing — without it,
// the dimmed page behind the overlay shifts right at the moment of open.
var _hpupLockCount = 0;
var _hpupSavedOverflow = "";
var _hpupSavedPaddingRight = "";
function lockBodyScroll() {
  if (_hpupLockCount === 0) {
    var scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
    _hpupSavedOverflow = document.body.style.overflow || "";
    _hpupSavedPaddingRight = document.body.style.paddingRight || "";
    if (scrollbarWidth > 0) document.body.style.paddingRight = scrollbarWidth + "px";
    document.body.style.overflow = "hidden";
  }
  _hpupLockCount++;
}
function unlockBodyScroll() {
  if (_hpupLockCount === 0) return;
  _hpupLockCount--;
  if (_hpupLockCount === 0) {
    if (_hpupSavedOverflow) document.body.style.overflow = _hpupSavedOverflow;
    else document.body.style.removeProperty("overflow");
    if (_hpupSavedPaddingRight) document.body.style.paddingRight = _hpupSavedPaddingRight;
    else document.body.style.removeProperty("padding-right");
  }
}

// Build the overlay backdrop. Returns the element. Wired with the right
// pointer behaviour for the popup's clickToClose setting.
function buildOverlay(cfg, onOverlayClick) {
  var ov = document.createElement("div");
  ov.setAttribute("data-htmlpub-popup-backdrop", "");
  ov.style.cssText = "position:fixed;inset:0;background:" + composeRgba(cfg.overlay.color, cfg.overlay.opacity) +
    ";z-index:2147483646;opacity:0;transition:opacity " + cfg.animation.durationMs + "ms ease;";
  if (cfg.overlay.clickToClose) ov.addEventListener("click", onOverlayClick);
  return ov;
}

// Inject a close ✕ button if the popup doesn't already have one. We mark our
// injected button so re-show calls don't duplicate it.
function ensureCloseButton(el, cfg, onClose) {
  if (el.querySelector("[data-htmlpub-popup-close-btn]")) return;
  if (!cfg.close.enabled) return;
  var btn = document.createElement("button");
  btn.setAttribute("type", "button");
  btn.setAttribute("aria-label", "Close pop-up");
  btn.setAttribute("data-htmlpub-popup-close-btn", "");
  var posStyle = cfg.close.position === "top-left" ? "left:12px;" : "right:12px;";
  btn.style.cssText = "position:absolute;top:12px;" + posStyle +
    "width:28px;height:28px;border-radius:9999px;border:0;background:rgba(0,0,0,0.45);color:#fff;" +
    "font:16px/1 system-ui,-apple-system,sans-serif;cursor:pointer;display:flex;align-items:center;" +
    "justify-content:center;z-index:1;padding:0;";
  btn.textContent = "×";
  btn.addEventListener("click", function(e){ e.preventDefault(); e.stopPropagation(); onClose(); });
  // Ensure the popup itself is a positioning context so absolute close button
  // anchors to it. Cheap: only sets if not already positioned.
  var pos = getComputedStyle(el).position;
  if (pos === "static" || !pos) el.style.position = "relative";
  el.appendChild(btn);
}

// ── Per-popup wiring ──────────────────────────────────────────────────────
// Each popup gets its own controller closing over its element + config +
// trigger cleanup so we can tear down listeners on close.

// HP-1557 — fire an analytics event for this popup. Hands off to the
// analytics.ts buffer via window.__hpupPushEvent (registered there). If
// analytics isn't loaded for some reason we silently no-op rather than
// breaking the popup runtime.
function emitPopupEvent(eventType, popup, extras) {
  if (typeof window.__hpupPushEvent !== "function") return;
  var payload = {
    popupId: popup.getAttribute("id") || "",
    popupName: (popup.getAttribute("data-htmlpub-popup-name") || "").replace(/^\s+|\s+$/g, "")
  };
  if (extras && typeof extras === "object") {
    for (var k in extras) {
      if (Object.prototype.hasOwnProperty.call(extras, k)) payload[k] = extras[k];
    }
  }
  window.__hpupPushEvent(eventType, payload);
}

// Single-open invariant: only one popup may be visible at a time.
// show() force-closes whatever is up before painting itself.
var _hpupCurrentOpen = null;

function wirePopup(el, currentVisit) {
  var cfg = readConfig(el);
  var popupId = el.getAttribute("id") || "";
  if (!popupId) return;
  // The editor stores popups hidden via inline display:none. We never strip
  // that — we toggle it at show/close time so a never-shown popup stays
  // invisible (matching its rendered state in the DOM).
  var originalDisplay = el.style.display || "";
  var isOpen = false;
  var overlay = null;
  var keyListener = null;
  var cleanups = []; // trigger listener removers; called on first show

  function cleanupTriggers() {
    for (var i = 0; i < cleanups.length; i++) {
      try { cleanups[i](); } catch(e) {}
    }
    cleanups = [];
  }

  // Why a popup was opened — informs the parent analytics event so the
  // dashboard can distinguish "fired by timer" vs. "explicit user click".
  // Updated by callers before show() and reset to null after emit.
  var lastShowReason = null;

  function show(reason) {
    if (isOpen) return;
    if (_hpupCurrentOpen && _hpupCurrentOpen !== el && typeof _hpupCurrentOpen._hpupClose === "function") {
      _hpupCurrentOpen._hpupClose("replaced", true);
    }
    _hpupCurrentOpen = el;
    isOpen = true;
    lastShowReason = reason || "explicit";
    cleanupTriggers();
    lockBodyScroll();
    ensureCloseButton(el, cfg, function(){ close("close_button"); });

    var start = animStart(cfg.animation.open);
    var end   = animEnd();

    // Centered fixed positioning with a high z-index so we float above any
    // page content + checkout / chat widgets.
    el.style.display      = "block";
    el.style.position     = "fixed";
    el.style.top          = "50%";
    el.style.left         = "50%";
    el.style.transform    = start.transform;
    el.style.opacity      = String(start.opacity);
    el.style.zIndex       = "2147483647";
    el.style.maxHeight    = "calc(100vh - 32px)";
    el.style.maxWidth     = "calc(100vw - 32px)";
    el.style.overflow     = "auto";
    el.style.transition   = "opacity " + cfg.animation.durationMs + "ms ease, transform " + cfg.animation.durationMs + "ms ease";

    // Backdrop. Inserted before the popup so the popup naturally paints on top.
    overlay = buildOverlay(cfg, function(){ close("overlay_click"); });
    // Reparent to body if detached so insertBefore doesn't crash.
    var parent = el.parentNode || document.body;
    if (!el.parentNode) parent.appendChild(el);
    parent.insertBefore(overlay, el);

    // Force reflow so the next style change animates from start, not jumps.
    /* eslint-disable-next-line no-unused-expressions */ void el.offsetWidth;

    el.style.opacity   = String(end.opacity);
    el.style.transform = end.transform;
    overlay.style.opacity = "1";

    if (cfg.close.escapeToClose) {
      keyListener = function(e) { if (e.key === "Escape") close("escape"); };
      document.addEventListener("keydown", keyListener);
    }

    emitPopupEvent("popup_view", el, { reason: lastShowReason });
    lastShowReason = null;
  }

  function close(reason, hard) {
    if (!isOpen) return;
    isOpen = false;
    emitPopupEvent("popup_dismiss", el, { reason: reason || "unknown" });
    var start = animStart(cfg.animation.close);
    el.style.opacity   = String(start.opacity);
    el.style.transform = start.transform;
    if (overlay) overlay.style.opacity = "0";

    if (keyListener) {
      document.removeEventListener("keydown", keyListener);
      keyListener = null;
    }

    var afterAnim = function() {
      if (_hpupCurrentOpen === el) _hpupCurrentOpen = null;
      el.style.display = originalDisplay || "none";
      el.style.removeProperty("position");
      el.style.removeProperty("top");
      el.style.removeProperty("left");
      el.style.removeProperty("transform");
      el.style.removeProperty("opacity");
      el.style.removeProperty("z-index");
      el.style.removeProperty("max-height");
      el.style.removeProperty("max-width");
      el.style.removeProperty("overflow");
      el.style.removeProperty("transition");
      if (overlay && overlay.parentNode) overlay.parentNode.removeChild(overlay);
      overlay = null;
      // Tear down the close button — its click handler closes over THIS
      // show's overlay reference. Leaving it across opens means a second
      // show's X would call the previous close() with a stale overlay and
      // leave the current overlay floating.
      var existingBtn = el.querySelector("[data-htmlpub-popup-close-btn]");
      if (existingBtn && existingBtn.parentNode) existingBtn.parentNode.removeChild(existingBtn);
      // Release the scroll lock only after the popup is fully torn down so
      // the page doesn't pop back to scrollable while the close animation
      // is still painting.
      unlockBodyScroll();
      lsSet("close:" + popupId, String(Date.now()));
    };
    if (hard || cfg.animation.close === "none") afterAnim();
    else setTimeout(afterAnim, cfg.animation.durationMs);
  }

  // ── Triggers ────────────────────────────────────────────────────────────
  // Only wire if the popup is eligible to show this pageload (frequency
  // rules). Click-to-open via [data-htmlpub-popup-target] always works,
  // regardless of eligibility — it's an explicit user action.
  var eligible = isEligible(cfg, popupId, currentVisit);

  if (eligible) {
    var t = cfg.triggers || {};

    if (t.timed && typeof t.timed.delaySec === "number") {
      var delayMs = Math.max(0, t.timed.delaySec) * 1000;
      var timer = setTimeout(function(){ show("timed"); }, delayMs);
      cleanups.push(function(){ clearTimeout(timer); });
    }

    if (t.exitIntent === true) {
      // Mobile / touch devices don't have a meaningful "exit toward chrome"
      // gesture. Standard heuristic: skip if no mouse pointer is available.
      if (!matchMedia("(pointer: coarse)").matches) {
        var onMove = function(e) {
          if (e.clientY < 8) show("exit_intent");
        };
        document.addEventListener("mousemove", onMove);
        cleanups.push(function(){ document.removeEventListener("mousemove", onMove); });
      }
    }

    if (typeof t.scrollPercent === "number" && t.scrollPercent > 0) {
      var threshold = Math.max(1, Math.min(100, t.scrollPercent));
      var onScroll = function() {
        var doc = document.documentElement;
        var scrolled = (window.scrollY || doc.scrollTop || 0);
        var max = (doc.scrollHeight - doc.clientHeight) || 1;
        var pct = (scrolled / max) * 100;
        if (pct >= threshold) show("scroll");
      };
      window.addEventListener("scroll", onScroll, { passive: true });
      cleanups.push(function(){ window.removeEventListener("scroll", onScroll); });
    }
  }

  // Note: in-popup form submits and CTA clicks are NOT emitted as separate
  // popup_* events. They already fire as form_submit / element_click via
  // analytics.ts's global listeners, which now attach popupId + popupName
  // to the payload so customers can still see which pop-up the conversion
  // came from while continuing to track the standard goal types.

  // Expose the show function on the element so [data-htmlpub-popup-target]
  // clicks (wired globally below) can find and trigger it without re-parsing
  // the config. _hpupShow / _hpupClose are deliberately namespaced + ugly to
  // avoid colliding with user code.
  el._hpupShow = show;
  el._hpupClose = close;
  // Returned so boot() can flush unfired trigger listeners on pagehide.
  return cleanupTriggers;
}

// Global click-to-open dispatcher. Targets carry [data-htmlpub-popup-target]
// or href="#popup-…" (for plain anchors that the link picker auto-generated).
function handleTargetClick(e) {
  var t = e.target;
  if (!t || !t.closest) return;
  var hit = t.closest("[data-htmlpub-popup-target], a[href^='#popup-'], a[href^='#modal-'], a[href^='#dialog-']");
  if (!hit) return;
  var id = hit.getAttribute("data-htmlpub-popup-target");
  if (!id) {
    var href = hit.getAttribute("href") || "";
    if (href.charAt(0) === "#") id = href.slice(1);
  }
  if (!id) return;
  var popup = document.getElementById(id);
  if (!popup || !popup.hasAttribute("data-htmlpub-popup")) return;
  e.preventDefault();
  if (typeof popup._hpupShow === "function") popup._hpupShow("click_target");
}

// ── Boot ──────────────────────────────────────────────────────────────────

function boot() {
  // Guard against double-injection (HMR, accidental double-include).
  if (window.__hpupBooted) return;
  window.__hpupBooted = true;
  var popups = document.querySelectorAll("[data-htmlpub-popup]");
  if (!popups.length) return;
  var visit = recordVisit();
  var teardowns = [];
  for (var i = 0; i < popups.length; i++) {
    var t = wirePopup(popups[i], visit);
    if (typeof t === "function") teardowns.push(t);
  }
  document.addEventListener("click", handleTargetClick, false);
  // Flush unfired trigger listeners on pagehide.
  window.addEventListener("pagehide", function(){
    for (var j = 0; j < teardowns.length; j++) {
      try { teardowns[j](); } catch(e) {}
    }
  });
}

if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", boot);
} else {
  boot();
}

})();
</script><script data-htmlpub-countdown-runtime>
(function(){
var nodes=document.querySelectorAll('[data-htmlpub-countdown]');
if(!nodes.length)return;
function pad(n){n=String(n);return n.length<2?'0'+n:n;}
function setDigit(root,sel,val){var el=root.querySelector(sel);if(el)el.textContent=pad(val);}
function tick(node,endMs){
var diff=Math.max(0,endMs-Date.now());
var s=Math.floor(diff/1000);
var d=Math.floor(s/86400);s-=d*86400;
var h=Math.floor(s/3600);s-=h*3600;
var m=Math.floor(s/60);s-=m*60;
setDigit(node,'.countdown-days',d);
setDigit(node,'.countdown-hours',h);
setDigit(node,'.countdown-minutes',m);
setDigit(node,'.countdown-seconds',s);
if(diff===0){
var redirect=node.getAttribute('data-redirect');
var inFrame=false;try{inFrame=window!==window.top;}catch(e){inFrame=true;}
if(redirect&&!inFrame){try{window.location.href=redirect;}catch(e){}}
return true;
}
return false;
}
function endMsFor(node){
var mode=node.getAttribute('data-htmlpub-countdown');
if(mode==='fixed'){
var target=node.getAttribute('data-target');
var t=target?Date.parse(target):NaN;
return isNaN(t)?0:t;
}
if(mode==='evergreen'){
var dur=parseInt(node.getAttribute('data-duration')||'0',10);
if(!dur)return 0;
if(!node.id)node.id='hp_cd_'+Math.random().toString(36).slice(2,10);
var key='htmlpub_cd_'+node.id;
var first=null;
try{first=localStorage.getItem(key);}catch(e){}
if(!first){first=String(Date.now());try{localStorage.setItem(key,first);}catch(e){}}
return parseInt(first,10)+dur*1000;
}
return 0;
}
for(var i=0;i<nodes.length;i++){(function(node){
var endMs=endMsFor(node);
if(!endMs)return;
if(tick(node,endMs))return;
var iv=setInterval(function(){if(tick(node,endMs))clearInterval(iv);},1000);
})(nodes[i]);}
})();
</script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a1492871cf9da68a',t:'MTc4Mjk0ODIwMQ=='};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></body></html>