PageSourceSearch

https://formnx.com/jotform-pricing

html formnx.com collected 2026-10-02 04:31:13 UTC 180,775 bytes, 2,730 lines download raw bytes

1<!doctype html>
2<html lang="en">
3
4<head>
5    <!-- Required meta tags -->
6    <meta charset="utf-8">
7    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8    <meta name="norton-safeweb-site-verification" content="X4JSMEHQMW889RDPO4KVE5E9086TCLS3TASAV243DAUQO54U8U0C0RS7SMTJDVDC1X0E6GA23YUT9LOH034D2UP-H6I86K8U39FMYTUPMX5LYXD6X4O96AO3A-QBQOKE" />
9
10    <!-- TODO: Add all meta tags -->
11    <!-- CSRF Token -->
12    <meta name="csrf-token" content="iclSdj089SMzpFriMXJeVRTjkf6BZWgMrBwk7oa9">
13    
14    <!-- Primary Meta Tags -->
15
16    
17<title>Jotform Pricing 2026: $34-$99/mo Plans &amp; Hidden Costs - FormNX</title>
18<meta name="title" content="Jotform Pricing 2026: $34-$99/mo Plans &amp; Hidden Costs - FormNX" />
19
20    <meta name="description" content="Jotform pricing 2026: free Starter to $99/mo Gold (billed annually), Enterprise quote-only. Every plan&#039;s real limits, the hidden costs &amp; a no-caps alternative.">
21
22<!-- Open Graph / Facebook -->
23<meta property="og:type" content="website" />
24<meta property="og:url" content="https://formnx.com/jotform-pricing" />
25<meta property="og:title" content="Jotform Pricing 2026: $34-$99/mo Plans &amp; Hidden Costs - FormNX" />
26    <meta property="og:description" content="Jotform pricing 2026: free Starter to $99/mo Gold (billed annually), Enterprise quote-only. Every plan&#039;s real limits, the hidden costs &amp; a no-caps alternative." />
27
28    <meta property="og:image" content="https://formnx.com/img/jotform-pricing.png" />
29
30<!-- Twitter -->
31<meta property="twitter:card" content="summary_large_image" />
32<meta property="twitter:url" content="https://formnx.com/jotform-pricing" />
33<meta property="twitter:title" content="Jotform Pricing 2026: $34-$99/mo Plans &amp; Hidden Costs - FormNX" />
34    <meta property="twitter:description" content="Jotform pricing 2026: free Starter to $99/mo Gold (billed annually), Enterprise quote-only. Every plan&#039;s real limits, the hidden costs &amp; a no-caps alternative." />
35
36    <meta property="twitter:image" content="https://formnx.com/img/jotform-pricing.png" />
37
38
39<link rel="canonical" href="https://formnx.com/jotform-pricing" />
40
41    <link rel="icon" href="https://formnx.com/img/logo.svg"/>
42
43    
43<script
44  id="datafast-script"
45  defer
46  data-website-id="dfid_dqAk2mBIKfUfADLlgiY6A"
47  data-domain="formnx.com"
48  src="https://datafa.st/js/script.js">
49</script>
49
50
51    <!-- Fonts -->
52    <link rel="preconnect" href="https://fonts.googleapis.com">
53    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
54    
55    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Bricolage+Grotesque:opsz,[email protected],400..800&display=swap" rel="stylesheet">
56
57    <link rel="icon" href="https://formnx.com/img/logo.svg"/>
58
59     
60    <link href="https://formnx.com/css/vendor.css?id=3997cc104465c80b4a2f" rel="stylesheet">
61
62
63<!-- intro.js & animate css-->
64<!-- NOTE:common bundled css files to optimize size -->
65<style type="text/css">
66
67    /* Reset input fields css by theme*/
68    :root {
69        --label-color: #525760;
70        --icon-color: #525760;
71        --text-color: #525760;
72        --border-color: #525760;
73        /* --shadow-color: #525760; */
74        --error-color: #a94442;
75        --error-background: #F8F9FA;
76        --border-radius: 0.25rem;
77        --label-font-size: 14px;
78        --field-bg-color: #ffffff;
79        /* --box-shadow-input: 0 1px 1px var(--shadow-color); */
80    }
81
82    @supports (color: color-mix(in srgb, white, black)) {
83        :root {
84            --icon-color: color-mix(in srgb, var(--label-color), #fff 30%);
85            --border-color: color-mix(in srgb, var(--label-color), #fff 30%);
86            /* --shadow-color: color-mix(in srgb, var(--label-color), #fff 30%); */
87            --error-background: color-mix(in srgb, var(--error-color), #fff 80%);
88            /* --box-shadow-input: 0 1px 1px var(--shadow-color); */
89        }
90    }
91    
92
93        	body {
94        	margin: 0; /* If not already reset */
95    	}
96      	.content {
97        	min-height: calc(100vh - 80px);
98      	}
99      	.mh-250{
100        	max-height: 15.625rem;
101      	}
102      	.w-100-percent {
103        	width: 100%;
104      	}
105    
106    span.error {
107        color: var(--error-color) !important;
108    }
109    
110    label.error {
111        color: var(--error-color) !important;
112        background: var(--error-background) !important; 
113        padding: 4px 10px !important;
114        border-radius: 5px !important;
115        margin-top: 8px !important;
116        font-weight: 500 !important;
117        font-size: 12px !important;
118        transition: all .2s; 
119    }
120
121    label > span {
122        color: var(--label-color);
123        font-size: var(--label-font-size);
124    }
125    label {
126        color: var(--label-color);
127    }
128    .option-description{
129        color: var(--label-color);
130        font-weight: 600;
131    }
132    .form-group .input-group-text {
133        color: var(--icon-color) !important;
134    }
135    .input-group {
136        border-radius: var(--border-radius);
137    }
138    .form-control, .form-select, .input-group-text, span.select2{
139        background-color: var(--field-bg-color);
140        color: var(--text-color);
141        border-radius: var(--border-radius);
142    }
143    .form-control:focus, .form-select:focus{
144        border-color: var(--border-color);
145        outline: 0;
146    }
147    .select2-container--bootstrap-5.select2-container--focus .select2-selection, .select2-container--bootstrap-5.select2-container--open .select2-selection {
148        border-color: var(--border-color);
149        outline: 0;
150        border-radius: var(--border-radius);
151    }
152    .note-frame {
153        color: var(--text-color);
154        background: var(--field-bg-color);
155    }
156    .dropzone {
157        border-color: var(--border-color) !important;
158        background: var(--field-bg-color);
159        border-radius: var(--border-radius);
160    }
161    .form-control[readonly] {
162        background-color: var(--field-bg-color);
163    }
164    .select2-container--bootstrap-5 .select2-dropdown {
165        background-color: #ffffff;
166        border-color: #e2e8f0;
167        border-radius: var(--border-radius) !important;
168    }
169    .select2-container--bootstrap-5 .select2-selection {
170        color: var(--text-color);
171        background-color: var(--field-bg-color) !important;
172        border-radius: var(--border-radius);
173    }
174    .input-group .select2-container--bootstrap-5 {
175        flex-grow: 1;
176        border-radius: var(--border-radius);
177    }
178    table.input_table thead tr th, table.input_table tbody tr td:nth-child(1) {
179        color: var(--label-color);
180    }
181    .option-with-card {
182        border-radius: var(--border-radius);
183    }
184    .input-group:has(.form-control-plaintext) {
185        box-shadow: none;
186    }
187    .form-control-plaintext {
188        font-size: var(--label-font-size) !important;
189        color: var(--label-color) !important;
190        font-weight: 600 !important;
191        padding: .5rem;
192    }
193    /* Remove box shadow when select2 is focused */
194    .select2-container--focus .select2-selection {
195        box-shadow: none !important;
196    }
197    /* Remove box shadow for the dropdown */
198    .select2-container--open .select2-selection {
199        box-shadow: none !important;
200    }
201    /*remove outline for better visibility */
202    .select2-container--focus .select2-selection, 
203    .select2-container--open .select2-selection {
204        outline: none !important;
205    }
206    .form-logo * {
207        color: var(--label-color);
208    }
209    /* Upload fields (dropzone / photo capture / voice recorder) disabled because
210       the form owner's workspace has exhausted its storage quota. Children are made
211       inert so every click lands on the wrapper, which raises the "uploads
212       unavailable" alert. */
213    .upload-disabled {
214        display: flex;
215        align-items: center;
216        justify-content: center;
217        cursor: not-allowed;
218        min-height: 90px;
219        padding: 1rem;
220        background-color: #f6f7f9 !important;
221        border: 1px dashed var(--border-color) !important;
222        border-radius: var(--border-radius);
223    }
224    .upload-disabled * {
225        pointer-events: none;
226    }
227    /* Icon + reason, centred inside the box so the field reads as deliberately
228       switched off rather than as a dropzone that failed to load. */
229    .upload-disabled__body {
230        display: flex;
231        flex-direction: column;
232        align-items: center;
233        gap: 0.3rem;
234        text-align: center;
235        color: var(--label-color);
236        opacity: 0.75;
237        font-size: 0.875rem;
238        font-weight: 500;
239    }
240    /* Full reason, shown on the field itself so the respondent understands without
241       having to click through to the alert. */
242    .upload-disabled__hint {
243        max-width: 34rem;
244        font-size: 0.8125rem;
245        font-weight: 400;
246        line-height: 1.4;
247    }
248</style>
249<!-- Form additional css -->
250    <link rel="stylesheet" href="https://formnx.com/assets/css/lp.css?v=231" />
251    
252    <link rel="stylesheet" href="https://formnx.com/assets/css/lp2.css?v=231" />
253    
254
255<script type="application/ld+json">
256{
257  "@context": "https://schema.org",
258  "@type": "FAQPage",
259  "mainEntity": [
260        {
261      "@type": "Question",
262      "name": "How much does Jotform cost per month?",
263      "acceptedAnswer": { "@type": "Answer", "text": "Jotform has a free Starter plan ($0) and four paid tiers: Bronze is $39\/mo ($34\/mo billed annually), Silver $49\/mo ($39 annually), Gold $129\/mo ($99 annually), and Enterprise is custom-priced. The annual prices are the effective monthly cost when you pay for a full year upfront." }
264    },        {
265      "@type": "Question",
266      "name": "Is Jotform free?",
267      "acceptedAnswer": { "@type": "Answer", "text": "Yes. Jotform\u0027s Starter plan is free forever and includes 5 forms, 100 submissions per month, 100 MB of storage and 10,000 monthly views, with Jotform branding on your forms. Payments and signed documents are capped at 10 each per month, so most businesses outgrow the free plan quickly." }
268    },        {
269      "@type": "Question",
270      "name": "What is cheaper than Jotform?",
271      "acceptedAnswer": { "@type": "Answer", "text": "FormNX is cheaper at every comparable volume. Its entry paid plan is $15\/mo ($12 billed annually) versus Jotform\u0027s $34\/mo Bronze, and FormNX gives you unlimited submissions and 5 users where Jotform caps submissions and limits you to a single user until Enterprise." }
272    },        {
273      "@type": "Question",
274      "name": "Does Jotform charge transaction or payment fees?",
275      "acceptedAnswer": { "@type": "Answer", "text": "Jotform charges no platform surcharge on payments on any plan - you pay only Stripe, PayPal or Square\u0027s standard processing fees. However, the number of payment submissions you can collect is capped per tier (10 on free, up to 1,000 on Gold; unlimited only on Enterprise)." }
276    },        {
277      "@type": "Question",
278      "name": "Does Jotform offer a nonprofit discount?",
279      "acceptedAnswer": { "@type": "Answer", "text": "Yes. Nonprofit and educational organizations get 50% off the Bronze, Silver and Gold plans, and 30% off Enterprise. You apply through Jotform with proof of your organization\u0027s status. FormNX also offers nonprofits 50% off all plans - contact FormNX support to claim it." }
280    },        {
281      "@type": "Question",
282      "name": "How much is Jotform Enterprise?",
283      "acceptedAnswer": { "@type": "Answer", "text": "Jotform Enterprise is custom-priced and quote-based - there is no public price. It removes all per-tier caps and adds multi-user access, SSO and dedicated support. Vendr\u0027s procurement data puts the median Jotform contract at $9,549 per year (with buyers ranging from $6,772 to $42,974), and the UK Government\u0027s G-Cloud framework lists a base package covering 5 users and 1 domain at $8,328. Your own quote depends on seats, submission volume and compliance needs." }
284    },        {
285      "@type": "Question",
286      "name": "Does Jotform have HIPAA compliance?",
287      "acceptedAnswer": { "@type": "Answer", "text": "Yes, but only on the Gold and Enterprise plans. The free, Bronze and Silver tiers do not include HIPAA features, so healthcare workflows that handle protected health information need at least Gold ($99\/mo annually)." }
288    },        {
289      "@type": "Question",
290      "name": "How much does Jotform Sign cost?",
291      "acceptedAnswer": { "@type": "Answer", "text": "Jotform Sign is not a separate subscription - e-signatures are built into every Jotform plan, including the free Starter plan. What changes by tier is how many signed documents you can collect each month: 10 on Starter (free), 100 on Bronze, 250 on Silver, 1,000 on Gold and unlimited only on Enterprise. So \u0022Jotform Sign pricing\u0022 is really just your Jotform plan price, with the monthly signed-document cap being the limit to watch. FormNX includes unlimited signed documents on its paid plans - see the comparison below." }
292    },        {
293      "@type": "Question",
294      "name": "What are the disadvantages of Jotform?",
295      "acceptedAnswer": { "@type": "Answer", "text": "The main drawback is that Jotform meters usage: forms, fields per form, monthly submissions, monthly views, payments and signed documents are all capped per plan, so growing teams have to keep upgrading. Every plan below Enterprise is also single-user, and Enterprise pricing is quote-only. A Jotform alternative like FormNX removes those usage caps and lets you invite a team on the entry plan." }
296    },        {
297      "@type": "Question",
298      "name": "Is Google Forms or Jotform better?",
299      "acceptedAnswer": { "@type": "Answer", "text": "Google Forms is free and great for simple internal surveys, while Jotform is more powerful for payments, e-signatures and workflows but costs more and caps usage. If you want Jotform-level features without the caps, see our Jotform vs Google Forms comparison." }
300    },        {
301      "@type": "Question",
302      "name": "What are the limitations of the Jotform free version?",
303      "acceptedAnswer": { "@type": "Answer", "text": "The Starter (free) plan caps you at 5 active forms, 100 submissions per month, 100 fields per form, 10,000 monthly form views and 100 MB of storage, with Jotform branding on every form. Payments and signed documents are limited to 10 each per month, and a separate lifetime ceiling of 500 total stored submissions applies - once you reach it, new responses stop being stored even if you are under the monthly limit." }
304    },        {
305      "@type": "Question",
306      "name": "Does Jotform have discounts or sales?",
307      "acceptedAnswer": { "@type": "Answer", "text": "Yes. Nonprofits and educational institutions get 50% off Bronze, Silver and Gold (30% off Enterprise), annual billing is discounted against month-to-month on every tier, and Jotform runs periodic seasonal sales. All paid plans come with a 30-day money-back guarantee." }
308    }      ]
309}
310</script>
310
311
312<script type="application/ld+json">
313{
314  "@context": "https://schema.org",
315  "@type": "BreadcrumbList",
316  "itemListElement": [
317    {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://formnx.com"},
318    {"@type": "ListItem", "position": 2, "name": "Jotform Pricing", "item": "https://formnx.com/jotform-pricing"}
319  ]
320}
321</script>
321
322
323<script type="application/ld+json">
324{
325  "@context": "https://schema.org",
326  "@type": "SoftwareApplication",
327  "name": "FormNX",
328  "applicationCategory": "BusinessApplication",
329  "operatingSystem": "Web",
330  "offers": {"@type": "Offer", "price": "0", "priceCurrency": "USD"}
331}
332</script>
332
333
334<style>
335/* ===== Competitor pricing-guide page (scoped) ===== */
336/* Inherit the same FormNX-green theme the alternative pages use. */
337.pricing-guide-page{--template-theme-color:var(--formnx-success,#10b981);--template-theme-hover:#0559a8;}
338.pricing-guide-page .pp-meta{font-size:.85rem;color:#6b7280;margin-bottom:.5rem;}
339.pricing-guide-page .pp-secondary-cta{margin-top:1rem;display:flex;flex-wrap:wrap;gap:.5rem;}
340
341/* Quick-answer box (the single, canonical price summary) */
342.pp-quick{background:#fff;border:1px solid #e6e8ee;border-radius:16px;padding:1.75rem 2rem;box-shadow:0 8px 30px rgba(20,23,40,.05);}
343.pp-quick h2{font-size:1.35rem;margin-bottom:1rem;}
344.pp-quick ul{list-style:none;padding:0;margin:0;}
345.pp-quick li{position:relative;padding-left:1.6rem;margin-bottom:.6rem;line-height:1.5;}
346.pp-quick li:before{content:"";position:absolute;left:0;top:.55em;width:8px;height:8px;border-radius:50%;background:var(--formnx-primary, #066fd1);}
347
348/* Limits table (replaces the price cards) */
349table.pp-limits-table,table.pp-limits-table thead th,table.pp-limits-table tbody td{text-transform:none !important;letter-spacing:normal !important;}
350.pp-limits-table thead th{background:#f6f7fb;font-size:.9rem;white-space:nowrap;}
351.pp-limits-table th,.pp-limits-table td{font-size:.88rem;}
352.pp-limits-table tbody td:last-child{background:rgba(47,179,68,.05);} /* Enterprise = "unlimited" column, subtle tint */
353.pp-no{color:#9ca3af;}
354
355/* Compare-section image ("competitor price vs FormNX price") */
356.pp-compare-img{border-radius:14px;box-shadow:0 8px 30px rgba(20,23,40,.10);max-width:100%;height:auto;}
357
358/* Callout */
359.pp-callout{margin-top:1.75rem;background:#f0fdf4;border:1px solid #a7f3d0;border-radius:14px;padding:1.1rem 1.4rem;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;}
360.pp-callout p{margin:0;font-weight:600;color:#065f46;}
361
362/* Plan breakdown */
363.pp-breakdown{max-width:820px;margin:0 auto;}
364.pp-breakdown__item{padding:1.1rem 0;border-bottom:1px solid #edeef2;}
365.pp-breakdown__item:last-child{border-bottom:0;}
366.pp-breakdown__item h3{font-size:1.1rem;margin:0 0 .35rem;}
367.pp-breakdown__item p{margin:0;color:#4b5563;}
368
369/* Deep-dive topic sections (enterprise / nonprofit / HIPAA / add-on pricing) */
370.pp-deep{max-width:820px;margin:0 auto;}
371.pp-deep__item{padding:1.6rem 0;border-bottom:1px solid #edeef2;}
372.pp-deep__item:last-child{border-bottom:0;}
373.pp-deep__title{font-size:1.35rem;margin:0 0 .75rem;}
374.pp-deep__item p{color:#374151;margin-bottom:.85rem;}
375.pp-deep__item p:last-child{margin-bottom:0;}
376.pp-deep__item ul{color:#374151;padding-left:1.15rem;margin-bottom:.85rem;}
377.pp-deep__item li{margin-bottom:.4rem;}
378.pp-deep__lead{background:#f6f7fb;border-left:3px solid var(--formnx-primary,#066fd1);border-radius:0 10px 10px 0;padding:.9rem 1.15rem;}
379.pp-deep__note{font-size:.85rem;color:#6b7280;}
380
381/* Generic prose panels (is-free, choose-plan) */
382.pp-panel{max-width:820px;margin:0 auto;background:#fff;border:1px solid #e6e8ee;border-radius:16px;padding:1.75rem 2rem;}
383.pp-panel p{color:#374151;}
384.pp-choose{list-style:none;padding:0;margin:0;}
385.pp-choose li{padding:.7rem 0;border-bottom:1px solid #edeef2;display:flex;gap:.75rem;}
386.pp-choose li:last-child{border-bottom:0;}
387.pp-choose__plan{font-weight:700;color:#111827;min-width:130px;flex-shrink:0;}
388.pp-choose__who{color:#4b5563;}
389@media(max-width:560px){.pp-choose li{flex-direction:column;gap:.15rem;}}
390
391/* Worth-it two columns */
392.pp-worth{display:grid;grid-template-columns:1fr 1fr;gap:1rem;max-width:900px;margin:0 auto;}
393@media(max-width:680px){.pp-worth{grid-template-columns:1fr;}}
394.pp-worth__col{border-radius:14px;padding:1.4rem 1.5rem;border:1px solid #e6e8ee;background:#fff;}
395.pp-worth__col h3{font-size:1.05rem;margin-bottom:.9rem;}
396.pp-worth__col ul{list-style:none;padding:0;margin:0;}
397.pp-worth__col li{position:relative;padding-left:1.6rem;margin-bottom:.6rem;color:#374151;line-height:1.45;}
398.pp-worth__col li:before{position:absolute;left:0;top:0;font-weight:700;}
399.pp-worth__col--yes li:before{content:"\2713";color:#2fb344;}
400.pp-worth__col--no li:before{content:"\2717";color:#dc2626;}
401
402/* FormNX compare: wins / choose-competitor */
403.pp-two{display:grid;grid-template-columns:1fr 1fr;gap:1rem;max-width:980px;margin:1.5rem auto 0;}
404@media(max-width:680px){.pp-two{grid-template-columns:1fr;}}
405.pp-two__card{border-radius:14px;padding:1.4rem 1.5rem;border:1px solid #e6e8ee;background:#fff;}
406.pp-two__card--formnx{border-color:#a7f3d0;background:#f0fdf4;}
407.pp-two__card h3{font-size:1.05rem;margin-bottom:.9rem;}
408.pp-two__card ul{list-style:none;padding:0;margin:0;}
409.pp-two__card li{position:relative;padding-left:1.6rem;margin-bottom:.6rem;color:#374151;line-height:1.45;}
410.pp-two__card--formnx li:before{content:"\2713";position:absolute;left:0;color:#2fb344;font-weight:700;}
411.pp-two__card--competitor li:before{content:"\2192";position:absolute;left:0;color:#6b7280;font-weight:700;}
412
413/* Sticky CTA bar */
414.pp-sticky{position:fixed;left:0;right:0;bottom:0;z-index:1040;background:#0f172a;color:#fff;transform:translateY(110%);transition:transform .25s ease;box-shadow:0 -6px 24px rgba(0,0,0,.18);}
415.pp-sticky.is-visible{transform:translateY(0);}
416.pp-sticky__inner{display:flex;align-items:center;justify-content:center;gap:1rem;padding:.7rem 1rem;flex-wrap:wrap;}
417.pp-sticky__text{font-weight:600;font-size:.95rem;}
418.pp-sticky__text strong{color:#6ee7b7;}
419.pp-sticky .cta-button{margin:0;}
420</style>
421    <style>
422    .menu-item {
423        display: flex;
424        justify-content: space-between;
425        align-items: center;
426    }
427    .menu-divider {
428        border-top: 1px solid white;
429        margin: 0.5rem 0;
430    }
431    .child-category {
432        margin-left: 20px;
433    }
434    .nested-menu {
435        display: none;
436    }
437    .parent-menu {
438        display: flex;
439        justify-content: space-between;
440        align-items: center;
441    }
442    .parent-menu .right-section {
443        display: flex;
444        align-items: center;
445    }
446    .parent-menu .category-menu {
447        margin-left: 10px;
448    }
449    .category-menu {
450        cursor: pointer;
451        background-image: var(--formnx-accordion-btn-icon);
452        width: 1rem;
453        height: 1rem;
454        opacity: 0.7;
455    }
456    .category-menu.active {
457        transform: var(--formnx-accordion-btn-icon-transform);
458    }
459</style></head>
460
461
462<body class="lp2 ">
463
464    <main class="main-content" id="app">
465        
466        <header class="hero container-fluid position-relative">
467            <div class="hero__content container">
468
469                <div class="fixed-nav-container">
470                <nav class="hero-nav position-relative container mx-auto px-0">
471                    <ul class="nav w-100 list-unstyled align-items-center p-0">
472                        <li class="hero-nav__item"><a href="/"><img class="hero-nav__logo" src="https://formnx.com/img/logo-full-transparent.png" change-src-onscroll="https://formnx.com/img/logo-full-transparent.png" alt="FormNX Logo"></a><!-- Don't remove this empty span -->
472<span class=""></span>
473                        </li>
474                        <li id="hero-menu" class="flex-grow-1 hero__nav-list hero__nav-list--mobile-menu ft-menu">
475                            <ul
476                                class="hero__menu-content nav flex-column flex-lg-row ft-menu__slider animated list-unstyled p-2 p-lg-0">
477                                <li class="flex-grow-1">
478                                    <ul
479                                        class="nav nav--lg-side flex-column-reverse flex-lg-row-reverse list-unstyled align-items-center p-0">
480                                        <li class="flex-grow-1">
481                                            <ul
482                                                class="nav nav--lg-side flex-column-reverse flex-lg-row-reverse list-unstyled align-items-center p-0">
483
484                                                                                                    <li class="hero-nav__item"><a href="https://formnx.com/register" class="btn btn-primary">Try For Free</a></li>
485                                                    
486                                                                                                    <li class="hero-nav__item"><a
487                                                    href="https://formnx.com/login" class="hero-nav__link">Login</a></li>
488                                                                                                </ul>
489                                        </li>
490                                        <li class="hero-nav__item"><a href="https://formnx.com/contact" class="hero-nav__link">Contact Us</a>
491                                        </li>
492                                        <li class="hero-nav__item"><a href="https://formnx.com/price" class="hero-nav__link">Pricing</a></li>
493                                        <li class="hero-nav__item dropdown"
494    onmouseenter="if(window.bootstrap && window.matchMedia('(min-width: 992px)').matches){bootstrap.Dropdown.getOrCreateInstance(this.querySelector('.dropdown-toggle')).show()}"
495    onmouseleave="if(window.bootstrap && window.matchMedia('(min-width: 992px)').matches){bootstrap.Dropdown.getOrCreateInstance(this.querySelector('.dropdown-toggle')).hide()}"
496                                        >
497                                            <a href="#" class="hero-nav__link dropdown-toggle" data-bs-toggle="dropdown">Templates</a>
498                                            <ul class="dropdown-menu">
499                                                <li><a class="dropdown-item" href="https://formnx.com/form-templates">Form Templates</a></li>
500                                                <li><a class="dropdown-item" href="https://formnx.com/pdf-templates">PDF Templates</a></li>
501                                            </ul>
502                                        </li>
503                                        <li class="hero-nav__item dropdown"
504    onmouseenter="if(window.bootstrap && window.matchMedia('(min-width: 992px)').matches){bootstrap.Dropdown.getOrCreateInstance(this.querySelector('.dropdown-toggle')).show()}"
505    onmouseleave="if(window.bootstrap && window.matchMedia('(min-width: 992px)').matches){bootstrap.Dropdown.getOrCreateInstance(this.querySelector('.dropdown-toggle')).hide()}">
506                                            <a href="#" class="hero-nav__link dropdown-toggle" data-bs-toggle="dropdown">Solutions</a>
507                                            <ul class="dropdown-menu">
508                                                <li><a class="dropdown-item" href="https://formnx.com">Form Builder</a></li>
509                                                <li><a class="dropdown-item" href="https://formnx.com/pdf-builder">PDF Builder</a></li>
510                                            </ul>
511                                        </li>
512                                        <!-- <li class="hero-nav__item"><a href="https://formnx.com/form-templates" class="hero-nav__link">Templates</a></li> -->
513                                        
514                                        <li class="hero-nav__item"><a href="https://formnx.com" class="hero-nav__link">Home</a></li>
515                                        
516                                    </ul>
517                                </li>
518                            </ul><button close-nav-menu="" class="ft-menu__close-btn animated"><svg class="bi bi-x"
519                                    width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"
520                                    xmlns="http://www.w3.org/2000/svg">
521                                    <path fill-rule="evenodd"
522                                        d="M11.854 4.146a.5.5 0 010 .708l-7 7a.5.5 0 01-.708-.708l7-7a.5.5 0 01.708 0z"
523                                        clip-rule="evenodd"></path>
524                                    <path fill-rule="evenodd"
525                                        d="M4.146 4.146a.5.5 0 000 .708l7 7a.5.5 0 00.708-.708l-7-7a.5.5 0 00-.708 0z"
526                                        clip-rule="evenodd"></path>
527                                </svg></button>
528                        </li>
529                        <li class="hero-nav__item d-lg-none d-flex flex-row-reverse align-items-center gap-1"><button open-nav-menu=""
530                                class="text-center px-2"><i class="fas fa-bars"></i></button>
531                                                            <a href="https://formnx.com/register" class="btn btn-primary btn-sm">Try Free</a>
532                                                    </li>
533                    </ul>
534                </nav>
535                </div>
536
537                
538            </div>
539        </header>
540
541        <div class="pricing-guide-page">
542
543    
544    <div class="pp-sticky" id="pp-sticky">
545        <div class="pp-sticky__inner">
546            <span class="pp-sticky__text">Hitting Jotform's limits? <strong>FormNX has none - unlimited from $15/mo.</strong></span>
547            <a href="https://formnx.com/register" class="cta-button">Try FormNX Free
548                <svg width="18" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"/></svg>
549            </a>
550        </div>
551    </div>
552
553    
554    <div class="templates-hero-section" id="pp-hero">
555        <div class="container-fluid">
556            <div class="row align-items-center">
557                <div class="col-lg-10 mx-auto">
558                                        <p class="pp-meta">Pricing verified October 2026 &middot; updated for 2026</p>
559                                                            <span class="hero-badge mb-3 d-inline-block">An independent Jotform pricing analysis &middot; October 2026</span>
560                    
561                    <h1 class="hero-title mb-3">Jotform Pricing 2026: Plans, Real Costs &amp; a Cheaper Alternative</h1>
562
563                                        <p class="hero-subtitle mb-3">Jotform has a free Starter plan and four paid tiers, starting at $34/mo (Bronze, billed annually) and rising to custom Enterprise pricing. The catch is what each plan limits: forms, form fields, monthly submissions, monthly views, payments and signed documents are all capped per tier, and every plan below Enterprise is single-user.</p>
564                    
565                                        <div class="hero-feature-pills d-flex flex-wrap gap-2 mt-3 mb-3">
566                                                <span class="hero-pill">
567                            <svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24" class="me-1"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg>
568                            Free plan: 5 forms, 100 submissions/mo
569                        </span>
570                                                <span class="hero-pill">
571                            <svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24" class="me-1"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg>
572                            Paid plans from $34/mo (billed annually)
573                        </span>
574                                                <span class="hero-pill">
575                            <svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24" class="me-1"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg>
576                            Forms, fields, views, payments &amp; signatures all capped
577                        </span>
578                                                <span class="hero-pill">
579                            <svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24" class="me-1"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg>
580                            Single user until Enterprise
581                        </span>
582                                            </div>
583                    
584                    <div class="pp-secondary-cta">
585                        <a href="https://formnx.com/register" class="cta-button">Try FormNX Free
586                            <svg width="20" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"/></svg>
587                        </a>
588                        <a href="#pricing-table" class="btn btn-outline-secondary">See the limits</a>
589                    </div>
590                </div>
591            </div>
592        </div>
593    </div>
594
595    
596        <div class="space-between-blocks">
597        <div class="container">
598            <div class="col-lg-9 mx-auto">
599                <div class="pp-quick">
600                    <h2>How much does Jotform cost?</h2>
601                    <ul>
602                                                <li><strong>Free (Starter):</strong> $0 - 5 forms, 100 submissions/mo, Jotform branding.</li>
603                                                <li><strong>Bronze:</strong> $34/mo billed annually ($39 monthly) - 1,000 submissions/mo.</li>
604                                                <li><strong>
604Silver:</strong> $39/mo billed annually ($49 monthly) - 2,500 submissions/mo.</li>
605                                                <li><strong>Gold:</strong> $99/mo billed annually ($129 monthly) - 10,000 submissions/mo, HIPAA.</li>
606                                                <li><strong>Enterprise:</strong> custom pricing - unlimited usage and multi-user access.</li>
607                                            </ul>
608                </div>
609            </div>
610        </div>
611    </div>
612    
613    
614        <div class="space-between-blocks bg-light" id="pricing-table">
615        <div class="container">
616            <div class="col-lg-8 mx-auto text-center mb-4">
617                <p class="block__paragraph--big mb-1">Plans at a glance</p>
618                <h2 class="block__title">What each Jotform plan limits</h2>
619            </div>
620                        <div class="col-lg-9 mx-auto text-center mb-4"><p class="hero-subtitle">Jotform prices by usage, so the question that matters isn&#039;t just the monthly fee - it&#039;s what each tier caps. Here&#039;s how the limits scale across plans.</p></div>
621            
622            <div class="row justify-content-center">
623                <div class="col-lg-11">
624                    <div class="table-responsive">
625                        <table class="table table-bordered align-middle text-center bg-white pp-limits-table">
626                            <thead>
627                                <tr>
628                                    <th class="text-start">Limit</th>
629                                                                        <th>Starter (Free)</th>
630                                                                        <th>Bronze</th>
631                                                                        <th>Silver</th>
632                                                                        <th>Gold</th>
633                                                                        <th>Enterprise</th>
634                                                                    </tr>
635                            </thead>
636                            <tbody>
637                                                                <tr>
638                                    <td class="text-start fw-semibold">Active forms</td>
639                                                                        <td>5</td>
640                                                                        <td>25</td>
641                                                                        <td>50</td>
642                                                                        <td>100</td>
643                                                                        <td>Unlimited</td>
644                                                                    </tr>
645                                                                <tr>
646                                    <td class="text-start fw-semibold">Fields per form</td>
647                                                                        <td>100</td>
648                                                                        <td>250</td>
649                                                                        <td>500</td>
650                                                                        <td>1,000</td>
651                                                                        <td>Unlimited</td>
652                                                                    </tr>
653                                                                <tr>
654                                    <td class="text-start fw-semibold">Monthly submissions</td>
655                                                                        <td>100/mo</td>
656                                                                        <td>1,000/mo</td>
657                                                                        <td>2,500/mo</td>
658                                                                        <td>10,000/mo</td>
659                                                                        <td>Unlimited</td>
660                                                                    </tr>
661                                                                <tr>
662                                    <td class="text-start fw-semibold">Total stored submissions</td>
663                                                                        <td>500</td>
664                                                                        <td>10,000</td>
665                                                                        <td>25,000</td>
666                                                                        <td>100,000</td>
667                                                                        <td>Unlimited</td>
668                                                                    </tr>
669                                                                <tr>
670                                    <td class="text-start fw-semibold">Monthly form views</td>
671                                                                        <td>10,000/mo</td>
672                                                                        <td>100,000/mo</td>
673                                                                        <td>1M/mo</td>
674                                                                        <td>10M/mo</td>
675                                                                        <td>Unlimited</td>
676                                                                    </tr>
677                                                                <tr>
678                                    <td class="text-start fw-semibold">Payment submissions</td>
679                                                                        <td>10/mo</td>
680                                                                        <td>100/mo</td>
681                                                                        <td>250/mo</td>
682                                                                        <td>1,000/mo</td>
683                                                                        <td>Unlimited</td>
684                                                                    </tr>
685                                                                <tr>
686                                    <td class="text-start fw-semibold">Signed documents</td>
687                                                                        <td>10/mo</td>
688                                                                        <td>100/mo</td>
689                                                                        <td>250/mo</td>
690                                                                        <td>1,000/mo</td>
691                                                                        <td>Unlimited</td>
692                                                                    </tr>
693                                                                <tr>
694                                    <td class="text-start fw-semibold">Storage</td>
695                                                                        <td>100 MB</td>
696                                                                        <td>1 GB</td>
697                                                                        <td>10 GB</td>
698                                                                        <td>100 GB</td>
699                                                                        <td>Unlimited</td>
700                                                                    </tr>
701                                                                <tr>
702                                    <td class="text-start fw-semibold">Users</td>
703                                                                        <td>1</td>
704                                                                        <td>1</td>
705                                                                        <td>1</td>
706                                                                        <td>1</td>
707                                                                        <td>
707Multi-user</td>
708                                                                    </tr>
709                                                                <tr>
710                                    <td class="text-start fw-semibold">HIPAA</td>
711                                                                        <td><span class="pp-no">No</span></td>
712                                                                        <td><span class="pp-no">No</span></td>
713                                                                        <td><span class="pp-no">No</span></td>
714                                                                        <td>Yes</td>
715                                                                        <td>Yes</td>
716                                                                    </tr>
717                            </tbody>
718                        </table>
719                    </div>
720                                        <p class="text-muted text-center small mt-3">Limits verified against jotform.com/pricing in October 2026. Note the separate lifetime cap on total stored submissions - the free plan stops at 500 stored submissions even if you never exceed 100 in a month. Nonprofit and education accounts get 50% off Bronze, Silver and Gold. Full prices are in the summary above.</p>
721                    
722                    <div class="pp-callout">
723                        <p>FormNX caps none of these &mdash; unlimited forms, fields, submissions &amp; views, with 5 team members from $15/mo.</p>
724                        <a href="#formnx-compare" class="btn btn-outline-secondary">Compare FormNX &darr;</a>
725                    </div>
726                </div>
727            </div>
728        </div>
729    </div>
730    
731    
732        <div class="space-between-blocks">
733        <div class="container">
734            <div class="col-lg-8 mx-auto text-center mb-4">
735                <p class="block__paragraph--big mb-1">What each plan gets you</p>
736                <h2 class="block__title">Jotform plans, explained</h2>
737            </div>
738            <div class="pp-breakdown">
739                                <div class="pp-breakdown__item">
740                    <h3>Starter (Free)</h3>
741                    <p>5 forms and 100 submissions a month, 100 fields per form and 100 MB of storage, with Jotform branding. Enough to test the product or run one low-traffic form - most businesses hit a cap within days. Payments and signed documents are limited to 10 each per month.</p>
742                </div>
743                                <div class="pp-breakdown__item">
744                    <h3>Bronze</h3>
745                    <p>25 forms, 1,000 submissions/mo, 250 fields per form, 100 payment submissions, 100 signed documents and 1 GB of storage. The entry paid tier for a single user with modest, predictable volume.</p>
746                </div>
747                                <div class="pp-breakdown__item">
748                    <h3>Silver</h3>
749                    <p>50 forms, 2,500 submissions/mo, 500 fields per form, 250 payments and 250 signed documents, 10 GB storage. Jotform&#039;s most popular middle tier for growing solo businesses.</p>
750                </div>
751                                <div class="pp-breakdown__item">
752                    <h3>Gold</h3>
753                    <p>The first tier with HIPAA features. 100 forms, 10,000 submissions/mo, 1,000 fields per form, 1,000 payments and 1,000 signed documents, 100 GB storage. The jump up from Silver more than doubles the effective monthly price.</p>
754                </div>
755                                <div class="pp-breakdown__item">
756                    <h3>Enterprise</h3>
757                    <p>Custom-quoted. Lifts every cap - unlimited forms, fields, submissions, views, payments and signed documents - and adds multi-user access, SSO and dedicated support. The only plan without a public price, and the only way to add teammates.</p>
758                </div>
759                            </div>
760        </div>
761    </div>
762    
763    
764        <div class="space-between-blocks bg-light">
765        <div class="container">
766            <div class="col-lg-8 mx-auto text-center mb-4">
767                <h2 class="block__title">Is Jotform free?</h2>
768            </div>
769            <div class="pp-panel">
770                <p>Yes - Jotform's Starter plan is free forever, with no credit card required. It includes <strong>5 forms, 100 submissions per month, 100 fields per form, 100 MB of storage and 10,000 monthly views</strong>, with Jotform branding on your forms.</p><p>Two limits catch people out. Payments and signed documents are capped at <strong>10 each per month</strong>, and there is a separate lifetime ceiling of <strong>500 total stored submissions</strong> - hit that and the free plan stops storing new responses even if you never exceed 100 in a single month.</p><p>The other catch is volume. Those caps are enough to test the product or run one low-traffic form, but most businesses hit them within days. For unlimited forms, fields, submissions and views on a free plan, see the <a href="#formnx-compare">FormNX comparison below</a>.</p>
771            </div>
772        </div>
773    </div>
774    
775    
776        <div class="space-between-blocks">
777        <div class="container">
778            <div class="pp-deep">
779                                
780                <section class="pp-deep__item"  id="jotform-enterprise-pricing" >
781                    <h2 class="pp-deep__title">Jotform Enterprise Pricing</h2>
782                    <p class="pp-deep__lead">Jotform Enterprise is quote-only - there is no public price. Independent procurement data puts the median contract at <strong>$9,549 per year</strong>, with buyers landing anywhere between $6,772 and $42,974 depending on seats, submission volume and compliance requirements. It is the only Jotform tier with multi-user access, unlimited usage and SSO.</p>
783<p>
783Three public data points give you a realistic range before you talk to sales:</p>
784<ul>
785<li><strong>$9,549/year median</strong> - Vendr's procurement dataset for Jotform contracts (range $6,772-$42,974).</li>
786<li><strong>$8,328 for a base package</strong> - the UK Government's G-Cloud framework lists a Jotform Enterprise base package covering 5 users and 1 domain.</li>
787<li><strong>~$9,000/year for 10 users</strong> - a figure reported by a buyer on r/nocode.</li>
788</ul>
789<p>What moves your quote: the number of user seats (Enterprise is aimed at teams of 5+), expected submission volume, whether you need localized data residency, and add-ons like HIPAA, SSO, a custom domain and white-labeling. Nonprofit and educational organizations get <strong>30% off Enterprise</strong>, versus 50% off the standard paid plans.</p>
790<p>The trade-off worth naming: Enterprise is the only way past Jotform's per-tier caps and the only way to add a second user, so teams often land there for seat count rather than volume. FormNX publishes prices for every plan including team and agency tiers - <a href="https://formnx.com/price">see FormNX pricing</a>.</p>
791                </section>
792                                
793                <section class="pp-deep__item"  id="jotform-nonprofit-pricing" >
794                    <h2 class="pp-deep__title">Jotform Nonprofit &amp; Education Pricing</h2>
795                    <p class="pp-deep__lead">Jotform gives registered nonprofits and educational institutions <strong>50% off the Bronze, Silver and Gold plans and 30% off Enterprise</strong>. The discount is not applied at checkout - you apply through Jotform with proof of your organization's status (such as 501(c)(3) documentation) and it is added to your account once approved.</p>
796<p>At 50% off the annual rate, the effective monthly cost works out to roughly <strong>$17/mo for Bronze, $19.50/mo for Silver and $49.50/mo for Gold</strong>. The plan limits do not change - you still get the same caps on forms, submissions, views, payments and signed documents, and Bronze through Gold remain single-user.</p>
797<p>That last point matters for nonprofits specifically: a discounted Gold plan is still one login. If two people at your organization need access to the same forms and submissions, you are looking at quote-only Enterprise, where the discount drops to 30%.</p>
798<p><strong>FormNX nonprofit pricing:</strong> FormNX offers registered nonprofits a <strong>50% discount on all plans</strong> - and unlike Jotform, every FormNX plan already includes unlimited forms, submissions and views, plus up to 5 team members in your workspace from the entry plan. To claim it, <a href="https://formnx.com/contact">contact FormNX support</a> with your organization's details and the team will apply the discount to your account.</p>
799                </section>
800                                
801                <section class="pp-deep__item"  id="jotform-hipaa-pricing" >
802                    <h2 class="pp-deep__title">Jotform HIPAA Pricing</h2>
803                    <p class="pp-deep__lead">HIPAA compliance starts on Jotform's <strong>Gold plan at $99/mo billed annually ($129 month-to-month)</strong>, and is also included on Enterprise. The free Starter, Bronze and Silver plans do not include HIPAA features, so any workflow that touches protected health information needs Gold at minimum.</p>
804<p>This is the single biggest price jump in Jotform's lineup. Silver to Gold roughly two-and-a-half times the monthly cost ($39 to $99 on annual billing), and for many healthcare teams the only reason to make that jump is the compliance feature set rather than the higher usage caps that come with it.</p>
805<p>If you need HIPAA specifically, Jotform is a reasonable choice and we say so plainly - FormNX does not currently offer a HIPAA-compliant tier. Where FormNX fits is every other regulated-adjacent workflow: <a href="https://formnx.com/form-features/gdpr-compliance">GDPR-compliant forms</a>, <a href="https://formnx.com/form-features/password-protection">password-protected forms</a> and <a href="https://formnx.com/form-features/email-otp-verification">email OTP verification</a>, without per-tier usage caps.</p>
806                </section>
807                                
808                <section class="pp-deep__item"  id="jotform-sign-pricing" >
809                    <h2 class="pp-deep__title">Jotform Sign Pricing</h2>
810                    <p class="pp-deep__lead">Jotform Sign has no separate subscription - e-signatures are built into every Jotform plan, including the free Starter tier. What changes by plan is the monthly signed-document cap: <strong>
81010 on Starter, 100 on Bronze, 250 on Silver, 1,000 on Gold, and unlimited only on Enterprise</strong>.</p>
811<p>So "Jotform Sign pricing" is really just your Jotform plan price, and the number to watch is how many documents you expect to get signed each month. A small agency sending 15 contracts a month is already past the free tier on signatures alone, regardless of how few form submissions it collects.</p>
812<p>FormNX includes <strong>unlimited signed documents on every paid plan</strong> with no monthly signature cap - see <a href="https://formnx.com/form-features/e-signature-forms">e-signature forms</a>.</p>
813                </section>
814                                
815                <section class="pp-deep__item"  id="jotform-payment-fees" >
816                    <h2 class="pp-deep__title">Jotform Payment Fees &amp; Transaction Costs</h2>
817                    <p class="pp-deep__lead">Jotform charges <strong>no platform fee on payments, on any plan</strong> - including the free Starter tier. When someone pays through your form, you pay only the payment processor's own standard rate (Stripe, PayPal or Square), exactly as you would using that processor directly.</p>
818<p>The real cost to watch is not a fee but a cap: <strong>payment submissions are metered per plan</strong>. The free plan accepts 10 payment submissions a month, Bronze 100, Silver 250 and Gold 1,000 - only Enterprise removes the ceiling. A form that sells tickets or collects deposits can hit its payment cap long before its general submission cap, and once it does, the form stops taking payments until the month resets or you upgrade.</p>
819<p>FormNX handles fees the same way on paid plans - no platform surcharge, processor rates only - and adds no cap on payment submissions. (On the FormNX free plan, payments carry a 7.5% Stripe Connect fee, so paid plans are the fair comparison.) See <a href="https://formnx.com/form-features/payment-forms">FormNX payment forms</a>.</p>
820                </section>
821                                
822                <section class="pp-deep__item"  id="jotform-monthly-vs-annual" >
823                    <h2 class="pp-deep__title">Jotform Monthly vs Annual Pricing</h2>
824                    <p class="pp-deep__lead">Paying month-to-month costs more on every Jotform tier. Bronze is <strong>$39 monthly versus $34/mo billed annually</strong>, Silver <strong>$49 versus $39</strong>, and Gold <strong>$129 versus $99</strong>. Committing to a full year saves $60 on Bronze, $120 on Silver and $360 on Gold.</p>
825<p>In annual terms that is $408/year for Bronze, $468/year for Silver and $1,188/year for Gold, paid upfront. The saving is real, but it is worth weighing against the thing annual billing does not fix: if your submissions or form count grow past your tier mid-year, you still have to upgrade to lift the cap, and you are already locked into twelve months at the lower tier.</p>
826<p>Jotform also runs periodic sales and offers a 30-day money-back guarantee, so the effective price at signup can be lower than list. When Jotform's own marketing says paid plans "start at $19 per month", that is a promotional annual rate on Bronze during a sale - the standard list rates are the ones above.</p>
827                </section>
828                            </div>
829        </div>
830    </div>
831    
832    
833        <div class="space-between-blocks">
834        <div class="container">
835            <div class="col-lg-8 mx-auto text-center mb-4">
836                <h2 class="block__title">Which Jotform plan should you choose?</h2>
837            </div>
838            <div class="pp-panel">
839                <ul class="pp-choose">
840                                        <li><span class="pp-choose__plan">Starter (Free)</span><span class="pp-choose__who">You just want to test Jotform or run one occasional, low-traffic form.</span></li>
841                                        <li><span class="pp-choose__plan">Bronze</span><span class="pp-choose__who">You are a solo user collecting under ~1,000 submissions a month.</span></li>
842                                        <li><span class="pp-choose__plan">Silver</span><span class="pp-choose__who">You need more forms and up to 2,500 submissions - the popular middle ground.</span></li>
843                                        <li><span class="pp-choose__plan">Gold</span><span class="pp-choose__who">You collect high volume or need HIPAA compliance.</span></li>
844                                        <li><span class="pp-choose__plan">Enterprise</span><span class="pp-choose__who">You need unlimited usage, multiple users, or SSO.</span></li>
845                                    </ul>
846            </div>
847        </div>
848    </div>
849    
850    
851        <div class="space-between-blocks bg-light">
852        <div class="container">
853            <div class="col-lg-8 mx-auto text-center mb-4">
854                <h2 class="block__title">Is Jotform worth the cost?</h2>
855            </div>
856            <div class="pp-worth">
857                <div class="pp-worth__col pp-worth__col--yes">
858                    <h3>Worth it if&hellip;</h3>
859                    <ul>
860                        <li>You are a single user whose volume fits inside one tier&#039;s caps</li><li>You need HIPAA compliance and can use the Gold plan</li><li>You rely on Jotform&#039;s specific native integrations or its large template library</li>                    </ul>
861                </div>
862                <div class="pp-worth__col pp-worth__col--no">
863                    <h3>Skip it if&hellip;</h3>
864                    <ul>
865                        <li>Your forms, submissions or views grow month to month (caps force repeated upgrades)</li><li>You need more than one user without paying for Enterprise</li><li>You want unlimited payments or signed documents without a custom quote</li>                    </ul>
866                </div>
867            </div>
868        </div>
869    </div>
870    
871    
872        <div class="space-between-blocks">
873        <div class="container">
874            <div class="col-lg-8 mx-auto text-center mb-5">
875                <p class="block__paragraph--big mb-1">What the headline price doesn&#039;t show</p>
876                <h2 class="block__title">Jotform&#039;s hidden costs</h2>
877            </div>
878            <div class="row g-4 justify-content-center">
879                                <div class="col-lg-3 col-md-6">
880                    <div class="pain-card">
881                        <div class="pain-card__icon">
882                            <svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
882<path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01M5.07 19h13.86c1.54 0 2.5-1.67 1.73-3L13.73 4c-.77-1.33-2.69-1.33-3.46 0L3.34 16c-.77 1.33.19 3 1.73 3z"/></svg>
883                        </div>
884                        <h3 class="pain-card__title">Almost everything is metered</h3>
885                                                <p class="pain-card__desc">It is not just submissions. Forms, fields per form, monthly views, payments, signed documents and storage all have their own per-tier ceilings - cross any one and you are pushed to upgrade.</p>
886                                            </div>
887                </div>
888                                <div class="col-lg-3 col-md-6">
889                    <div class="pain-card">
890                        <div class="pain-card__icon">
891                            <svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01M5.07 19h13.86c1.54 0 2.5-1.67 1.73-3L13.73 4c-.77-1.33-2.69-1.33-3.46 0L3.34 16c-.77 1.33.19 3 1.73 3z"/></svg>
892                        </div>
893                        <h3 class="pain-card__title">Single user on every plan but Enterprise</h3>
894                                                <p class="pain-card__desc">Bronze, Silver and Gold are all single-seat. The moment a teammate needs access to your forms or submissions, you jump to custom-priced Enterprise.</p>
895                                            </div>
896                </div>
897                                <div class="col-lg-3 col-md-6">
898                    <div class="pain-card">
899                        <div class="pain-card__icon">
900                            <svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01M5.07 19h13.86c1.54 0 2.5-1.67 1.73-3L13.73 4c-.77-1.33-2.69-1.33-3.46 0L3.34 16c-.77 1.33.19 3 1.73 3z"/></svg>
901                        </div>
902                        <h3 class="pain-card__title">Caps stop your forms mid-month</h3>
903                                                <p class="pain-card__desc">Hit a submission, payment or signed-document cap partway through the month and that form simply stops collecting until you upgrade or the month resets.</p>
904                                            </div>
905                </div>
906                                <div class="col-lg-3 col-md-6">
907                    <div class="pain-card">
908                        <div class="pain-card__icon">
909                            <svg fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01M5.07 19h13.86c1.54 0 2.5-1.67 1.73-3L13.73 4c-.77-1.33-2.69-1.33-3.46 0L3.34 16c-.77 1.33.19 3 1.73 3z"/></svg>
910                        </div>
911                        <h3 class="pain-card__title">Enterprise is quote-only</h3>
912                                                <p class="pain-card__desc">The only uncapped, multi-user plan has no public price. Users on Reddit report Enterprise quotes around $9k/year - you cannot self-serve your way past the limits.</p>
913                                            </div>
914                </div>
915                            </div>
916        </div>
917    </div>
918    
919    
920    <div class="space-between-blocks bg-light" id="formnx-compare">
921        <div class="container">
922            <div class="col-lg-8 mx-auto text-center mb-4">
923                <p class="block__paragraph--big mb-1">The no-limits alternative</p>
924                <h2 class="block__title">Jotform vs FormNX: limits compared</h2>
925            </div>
926
927                        <div class="col-lg-9 mx-auto text-center mb-4">
928                <p class="hero-subtitle">This is the core difference. Jotform meters usage - forms, fields, views, submissions, payments and signed documents are all capped, and you pay more to lift them. FormNX caps none of those. Instead you scale by workspaces and team members: the entry paid plan gives you one workspace you can invite your whole team into (up to 5 members), with everything else unlimited.</p>
929            </div>
930            
931                        <div class="row justify-content-center mb-4">
932                <div class="col-lg-9 text-center">
933                    <img src="https://formnx.com/img/jotform-pricing.png"
934                         alt="Jotform pricing vs FormNX pricing comparison"
935                         class="img-fluid pp-compare-img" loading="lazy"
936                         onerror="this.closest('.row').style.display='none'">
937                </div>
938            </div>
939            
940                        <div class="row justify-content-center">
941                <div class="col-lg-10">
942                    <div class="table-responsive">
943                        <table class="table table-bordered align-middle text-center bg-white alt-comparison-table">
944                            <thead>
945                                <tr>
946                                    <th class="text-start" style="width:30%">Where it counts</th>
947                                    <th style="width:35%">
948                                        <span class="col-brand"><img src="https://formnx.com/img/logo.svg" alt="FormNX"><span>FormNX</span></span>
949                                    </th>
950                                    <th style="width:35%">
951                                        <span class="col-brand">
952                                                                                        <span>Jotform</span>
953                                        </span>
954                                    </th>
955                                </tr>
956                            </thead>
957                            <tbody>
958                                                                <tr>
959                                    <td class="text-start fw-semibold">Active forms</td>
960                                    <td><strong>Unlimited</strong></td>
961                                    <td>Capped (5 / 25 / 50 / 100)</td>
962                                </tr>
963                                                                <tr>
964                                    <td class="text-start fw-semibold">Fields per form</td>
965                                    <td><strong>Unlimited</strong></td>
966                                    <td>Capped (100 / 250 / 500 / 1,000)</td>
967                                </tr>
968                                                                <tr>
969                                    <td class="text-start fw-semibold">Monthly submissions</td>
970                                    <td><strong>Unlimited</strong></td>
971                                    <td>Capped (100 / 1,000 / 2,500 / 10,000)</td>
972                                </tr>
973                                                                <tr>
974                                    <td class="text-start fw-semibold">Monthly form views</td>
975                                    <td><strong>Unlimited</strong></td>
976                                    <td>Capped (10K / 100K / 1M / 10M)</td>
977                                </tr>
978                                                                <tr>
979                                    <td class="text-start fw-semibold">Payment submissions</td>
980                                    <td><strong>Unlimited</strong> on paid plans</td>
981                                    <td>Capped (10 / 100 / 250 / 1,000)</td>
982                                </tr>
983                                                                <tr>
984                                    <td class="text-start fw-semibold">Signed documents</td>
985                                    <td><strong>Unlimited</strong> on paid plans</td>
986                                    <td>Capped (10 / 100 / 250 / 1,000)</td>
987                                </tr>
988                                                                <tr>
989                                    <td class="text-start fw-semibold">Storage &amp; file size</td>
990                                    <td><strong>Unlimited</strong> on paid plans</td>
991                                    <td>Capped (100 MB / 1 GB / 10 GB / 100 GB)</td>
992                                </tr>
993                                                                <tr>
994                                    <td class="text-start fw-semibold">Team access</td>
995                                    <td><strong>5 members</strong> in your workspace, from the entry plan</td>
996                                    <td>Single user until Enterprise</td>
997                                </tr>
998                                                                <tr>
999                                    <td class="text-start fw-semibold">How you scale</td>
1000                                    <td>Add <strong>workspaces</strong>, not usage caps</td>
1001                                    <td>Upgrade tiers to lift caps</td>
1002                                </tr>
1003                                                                <tr>
1004                                    <td class="text-start fw-semibold">Entry paid price</td>
1005                                    <td><strong>$15/mo</strong> ($12 annually)</td>
1006                                    <td>$34/mo (Bronze, annually)</td>
1007                                </tr>
1008                                                            </tbody>
1009                        </table>
1010                    </div>
1011                </div>
1012            </div>
1013            
1014            <div class="pp-two">
1015                                <div class="pp-two__card pp-two__card--formnx">
1016                    <h3>Where FormNX wins</h3>
1017                    <ul>
1018                        <li>No caps on forms, fields, submissions or views - on any plan, including free</li><li>Invite up to 5 team members into your workspace from the entry plan</li><li>Unlimited payments, signed documents, storage and file-upload size on paid plans</li><li>You scale by adding workspaces, never by paying to lift a usage limit</li>                    </ul>
1019                </div>
1020                                                <div class="pp-two__card pp-two__card--competitor">
1021                    <h3>Choose Jotform if&hellip;</h3>
1022                    <ul>
1023                        <li>You need HIPAA compliance today (Jotform includes it on Gold and Enterprise)</li><li>You depend on Jotform&#039;s 10,000+ template library or a specific native enterprise connector</li><li>You want their wider widget and app ecosystem (Jotform Tables, Apps, Store)</li>                    </ul>
1024                </div>
1025                            </div>
1026
1027            <div class="text-center mt-4">
1028                <a href="https://formnx.com/register" class="cta-button">Start free on FormNX
1029                    <svg width="20" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1029<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"/></svg>
1030                </a>
1031                <div class="mt-3"><a href="https://formnx.com/jotform-alternative" class="link-secondary">See the full FormNX vs Jotform comparison &rarr;</a></div>
1032                <div class="mt-2 small text-muted">
1033                    Explore FormNX:
1034                    <a href="/form-features/payment-forms">payment forms</a> &middot;
1035                    <a href="/form-features/e-signature-forms">e-signature forms</a> &middot;
1036                    <a href="/pdf-builder">PDF builder</a> &middot;
1037                    <a href="/form-features/conditional-logic">conditional logic</a>
1038                </div>
1039            </div>
1040
1041                        <p class="text-muted text-center small mt-3">FormNX pricing verified at formnx.com/price, October 2026. The entry FormNX plan includes one workspace with up to 5 members; higher plans add more workspaces. Both FormNX and Jotform charge no platform surcharge on payments on paid plans - you pay only Stripe/PayPal standard processing fees.</p>
1042                    </div>
1043    </div>
1044
1045    
1046            <div class="space-between-blocks">
1047        <div class="container">
1048            <div class="col-lg-8 mx-auto">
1049                
1050                <div class="alt-final-review">
1051    <div class="alt-final-review__stars" aria-label="5 out of 5 stars">
1052        <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>    </div>
1053
1054    <p class="alt-final-review__text">"I&#039;ve been looking for an alternative to Jotform - one that would accept payments directly from the form. The learning curve is short, supported by great customer service which never let me down."</p>
1055
1056    <div class="alt-final-review__footer">
1057                    <img src="https://formnx.com/img/testimonial/Evelyn.png" alt="Evelyn Townsend" class="alt-final-review__avatar" loading="lazy">
1058        
1059        <div class="alt-final-review__identity">
1060                            <strong>Evelyn Townsend</strong>
1061                                        <small>Canada &middot; Switched from Jotform</small>
1062                    </div>
1063
1064                    <a href="https://trstp.lt/AfrOtH7sr" target="_blank" rel="noopener" class="alt-final-review__verify" title="Verified on Trustpilot">
1065                <img src="https://formnx.com/img/trustpilot-logo.svg" alt="G2">                Verified on Trustpilot
1066            </a>
1067            </div>
1068</div>
1069            </div>
1070        </div>
1071    </div>
1072    
1073    
1074    <div class="faq-accordion-block space-between-blocks">
1075    <div class="container">
1076        <div class="col-lg-9 mx-auto text-center px-0 mb-4 mk-section-head">
1077                            <span class="block__pre-title">Everything you need to know</span>
1078                        <h2 class="block__title--big mb-2">Jotform Pricing FAQs</h2>
1079                    </div>
1080
1081        <div class="justify-content-center">
1082            <div id="faq-accordion-block" class="faq-accordion-block__container">
1083                <div class="row px-4">
1084                    <div class="col-lg-12">
1085                        <ul class="faq-accordion__list">
1086                                                            <li class="faq-accordion__section">
1087                                    <div class="faq-accordion">
1088                                        <h3 class="faq-accordion__title">How much does Jotform cost per month?</h3>
1089                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1090                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1091                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1092                                        </svg>
1093                                    </div>
1094                                    <div class="faq-accordion__content">
1095                                        <p class="faq-accordion__paragraph">Jotform has a free Starter plan ($0) and four paid tiers: Bronze is $39/mo ($34/mo billed annually), Silver $49/mo ($39 annually), Gold $129/mo ($99 annually), and Enterprise is custom-priced. The annual prices are the effective monthly cost when you pay for a full year upfront.</p>
1096                                    </div>
1097                                </li>
1098                                                            <li class="faq-accordion__section">
1099                                    <div class="faq-accordion">
1100                                        <h3 class="faq-accordion__title">Is Jotform free?</h3>
1101                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1102                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1103                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1104                                        </svg>
1105                                    </div>
1106                                    <div class="faq-accordion__content">
1107                                        <p class="faq-accordion__paragraph">Yes. Jotform's Starter plan is free forever and includes 5 forms, 100 submissions per month, 100 MB of storage and 10,000 monthly views, with Jotform branding on your forms. Payments and signed documents are capped at 10 each per month, so most businesses outgrow the free plan quickly.</p>
1108                                    </div>
1109                                </li>
1110                                                            <li class="faq-accordion__section">
1111                                    <div class="faq-accordion">
1112                                        <h3 class="faq-accordion__title">What is cheaper than Jotform?</h3>
1113                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1114                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1115                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1116                                        </svg>
1117                                    </div>
1118                                    <div class="faq-accordion__content">
1119                                        <p class="faq-accordion__paragraph">FormNX is cheaper at every comparable volume. Its entry paid plan is $15/mo ($12 billed annually) versus Jotform's $34/mo Bronze, and FormNX gives you unlimited submissions and 5 users where Jotform caps submissions and limits you to a single user until Enterprise.</p>
1120                                    </div>
1121                                </li>
1122                                                            <li class="faq-accordion__section">
1123                                    <div class="faq-accordion">
1124                                        <h3 class="faq-accordion__title">Does Jotform charge transaction or payment fees?</h3>
1125                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1126                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1127                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1128                                        </svg>
1129                                    </div>
1130                                    <div class="faq-accordion__content">
1131                                        <p class="faq-accordion__paragraph">Jotform charges no platform surcharge on payments on any plan - you pay only Stripe, PayPal or Square's standard processing fees. However, the number of payment submissions you can collect is capped per tier (10 on free, up to 1,000 on Gold; unlimited only on Enterprise).</p>
1132                                    </div>
1133                                </li>
1134                                                            <li class="faq-accordion__section">
1135                                    <div class="faq-accordion">
1136                                        <h3 class="faq-accordion__title">Does Jotform offer a nonprofit discount?</h3>
1137                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1138                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1139                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1140                                        </svg>
1141                                    </div>
1142                                    <div class="faq-accordion__content">
1143                                        <p class="faq-accordion__paragraph">Yes. Nonprofit and educational organizations get 50% off the Bronze, Silver and Gold plans, and 30% off Enterprise. You apply through Jotform with proof of your organization's status. FormNX also offers nonprofits 50% off all plans - <a href="https://formnx.com/contact">
1143contact FormNX support</a> to claim it.</p>
1144                                    </div>
1145                                </li>
1146                                                            <li class="faq-accordion__section">
1147                                    <div class="faq-accordion">
1148                                        <h3 class="faq-accordion__title">How much is Jotform Enterprise?</h3>
1149                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1150                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1151                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1152                                        </svg>
1153                                    </div>
1154                                    <div class="faq-accordion__content">
1155                                        <p class="faq-accordion__paragraph">Jotform Enterprise is custom-priced and quote-based - there is no public price. It removes all per-tier caps and adds multi-user access, SSO and dedicated support. Vendr's procurement data puts the median Jotform contract at $9,549 per year (with buyers ranging from $6,772 to $42,974), and the UK Government's G-Cloud framework lists a base package covering 5 users and 1 domain at $8,328. Your own quote depends on seats, submission volume and compliance needs.</p>
1156                                    </div>
1157                                </li>
1158                                                            <li class="faq-accordion__section">
1159                                    <div class="faq-accordion">
1160                                        <h3 class="faq-accordion__title">Does Jotform have HIPAA compliance?</h3>
1161                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1162                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1163                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1164                                        </svg>
1165                                    </div>
1166                                    <div class="faq-accordion__content">
1167                                        <p class="faq-accordion__paragraph">Yes, but only on the Gold and Enterprise plans. The free, Bronze and Silver tiers do not include HIPAA features, so healthcare workflows that handle protected health information need at least Gold ($99/mo annually).</p>
1168                                    </div>
1169                                </li>
1170                                                            <li class="faq-accordion__section">
1171                                    <div class="faq-accordion">
1172                                        <h3 class="faq-accordion__title">How much does Jotform Sign cost?</h3>
1173                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1174                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1175                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1176                                        </svg>
1177                                    </div>
1178                                    <div class="faq-accordion__content">
1179                                        <p class="faq-accordion__paragraph">Jotform Sign is not a separate subscription - e-signatures are built into every Jotform plan, including the free Starter plan. What changes by tier is how many signed documents you can collect each month: 10 on Starter (free), 100 on Bronze, 250 on Silver, 1,000 on Gold and unlimited only on Enterprise. So "Jotform Sign pricing" is really just your Jotform plan price, with the monthly signed-document cap being the limit to watch. FormNX includes unlimited signed documents on its paid plans - see the <a href="#formnx-compare">comparison below</a>.</p>
1180                                    </div>
1181                                </li>
1182                                                            <li class="faq-accordion__section">
1183                                    <div class="faq-accordion">
1184                                        <h3 class="faq-accordion__title">What are the disadvantages of Jotform?</h3>
1185                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1186                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1187                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1188                                        </svg>
1189                                    </div>
1190                                    <div class="faq-accordion__content">
1191                                        <p class="faq-accordion__paragraph">The main drawback is that Jotform meters usage: forms, fields per form, monthly submissions, monthly views, payments and signed documents are all capped per plan, so growing teams have to keep upgrading. Every plan below Enterprise is also single-user, and Enterprise pricing is quote-only. A <a href="https://formnx.com/jotform-alternative">Jotform alternative like FormNX</a> removes those usage caps and lets you invite a team on the entry plan.</p>
1192                                    </div>
1193                                </li>
1194                                                            <li class="faq-accordion__section">
1195                                    <div class="faq-accordion">
1196                                        <h3 class="faq-accordion__title">Is Google Forms or Jotform better?</h3>
1197                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1198                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1199                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1200                                        </svg>
1201                                    </div>
1202                                    <div class="faq-accordion__content">
1203                                        <p class="faq-accordion__paragraph">Google Forms is free and great for simple internal surveys, while Jotform is more powerful for payments, e-signatures and workflows but costs more and caps usage. If you want Jotform-level features without the caps, see our <a href="https://formnx.com/detail
1203s/blog/Jotform-Vs-Googleforms/">Jotform vs Google Forms comparison</a>.</p>
1204                                    </div>
1205                                </li>
1206                                                            <li class="faq-accordion__section">
1207                                    <div class="faq-accordion">
1208                                        <h3 class="faq-accordion__title">What are the limitations of the Jotform free version?</h3>
1209                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1210                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1211                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1212                                        </svg>
1213                                    </div>
1214                                    <div class="faq-accordion__content">
1215                                        <p class="faq-accordion__paragraph">The Starter (free) plan caps you at 5 active forms, 100 submissions per month, 100 fields per form, 10,000 monthly form views and 100 MB of storage, with Jotform branding on every form. Payments and signed documents are limited to 10 each per month, and a separate lifetime ceiling of 500 total stored submissions applies - once you reach it, new responses stop being stored even if you are under the monthly limit.</p>
1216                                    </div>
1217                                </li>
1218                                                            <li class="faq-accordion__section">
1219                                    <div class="faq-accordion">
1220                                        <h3 class="faq-accordion__title">Does Jotform have discounts or sales?</h3>
1221                                        <svg class="faq-accordion__icon" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
1222                                            <path d="M24 24H0V0h24v24z" fill="none" opacity=".87"></path>
1223                                            <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z"></path>
1224                                        </svg>
1225                                    </div>
1226                                    <div class="faq-accordion__content">
1227                                        <p class="faq-accordion__paragraph">Yes. Nonprofits and educational institutions get 50% off Bronze, Silver and Gold (30% off Enterprise), annual billing is discounted against month-to-month on every tier, and Jotform runs periodic seasonal sales. All paid plans come with a 30-day money-back guarantee.</p>
1228                                    </div>
1229                                </li>
1230                                                    </ul>
1231                    </div>
1232                </div>
1233            </div>
1234        </div>
1235    </div>
1236</div>
1237
1238    
1239    <div class="cta-section">
1240        <div class="container">
1241            <div class="cta-content">
1242                <div class="row">
1243                    <div class="col-12 text-center">
1244                        <h2 class="cta-title">Get unlimited submissions - without the caps</h2>
1245                        <p class="cta-subtitle">Start free with unlimited forms and submissions. Upgrade only to unlock features, never to lift a volume cap.</p>
1246                        <a href="https://formnx.com/register" class="cta-button">Get Started Free
1247                            <svg width="20" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"/></svg>
1248                        </a>
1249                        <a href="javascript:void(0)"
1250   class="cta-button cta-button--secondary"
1251   data-cal-link="nikhil-agrawal/formnx-support"
1252   data-cal-namespace="formnx-support"
1253   data-cal-config='{"layout":"month_view","useSlotsViewOnSmallScreen":"true"}'>Book a Demo</a>
1254                        <div class="mt-4"><small style="color: rgba(255,255,255,0.7);">No Credit Card Required &bull; Unlimited Forms &amp; Submissions</small></div>
1255                    </div>
1256                </div>
1257            </div>
1258        </div>
1259    </div>
1260
1261</div>
1262
1263        <div class="block-41 py-5 border-top">
1264    <div class="container">
1265      <div class="row gx-3">
1266
1267        <div class="col-sm-6 col-lg-2 mb-4 mb-lg-0">
1268            <img class="block-41__logo mb-3" src="https://formnx.com/img/logo.svg" alt="FormNX" style="height: 48px;">
1269
1270            <ul class="block-41__links-list list-unstyled p-0 mb-0">
1271              <li class="block-41__li">
1272                <a href="https://www.g2.com/products/formnx/reviews" target="_blank" rel="noopener" class="block-41__li-link d-inline-flex align-items-center">
1273                  <img src="https://formnx.com/img/g2-logo.svg" alt="G2" style="height: 18px; margin-right: 6px;">
1274                  Reviews on G2
1275                </a>
1276              </li>
1277              <li class="block-41__li">
1278                <a href="https://www.trustpilot.com/review/formnx.com" target="_blank" rel="noopener" class="block-41__li-link d-inline-flex align-items-center">
1279                  <img src="https://formnx.com/img/trustpilot-logo.svg" alt="Trustpilot" style="height: 18px; margin-right: 6px;">
1280                  Reviews on Trustpilot
1281                </a>
1282              </li>
1283              <li class="block-41__li">
1284                <a href="https://status.formnx.com/" target="_blank" rel="noopener" class="block-41__li-link d-inline-flex align-items-center">
1285                  <span class="d-inline-block rounded-circle bg-success" style="height: 9px; width: 9px; margin-right: 8px;"></span>
1286                  System Status
1287                </a>
1288              </li>
1289            </ul>
1290
1291        </div>
1292
1293
1294        <div class="col-6 col-md-4 col-lg mb-4 mb-lg-0">
1295          <ul class="block-41__links-list list-unstyled p-0">
1296            <li class="block-41__li-heading">Templates</li>
1297            <li class="block-41__li"><a href="https://formnx.com/form-templates/category/registration-forms-7" class="block-41__li-link">Registration Form Templates</a></li>
1298            <li class="block-41__li"><a href="https://formnx.com/form-templates/category/feedback-forms-12" class="block-41__li-link">Feedback Form Templates</a></li>
1299            <li class="block-41__li"><a href="https://formnx.com/form-templates/category/survey-forms-51" class="block-41__li-link">Survey Form Templates</a></li>
1300            <li class="block-41__li"><a href="https://formnx.com/form-templates/category/evaluation-form-58" class="block-41__li-link">Evaluation Form Templates</a></li>
1301          </ul>
1302        </div>
1303        <div class="col-6 col-md-4 col-lg mb-4 mb-lg-0">
1304            <ul class="block-41__links-list list-unstyled p-0">
1305              <li class="block-41__li-heading">Alternatives</li>
1306              <li class="block-41__li"><a href="https://formnx.com/jotform-alternative" class="block-41__li-link">Jotform Alternative</a></li>
1307              <li class="block-41__li"><a href="https://formnx.com/typeform-alternative" class="block-41__li-link">Typeform Alternative</a></li>
1308              <li class="block-41__li"><a href="https://formnx.com/google-forms-alternative" class="block-41__li-link">Google Forms Alternative</a></li>
1309              <li class="block-41__li"><a href="https://formnx.com/surveymonkey-alternative" class="block-41__li-link">SurveyMonkey Alternative</a></li>
1310              <li class="block-41__li"><a href="https://formnx.com/contact-form-7-alternative" class="block-41__li-link">Contact Form 7 Alternative</a></li>
1311              <li class="block-41__li"><a href="https://formnx.com/paperform-alternative" class="block-41__li-link">Paperform Alternative</a></li>
1312              <li class="block-41__li"><a href="https://formnx.com/microsoft-forms-alternative" class="block-41__li-link">Microsoft Forms Alternative</a></li>
1313              <li class="block-41__li"><a href="https://formnx.com/fillout-alternative" class="block-41__li-link">Fillout Alternative</a></li>
1314              <li class="block-41__li"><a href="https://formnx.com/tally-alternative" class="block-41__li-link">Tally Forms Alternative</a></li>
1315              <li class="block-41__li"><a href="https://formnx.com/gravity-forms-alternative" class="block-4
13151__li-link">Gravity Forms Alternative</a></li>
1316              <li class="block-41__li"><a href="https://formnx.com/cognito-forms-alternative" class="block-41__li-link">Cognito Forms Alternative</a></li>
1317              <li class="block-41__li"><a href="https://formnx.com/formstack-alternative" class="block-41__li-link">Formstack Alternative</a></li>
1318              <li class="block-41__li"><a href="https://formnx.com/alternatives" class="block-41__li-link">All Alternatives</a></li>
1319              <li class="block-41__li-heading">Pricing Guides</li>
1320              <li class="block-41__li"><a href="https://formnx.com/jotform-pricing" class="block-41__li-link">Jotform Pricing</a></li>
1321              <li class="block-41__li"><a href="https://formnx.com/typeform-pricing" class="block-41__li-link">Typeform Pricing</a></li>
1322              <li class="block-41__li"><a href="https://formnx.com/surveymonkey-pricing" class="block-41__li-link">SurveyMonkey Pricing</a></li>
1323            </ul>
1324          </div>
1325        <div class="col-6 col-md-4 col-lg mb-4 mb-lg-0">
1326            <ul class="block-41__links-list list-unstyled p-0">
1327              <li class="block-41__li-heading">Use Cases</li>
1328              <li class="block-41__li"><a href="https://formnx.com/no-code-form-builder" class="block-41__li-link">No-Code Form Builder</a></li>
1329              <li class="block-41__li"><a href="https://formnx.com/online-survey-builder" class="block-41__li-link">Online Survey Builder</a></li>
1330              <li class="block-41__li"><a href="https://formnx.com/ai-form-builder" class="block-41__li-link">AI Form Builder</a></li>
1331              <li class="block-41__li"><a href="https://formnx.com/online-quiz-maker" class="block-41__li-link">Online Quiz Maker</a></li>
1332              <li class="block-41__li"><a href="https://formnx.com/job-application-form-builder" class="block-41__li-link">Job Application Form Builder</a></li>
1333              <li class="block-41__li"><a href="https://formnx.com/order-form-builder" class="block-41__li-link">Order Form Builder</a></li>
1334              <li class="block-41__li"><a href="https://formnx.com/screen-printing-order-form" class="block-41__li-link">Screen Printing Order Form</a></li>
1335              <li class="block-41__li"><a href="https://formnx.com/wholesale-order-form" class="block-41__li-link">Wholesale Order Form</a></li>
1336              <li class="block-41__li"><a href="https://formnx.com/wordpress-form-builder" class="block-41__li-link">WordPress Form Builder</a></li>
1337              <li class="block-41__li"><a href="https://formnx.com/contact-form" class="block-41__li-link">Contact Form</a></li>
1338              <li class="block-41__li"><a href="https://formnx.com/nonprofit-form-builder" class="block-41__li-link">Nonprofit Form Builder</a></li>
1339              <li class="block-41__li"><a href="https://formnx.com/squarespace-form-builder" class="block-41__li-link">Squarespace Form Builder</a></li>
1340              <li class="block-41__li"><a href="https://formnx.com/wix-form-builder" class="block-41__li-link">Wix Form Builder</a></li>
1341              <li class="block-41__li"><a href="https://formnx.com/webflow-form-builder" class="block-41__li-link">Webflow Form Builder</a></li>
1342              <li class="block-41__li"><a href="https://formnx.com/framer-form-builder" class="block-41__li-link">Framer Form Builder</a></li>
1343            </ul>
1344          </div>
1345        <div class="col-6 col-md-4 col-lg mb-4 mb-lg-0">
1346          <ul class="block-41__links-list list-unstyled p-0">
1347            <li class="block-41__li-heading">Resources</li>
1348            <li class="block-41__li"><a href="https://formnx.com/form-features" class="block-41__li-link">Form Features</a></li>
1349            <li class="block-41__li"><a href="https://formnx.com/integrations" class="block-41__li-link">Integrations</a></li>
1350            <li class="block-41__li"><a href="https://formnx.com/pdf-builder-features" class="block-41__li-link">PDF Features</a></li>
1351            <li class="block-41__li"><a href="https://formnx.com/details/docs/category/features" class="block-41__li-link">Document</a></li>
1352            <li class="block-41__li"><a href="https://formnx.rightfeature.com/b/feature-requests" class="block-41__li-link">Feature Request</a></li>
1353            <li class="block-41__li"><a href="https://formnx.rightfeature.com/changelogs" class="block-41__li-link">Change Log</a></li>
1354            <li class="block-41__li"><a href="https://formnx.com/faq" class="block-41__li-link">FAQ</a></li>
1355            <li class="block-41__li"><a href="https://formnx.com/tools" class="block-41__li-link">Tools</a></li>
1356            <li class="block-41__li"><a target="_blank" href="https://formnx.com/details/blog" class="block-41__li-link">Blogs</a></li>
1357            <!-- <li class="block-41__li"><a href="https://formnx.com/affiliate" class="block-41__li-link">Affiliate</a></li> -->
1358          </ul>
1359        </div>
1360        <div class="col-6 col-md-4 col-lg mb-4 mb-lg-0">
1361          <ul class="block-41__links-list list-unstyled p-0">
1362            <li class="block-41__li-heading">Links</li>
1363            <li class="block-41__li"><a href="javascript:void(0)"
1364   class="block-41__li-link"
1365   data-cal-link="nikhil-agrawal/formnx-support"
1366   data-cal-namespace="formnx-support"
1367   data-cal-config='{"layout":"month_view","useSlotsViewOnSmallScreen":"true"}'>Book a Demo</a>
1368</li>
1369            <li class="block-41__li"><a href="https://formnx.com/form-builder-for-agencies" class="block-41__li-link">FormNX for Agencies</a></li>
1370            <li class="block-41__li"><a href="https://formnx.com/about" class="block-41__li-link">About Us</a></li>
1371            <li class="block-41__li"><a href="https://formnx.com/privacy" class="block-41__li-link">Privacy Policy</a></li>
1372            <li class="block-41__li"><a href="https://formnx.com/terms" class="block-41__li-link">Terms & Conditions</a></li>
1373            <li class="block-41__li"><a href="https://formnx.com/details/docs/resources/gdpr" class="block-41__li-link">GDPR</a></li>
1374            <li class="block-41__li"><a href="https://formnx.com/dpa" class="block-41__li-link">DPA</a></li>
1375
1376            <li class="block-41__li-heading">Other Products</li>
1377            <li class="block-41__li"><a href="https://rightfeature.com/?utm_source=formnx&amp;utm_medium=referral&amp;utm_campaign=footer-other-products" class="block-41__li-link" target="_blank">RightFeature, Customer feedback management platform</a></li>
1378            <li class="block-41__li"><a href="https://shortlisted.tools/?utm_source=formnx&amp;utm_medium=referral&amp;utm_campaign=footer-other-products" class="block-41__li-link" target="_blank">Short Listed Tools</a></li>
1379          </ul>
1380        </div>
1381
1382      </div>
1383    </div>
1384    <hr class="block-41__divider">
1385    <div class="container">
1386      <div class="row align-items-center g-3">
1387        <div class="col-md-6 order-2 order-md-1">
1388          <p class="block-41__copyrights mb-0 text-center text-md-start">© 2023 - 2026 FormNX, By The Web Fosters.</p>
1389        </div>
1390        <div class="col-md-6 order-1 order-md-2">
1391          <ul class="block-41__extra-links d-flex list-unstyled p-0 mb-0 justify-content-center justify-content-md-end">
1392            <li class="mx-2"><a href="https://x.com/FormNX" target="_blank" class="block-41__extra-link m-0"><i class="fab fa-twitter"></i></a></li>
1393            <li class="mx-2"><a href="https://www.linkedin.com/company/formnx" target="_blank" class="block-41__extra-link m-0"><i class="fab fa-linkedin-in"></i></a></li>
1394            <li class="mx-2"><a href="https://www.reddit.com/r/FormNX/" target="_blank" class="block-41__extra-link m-0"><i class="fa-brands fa-reddit"></i></a></li>
1395            <li class="mx-2"><a href="https://discord.gg/G6xEquMCFG" target="_blank" class="block-41__extra-link m-0"><i class="fab fa-discord"></i></a></li>
1396          </ul>
1397        </div>
1398      </div>
1399    </div>
1400    
1401    <div class="mk-footer-wordmark" aria-hidden="true">FormNX</div>
1402  </div>
1403
1404                <div class="modal" id="edit_template_info" tabindex="-1" role="dialog"></div>
1405    </main>
1406
1407    
1408    <!-- scroll-to-top -->
1409    <div  id="back-to-top"  style="display: none;">
1410                    <a class="p-0 position-fixed top" id="scroll-to-top-btn" href="#top">
1411                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-circle-arrow-up" width="35" viewBox="0 0 24 24" stroke-width="1.5" stroke="#6c757d" fill="none" stroke-linecap="round" stroke-linejoin="round">
1412                    <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
1413                    <path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path>
1414                    <path d="M12 8l-4 4"></path>
1415                    <path d="M12 8v8"></path>
1416                    <path d="M16 12l-4 -4"></path>
1417                </svg>
1418            </a>
1419            </div>
1420    <!-- /scroll-to-top -->
1421<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:'a440f9e0a98d95c1',t:'MTc5MDkxNTQ3MQ=='};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>
1421<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"c097d181ceae43a6b55a96ac59cdbf8e","r":1,"spa":2}' crossorigin="anonymous"></script>
1421
1422</body>
1423    <!-- reCaptcha v2 (loaded only when enabled on the form) -->
1424
1425
1426    <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 1426-1427
1426
1427    <script async src="https://www.googletagmanager.com/gtag/js?id=
1427G-MYXYE87VGP
vendor: 40 bytes, lines 1427-1428
1427" crossorigin="anonymous"></script>
1428    
1428<script>
1429    
vendor: 140 bytes, lines 1429-1433
1429window.dataLayer = window.dataLayer || [];
1430    function gtag(){dataLayer.push(arguments);}
1431    gtag('js', new Date());
1432
1433    gtag('config', '
1433G-MYXYE87VGP
vendor: 8 bytes, lines 1433-1434
1433');
1434    
1434</script>
1434
1435
1436    
1437    
1437<script type="text/javascript">
1438        (function(c,l,a,r,i,t,y){
1439            c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
1440            t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
1441            y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
1442        })(window, document, "clarity", "script", "ouvb60hd4u");
1443
1444            </script>
1444
1445
1446    
1447        <!--Start of Crisp Chat Script-->
1448    
1448<script type="text/javascript">
1449        window.$crisp=[];window.CRISP_WEBSITE_ID="ee32b13b-4349-4b99-b798-4d431007623f";
1450
1451        
1452        (function(){d=document;s=d.createElement("script");s.src="https://client.crisp.chat/l.js";s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})();
1453    </script>
1453
1454    <!--End of Crisp Chat Script-->
1455    
1456    <!-- Meta Pixel Code -->
1457    
1457<script>
vendor: 435 bytes, lines 1457-1466
1457
1458    !function(f,b,e,v,n,t,s)
1459    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
1460    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
1461    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
1462    n.queue=[];t=b.createElement(e);t.async=!0;
1463    t.src=v;s=b.getElementsByTagName(e)[0];
1464    s.parentNode.insertBefore(t,s)}(window, document,'script',
1465    'https://connect.facebook.net/en_US/fbevents.js');
1466    fbq('init', '
14661390151105219055
vendor: 38 bytes, lines 1466-1468
1466');
1467    fbq('track', 'PageView');
1468    
1468</script>
1468
1469    <noscript><img height="1" width="1" style="display:none"
1470    src="https://www.facebook.com/tr?id=1390151105219055&ev=PageView&noscript=1"
1471    /></noscript>
1472    <!-- End Meta Pixel Code -->
1473
1474
1475
1476<script type="text/javascript">
1477    window.fnxTrack = function (event, tags) {
1478        tags = tags || {};
1479        var sent = false;
1480        if (typeof window.clarity === 'function') {
1481            Object.keys(tags).forEach(function (key) { window.clarity('set', key, String(tags[key])); });
1482            window.clarity('event', event);
1483            sent = true;
1484        }
1485        if (typeof window.gtag === 'function') {
1486            window.gtag('event', event, tags);
1487            sent = true;
1488        }
1489        if (!sent && window.console) { console.debug('[fnxTrack]', event, tags); }
1490    };
1491    </script>
1491
1492
1493
1494
1495
1496    <!-- NOTE:bundled js files to optimize size -->
1497    
1497<script src="https://formnx.com/js/common.js?id=1044ddeb6c11792bf9f8"></script>
1497
1498
1499    <!-- app js values -->
1500    
1500<script type="application/javascript">
1501        var APP = {};
1502        APP.APP_NAME = "FormNX";
1503        APP.APP_URL = "https://formnx.com";
1504        APP.PUBLIC_URL= "https://formnx.com/";
1505        APP.FORM_URL = "https://fill.formnx.com";
1506        APP.CURRENCY_SYMBOL = "";
1507        APP.PDF_PLACEHOLDER = "https://formnx.com/img/pdf_placeholder.png";
1508        APP.MAX_PDF_UPLOAD_SIZE = "20";
1509        APP.IS_ENABLED_CUSTOM_JS_CSS = "0";
1510        APP.IS_ENABLED_COMPANY_BRANDING = "1";
1511        APP.STATIC_URL = "";
1512        APP.G_RECAPTCHA_SITE_KEY = "6LfHODUqAAAAAPejHHBBfEpZDNAGA7Xf9YKIH_00";
1513        APP.OPTION_IMG_PLACEHOLDER = "https://formnx.com/img/option_img_placeholder.png";
1514        APP.FORM_LOCALES = {"ar":{"name":"Arabic","rtl":true,"tinyMCELangKey":"ar","fpLangKey":"ar","stripeConnect":"en"},"bg":{"name":"Bulgarian","rtl":false,"tinyMCELangKey":"bg-BG","fpLangKey":"bg","stripeConnect":"bg"},"ca":{"name":"Catalan","rtl":false,"tinyMCELangKey":"ca","fpLangKey":"ca","stripeConnect":"en"},"zh-CN":{"name":"Chinese (Simplified)","rtl":false,"tinyMCELangKey":"zh-Hans","fpLangKey":"zhCN","stripeConnect":"zh"},"zh-TW":{"name":"Chinese (Traditional)","rtl":false,"tinyMCELangKey":"zh-Hant","fpLangKey":"zhTw","stripeConnect":"en"},"hr":{"name":"Croatian","rtl":false,"tinyMCELangKey":"hr","fpLangKey":"hr","stripeConnect":"hr"},"cs":{"name":"Czech","rtl":false,"tinyMCELangKey":"cs","fpLangKey":"cs","stripeConnect":"cs"},"da":{"name":"Danish","rtl":false,"tinyMCELangKey":"da","fpLangKey":"da","stripeConnect":"da"},"nl":{"name":"Dutch","rtl":false,"tinyMCELangKey":"nl","fpLangKey":"nl","stripeConnect":"nl"},"en":{"name":"English","rtl":false,"tinyMCELangKey":"en","fpLangKey":"","stripeConnect":"en"},"eu":{"name":"Euskara","rtl":false,"tinyMCELangKey":"en","fpLangKey":"","stripeConnect":"en"},"fa":{"name":"Farsi","rtl":true,"tinyMCELangKey":"en","fpLangKey":"fa","stripeConnect":"en"},"fil":{"name":"Filipino","rtl":false,"tinyMCELangKey":"en","fpLangKey":"","stripeConnect":"fil"},"fi":{"name":"Finnish","rtl":false,"tinyMCELangKey":"fi","fpLangKey":"fi","stripeConnect":"fi"},"fr":{"name":"French","rtl":false,"tinyMCELangKey":"fr_FR","fpLangKey":"fr","stripeConnect":"fr"},"ka":{"name":"Georgian","rtl":false,"tinyMCELangKey":"ka_GE","fpLangKey":"ka","stripeConnect":"en"},"de":{"name":"German","rtl":false,"tinyMCELangKey":"de","fpLangKey":"de","stripeConnect":"de"},"el":{"name":"Greek","rtl":false,"tinyMCELangKey":"el","fpLangKey":"el","stripeConnect":"el"},"he":{"name":"Hebrew","rtl":true,"tinyMCELangKey":"he_IL","fpLangKey":"he","stripeConnect":"en"},"hu":{"name":"Hungarian","rtl":false,"tinyMCELangKey":"hu_HU","fpLangKey":"hu","stripeConnect":"hu"},"id":{"name":"Indonesian","rtl":false,"tinyMCELangKey":"id","fpLangKey":"id","stripeConnect":"id"},"it":{"name":"Italian","rtl":false,"tinyMCELangKey":"it","fpLangKey":"it","stripeConnect":"it"},"ja":{"name":"Japanese","rtl":false,"tinyMCELangKey":"ja","fpLangKey":"ja","stripeConnect":"ja"},"ko":{"name":"Korean","rtl":false,"tinyMCELangKey":"ko_KR","fpLangKey":"ko","stripeConnect":"ko"},"lv":{"name":"Latvian","rtl":false,"tinyMCELangKey":"lv","fpLangKey":"lv","stripeConnect":"lv"},"no":{"name":"Norwegian","rtl":false,"tinyMCELangKey":"nb_NO","fpLangKey":"no","stripeConnect":"en"},"pl":{"name":"Polish","rtl":false,"tinyMCELangKey":"pl","fpLangKey":"pl","stripeConnect":"pl"},"pt":{"name":"Portuguese","rtl":false,"tinyMCELangKey":"pt_BR","fpLangKey":"pt","stripeConnect":"pt"},"pt-BR":{"name":"Portuguese (Brazil)","rtl":false,"tinyMCELangKey":"pt_BR","fpLangKey":"pt","stripeConnect":"en"},"ro":{"name":"Romanian","rtl":false,"tinyMCELangKey":"ro","fpLangKey":"ro","stripeConnect":"ro"},"ru":{"name":"Russian","rtl":false,"tinyMCELangKey":"ru","fpLangKey":"ru","stripeConnect":"ru"},"sr":{"name":"Serbian","rtl":false,"tinyMCELangKey":"sr","fpLangKey":"sr","stripeConnect":"en"},"sk":{"name":"Slovak","rtl":false,"tinyMCELangKey":"sk","fpLangKey":"sk","stripeConnect":"sk"},"sl":{"name":"Slovenian","rtl":false,"tinyMCELangKey":"sl_SI","fpLangKey":"sl","stripeConnect":"sl"},"es":{"name":"Spanish","rtl":false,"tinyMCELangKey":"es","fpLangKey":"es","stripeConnect":"es"},"es-MX":{"name":"Spanish (Mexico)","rtl":false,"tinyMCELangKey":"es_MX","fpLangKey":"","stripeConnect":"en"},"sv":{"name":"Swedish","rtl":false,"tinyMCELangKey":"sv_SE","fpLangKey":"sv","stripeConnect":"sv"},"th":{"name":"Thai","rtl":false,"tinyMCELangKey":"th_TH","fpLangKey":"th","stripeConnect":"th"},"tr":{"name":"Turkish","rtl":false,"tinyMCELangKey":"tr","fpLangKey":"tr","stripeConnect":"tr"},"uk":{"name":"Ukrainian","rtl":false,"tinyMCELangKey":"uk","fpLangKey":"uk","stripeConnect":"en"},"vi":{"name":"Vietnamese","rtl":false,"tinyMCELangKey":"vi","fpLangKey":"vi","stripeConnect":"vi"},"yo":{"name":"Yoruba","rtl":false,"tinyMCELangKey":"en","fpLangKey":"","stripeConnect":"en"}};
1515        APP.FORM_LOCALE = "en";
1516        APP.CURRENT_WORKSPACE_NAME = "";
1517        APP.CURRENT_WORKSPACE_ID = "";
1518        APP.FONT_FAMILIES = {"Poppins":"https:\/\/fonts.googleapis.com\/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Roboto":"https:\/\/fonts.googleapis.com\/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap","Lato":"https:\/\/fonts.googleapis.com\/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap","Open Sans":"https:\/\/fonts.googleapis.com\/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap","Oswald":"https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@200;300;400;500;600;700&display=swap","Raleway":"https:\/\/fonts.googleapis.com\/css2?family=Raleway:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Nunito":"https:\/\/fonts.googleapis.com\/css2?family=Nunito:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Dancing Script":"https:\/\/fonts.googleapis.com\/css2?family=Dancing+Script:wght@400;500;600;700&display=swap","Amiri":"https:\/\/fonts.googleapis.com\/css2?family=Amiri:ital,wght@0,400;0,700;1,400;1,700&display=swap","Saira Condensed":"https:\/\/fonts.googleapis.com\/css2?family=Saira+Condensed:wght@100;200;300;400;500;600;700;800;900&display=swap","Edu VIC WA NT Beginner":"https:\/\/fonts.googleapis.com\/css2?family=Edu+VIC+WA+NT+Beginner:wght@400;500;600;700&display=swap","Elsie Swash Caps":"https:\/\/fonts.googleapis.com\/css2?family=Elsie+Swash+Caps:wght@400;900&display=swap","Edu SA Beginner":"https:\/\/fonts.googleapis.com\/css2?family=Edu+SA+Beginner:wght@400;500;600;700&display=swap","Eater":"https:\/\/fonts.googleapis.com\/css2?family=Eater&display=swap","Aclonica":"https:\/\/fonts.googleapis.com\/css2?family=Aclonica&display=swap","Anonymous Pro":"https:\/\/fonts.googleapis.com\/css2?family=Anonymous+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap","Montserrat":"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Tangerine":"https:\/\/fonts.googleapis.com\/css2?family=Tangerine:wght@400;700&display=swap","Arimo":"https:\/\/fonts.googleapis.com\/css2?family=Arimo:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap","Arvo":"https:\/\/fonts.googleapis.com\/css2?family=Arvo:ital,wght@0,400;0,700;1,400;1,700&display=swap","Bentham":"https:\/\/fonts.googleapis.com\/css2?family=Bentham&display=swap","Nixie One":"https:\/\/fonts.googleapis.com\/css2?family=Nixie+One&display=swap","Ubuntu":"https:\/\/fonts.googleapis.com\/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap","Barlow":"https:\/\/fonts.googleapis.com\/css2?family=Barlow:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Playfair Display":"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Ms Madi":"https:\/\/fonts.googleapis.com\/css2?family=Ms+Madi&display=swap","Source Code Pro":"https:\/\/fonts.googleapis.com\/css2?family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&display=swap","Bitter":"https:\/\/fonts.googleapis.com\/css2?family=Bitter:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Inter":"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap","Nova Script":"https:\/\/fonts.googleapis.com\/css2?family=Nova+Script&display=swap","Orbitron":"https:\/\/fonts.googleapis.com\/css2?family=Orbitron:wght@400;500;600;700;800;900&display=swap","Yellowtail":"https:\/\/fonts.googleapis.com\/css2?family=Yellowtail&display=swap","Cookie":"https:\/\/fonts.googleapis.com\/css2?family=Cookie&display=swap","Patrick Hand":"https:\/\/fonts.googleapis.com\/css2?family=Patrick+Hand&display=swap","Old Standard TT":"https:\/\/fonts.googleapis.com\/css2?family=Old+Standard+TT:ital,wght@0,400;0,700;1,400&display=swap","Almendra Display":"https:\/\/fonts.googleapis.com\/css2?family=Almendra+Display&display=swap","Lateef":"https:\/\/fonts.googleapis.com\/css2?family=Lateef&display=swap","Delius":"https:\/\/fonts.googleapis.com\/css2?family=Delius&display=swap","Chakra Petch":"https:\/\/fonts.googleapis.com\/css2?family=Chakra+Petch:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap","Cairo":"https:\/\/fonts.googleapis.com\/css2?family=Cairo:[email protected]&display=swap","Merriweather":"https:\/\/fonts.googleapis.com\/css2?family=Merriweather:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&display=swap","Rubik":"https:\/\/fonts.googleapis.com\/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap","Titillium Web":"https:\/\/fonts.googleapis.com\/css2?family=Titillium+Web:ital,wght@0,200;0,300;0,400;0,600;0,700;0,900;1,200;1,300;1,400;1,600;1,700&display=swap","Work Sans":"https:\/\/fonts.googleapis.com\/css2?family=Work+Sans:ital,wght@0,100..900;1,100..900&display=swap","Mukta":"https:\/\/fonts.googleapis.com\/css2?family=Mukta:wght@200;300;400;500;600;700;800&display=swap","Noto Serif":"https:\/\/fonts.googleapis.com\/css2?family=Noto+Serif:ital,wght@0,100..900;1,100..900&display=swap","Quicksand":"https:\/\/fonts.googleapis.com\/css2?family=Quicksand:[email protected]&display=swap","Inconsolata":"https:\/\/fonts.googleapis.com\/css2?family=Inconsolata:[email protected]&display=swap","Oxygen":"https:\/\/fonts.googleapis.com\/css2?family=Oxygen:wght@300;400;700&display=swap","Karla":"https:\/\/fonts.googleapis.com\/css2?family=Karla:ital,wght@0,200..800;1,200..800&display=swap","Cabin":"https:\/\/fonts.googleapis.com\/css2?family=Cabin:ital,wght@0,400..700;1,400..700&display=swap","Heebo":"https:\/\/fonts.googleapis.com\/css2?family=Heebo:[email protected]&display=swap","Kanit":"https:\/\/fonts.googleapis.com\/css2?family=Kanit:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap","Lobster":"https:\/\/fonts.googleapis.com\/css2?family=Lobster&display=swap","Anton":"https:\/\/fonts.googleapis.com\/css2?family=Anton&display=swap","Hind Siliguri":"https:\/\/fonts.googleapis.com\/css2?family=Hind+Siliguri:wght@300;400;500;600;700&display=swap","Source Sans Pro":"https:\/\/fonts.googleapis.com\/css2?family=Source+Sans+Pro:wght@200;300;400;600;700;900&display=swap","Roboto Condensed":"https:\/\/fonts.googleapis.com\/css2?family=Roboto+Condensed:wght@300;400;700&display=swap","Noto Sans":"https:\/\/fonts.googleapis.com\/css2?family=Noto+Sans:wght@100;300;400;500;700;900&display=swap","PT Sans":"https:\/\/fonts.googleapis.com\/css2?family=PT+Sans:wght@400;700&display=swap","PT Serif":"https:\/\/fonts.googleapis.com\/css2?family=PT+Serif:wght@400;700&display=swap","Lora":"https:\/\/fonts.googleapis.com\/css2?family=Lora:wght@400;500;600;700&display=swap","Fira Sans":"https:\/\/fonts.googleapis.com\/css2?family=Fira+Sans:wght@100;200;300;400;500;600;700;800;900&display=swap","Muli":"https:\/\/fonts.googleapis.com\/css2?family=Muli:wght@200;300;400;600;700;800;900&display=swap","Hind":"https:\/\/fonts.googleapis.com\/css2?family=Hind:wght@300;400;500;600;700&display=swap","Dosis":"https:\/\/fonts.googleapis.com\/css2?family=Dosis:wght@200;300;400;500;600;700;800&display=swap","Nunito Sans":"https:\/\/fonts.googleapis.com\/css2?family=Nunito+Sans:wght@200;300;400;600;700;800;900&display=swap","Libre Baskerville":"https:\/\/fonts.googleapis.com\/css2?family=Libre+Baskerville:wght@400;700&display=swap","Zilla Slab":"https:\/\/fonts.googleapis.com\/css2?family=Zilla+Slab:wght@300;400;500;600;700;900&display=swap","Prompt":"https:\/\/fonts.googleapis.com\/css2?family=Prompt:wght@100;200;300;400;500;600;700;800;900&display=swap","Exo 2":"https:\/\/fonts.googleapis.com\/css2?family=Exo+2:wght@100;200;300;400;500;600;700;800;900&display=swap","Questrial":"https:\/\/fonts.googleapis.com\/css2?family=Questrial&display=swap","Asap":"https:\/\/fonts.googleapis.com\/css2?family=Asap:wght@400;500;600;700&display=swap","Varela Round":"https:\/\/fonts.googleapis.com\/css2?family=Varela+Round&display=swap","Teko":"https:\/\/fonts.googleapis.com\/css2?family=Teko:wght@300;400;500;600;700&display=swap","Josefin Sans":"https:\/\/fonts.googleapis.com\/css2?family=Josefin+Sans:wght@100;200;300;400;500;600;700&display=swap","Abril Fatface":"https:\/\/fonts.googleapis.com\/css2?family=Abril+Fatface&display=swap","Maven Pro":"https:\/\/fonts.googleapis.com\/css2?family=Maven+Pro:wght@400;500;600;700;800;900&display=swap","Crimson Text":"https:\/\/fonts.googleapis.com\/css2?family=Crimson+Text:wght@400;600;700&display=swap","Signika":"https:\/\/fonts.googleapis.com\/css2?family=Signika:wght@300;400;600;700&display=swap","Rokkitt":"https:\/\/fonts.googleapis.com\/css2?family=Rokkitt:wght@100;200;300;400;500;600;700;800;900&display=swap","Fjalla One":"https:\/\/fonts.googleapis.com\/css2?family=Fjalla+One&display=swap","Catamaran":"https:\/\/fonts.googleapis.com\/css2?family=Catamaran:wght@100;200;300;400;500;600;700;800;900&display=swap","Yanone Kaffeesatz":"https:\/\/fonts.googleapis.com\/css2?family=Yanone+Kaffeesatz:wght@200;300;400;500;600;700&display=swap","Assistant":"https:\/\/fonts.googleapis.com\/css2?family=Assistant:wght@200;300;400;600;700;800&display=swap","IBM Plex Sans":"https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Sans:wght@100;200;300;400;500;600;700&display=swap","Tajawal":"https:\/\/fonts.googleapis.com\/css2?family=Tajawal:wght@200;300;400;500;700;800;900&display=swap","Rajdhani":"https:\/\/fonts.googleapis.com\/css2?family=Rajdhani:wght@300;400;500;600;700&display=swap","Amatic SC":"https:\/\/fonts.googleapis.com\/css2?family=Amatic+SC:wght@400;700&display=swap","Archivo":"https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@100;200;300;400;500;600;700;800;900&display=swap","Fira Sans Condensed":"https:\/\/fonts.googleapis.com\/css2?family=Fira+Sans+Condensed:wght@100;200;300;400;500;600;700;800;900&display=swap","Balsamiq Sans":"https:\/\/fonts.googleapis.com\/css2?family=Balsamiq+Sans:wght@400;700&display=swap","Yantramanav":"https:\/\/fonts.googleapis.com\/css2?family=Yantramanav:wght@100;300;400;500;700&display=swap","Kalam":"https:\/\/fonts.googleapis.com\/css2?family=Kalam:wght@300;400;700&display=swap","Nanum Gothic":"https:\/\/fonts.googleapis.com\/css2?family=Nanum+Gothic:wght@400;700;800&display=swap","Red Hat Display":"https:\/\/fonts.googleapis.com\/css2?family=Red+Hat+Display:wght@400;500;600;700;900&display=swap","PT Sans Narrow":"https:\/\/fonts.googleapis.com\/css2?family=PT+Sans+Narrow:wght@400;700&display=swap","Overpass":"https:\/\/fonts.googleapis.com\/css2?family=Overpass:wght@100;200;300;400;600;700;800;900&display=swap","Concert One":"https:\/\/fonts.googleapis.com\/css2?family=Concert+One&display=swap","Permanent Marker":"https:\/\/fonts.googleapis.com\/css2?family=Permanent+Marker&display=swap","Cuprum":"https:\/\/fonts.googleapis.com\/css2?family=Cuprum:wght@400;500;600;700&display=
1518swap","Archivo Narrow":"https:\/\/fonts.googleapis.com\/css2?family=Archivo+Narrow:wght@400;500;600;700&display=swap","Ropa Sans":"https:\/\/fonts.googleapis.com\/css2?family=Ropa+Sans:wght@400;700&display=swap","Cabin Condensed":"https:\/\/fonts.googleapis.com\/css2?family=Cabin+Condensed:wght@400;500;600;700&display=swap","Manrope":"https:\/\/fonts.googleapis.com\/css2?family=Manrope:wght@200;300;400;500;600;700;800&display=swap","Noto Sans TC":"https:\/\/fonts.googleapis.com\/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&display=swap","Spectral":"https:\/\/fonts.googleapis.com\/css2?family=Spectral:wght@200;300;400;500;600;700;800;900&display=swap","Public Sans":"https:\/\/fonts.googleapis.com\/css2?family=Public+Sans:wght@100;200;300;400;500;600;700;800;900&display=swap","Cormorant Garamond":"https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:wght@300;400;500;600;700&display=swap","Do Hyeon":"https:\/\/fonts.googleapis.com\/css2?family=Do+Hyeon&display=swap","Sarabun":"https:\/\/fonts.googleapis.com\/css2?family=Sarabun:wght@100;200;300;400;500;600;700;800&display=swap","Noto Sans SC":"https:\/\/fonts.googleapis.com\/css2?family=Noto+Sans+SC:wght@100;300;400;500;700;900&display=swap","M PLUS Rounded 1c":"https:\/\/fonts.googleapis.com\/css2?family=M+PLUS+Rounded+1c:wght@100;300;400;500;700;800;900&display=swap"};
1519        APP.BUILDER_TYPE = "jotform-pricing";
1520                
1521        APP.PDF_FILENAME_TAGGABLE_FIELD_TYPES = ["text","number","hidden"];
1522        APP.IS_LOCAL_ENV = "0";
1523        APP.DISABLE_RECAPTCHA_GLOBAL = "";
1524        Object.freeze(APP);
1525
1526        $.ajaxSetup({
1527            beforeSend: function(jqXHR, settings) {
1528                if (settings.url.indexOf('http') === -1) {
1529                    settings.url = APP.APP_URL + settings.url;
1530                }
1531            },
1532        });
1533    </script>
1533
1534    
1535    <!-- localization -->
1536    
1536<script src="https://formnx.com/js/en/lang.js?v=231"></script>
1536
1537
1538    <!-- include tinymce assets if viewing form & it contains editor or current action is not show form -->
1539            
1539<script src="https://formnx.com/js/tinymceEditor.js?id=936a5c16a3ddd2108c13" defer></script>
1539
1540                        
1541    
1541<script src="https://formnx.com/js/app.js?id=51d0d953d4c6e4d9c9f0" defer></script>
1541
1542    <!-- NOTE:bundled js files to optimize size -->
1543    <!-- 
1543<script src="https://formnx.com/js/common.js?id=1044ddeb6c11792bf9f8"></script>
1543 -->
1544    
1545
1546    <!-- intro.js -->
1547            
1548    
1549    
1549<script src="https://formnx.com/js/confetti.js?id=3ed1d70766cb04bc1528"></script>
vendor: 1 bytes, line 1549
1549
1550<script type="text/javascript">
1551    /*
1552    *  print page
1553    */
1554    function printElement(elem) {
1555        var domClone = elem.cloneNode(true);
1556        var printSection = document.getElementById("printSection");
1557
1558        if (!printSection) {
1559            var printSection = document.createElement("div");
1560            printSection.id = "printSection";
1561            document.body.appendChild(printSection);
1562        }
1563
1564        printSection.innerHTML = "";
1565        printSection.appendChild(domClone);
1566        window.print();
1567    }
1568    
1569    /*
1570    *Prevent Bootstrap dialog from blocking focusin
1571    */
1572    document.addEventListener('focusin', (e) => {
1573        if (e.target.closest(".tox-tinymce-aux, .moxman-window, .tam-assetmanager-root") !== null) {
1574            e.stopImmediatePropagation();
1575        }
1576    });
1577
1578    var elScrollTimerId = null;
1579    jQuery.validator.setDefaults({
1580        errorPlacement: function(error, element) {
1581            if (element.hasClass('select2') && element.parent().hasClass('input-group')) {
1582                error.insertAfter(element.parent());
1583            } else if (element.hasClass('select2')) {
1584                error.insertAfter(element.next('span.select2-container'));
1585            } else if(element.hasClass('input-table-field')) {
1586                element.closest('table').parent().parent().find('div.error-msg').html(error);
1587            }  else if (element.parent().hasClass('input-group')) {
1588                error.insertAfter(element.parent());
1589            } else if (element.parent().hasClass('multi-input')) {
1590                error.insertAfter(element.closest('.multi-input'));
1591            } else if (element.hasClass('tinyMce_editor') || element.hasClass('text_editor')) {
1592                error.insertAfter(element.closest('div').find('div.tox-tinymce'));
1593            } else if (element.hasClass('star_rating')) {
1594                error.insertAfter(element.parent().parent());
1595            } else if (element.hasClass('switch')) {
1596                error.insertAfter(element.parent().parent());
1597            } else if (element.hasClass('signature')) {
1598                error.insertAfter(element.parent());
1599            } else if(element.hasClass('form-check-input')) {
1600                if(element.hasClass('tnc')) error.insertAfter(element.parent());
1601                else error.insertAfter(element.closest('.row'));
1602            } else if(element.hasClass('scale-rating')) {
1603                error.insertAfter(element.parent().parent());
1604            }  else if(element.hasClass('vs__search')) {
1605                error.insertAfter(element.parent().parent());
1606            }   else if(element.hasClass('image-capture')) {
1607                element.parent().parent().closest('div').find('.capture_img_error').html(error);
1608            } else if(element.hasClass('iti__tel-input')) {
1609                element.closest('.form-group').find('.phone_format_output').html(error);
1610            } else {
1611                error.insertAfter(element);
1612            }
1613        },
1614        invalidHandler: function(e, validator) {
1615            /*
1616            * scroll to given
1617            * element if form is embedded
1618            * using iframe
1619            */
1620            let searchParams = new URLSearchParams(window.location.search);
1621            if (searchParams.has('iframe') && validator?.errorList?.length > 0) {
1622                let firstErrorElement = validator?.errorList[0]?.element;
1623                if(elScrollTimerId) {
1624                    clearTimeout(elScrollTimerId);
1625                }
1626                elScrollTimerId = setTimeout(() => {
1627                    scrollToElement($(firstErrorElement)?.closest('div')?.parent('div')[0]);
1628                    elScrollTimerId = null;
1629                }, 500);
1630            }
1631            
1632                            toastr.error("Errors in one or more input fields, Please check.");
1633                    }
1634    });
1635
1636    $(document).ready(function() {
1637        
1638                            if ($.fn.dataTable) {
1639                    jQuery.extend($.fn.dataTable.defaults, {
1640                        fixedHeader: false,
1641                        aLengthMenu: [
1642                            [25, 50, 100, 200, 500, 1000, -1],
1643                            [25, 50, 100, 200, 500, 1000, "All"]
1644                        ],
1645                        iDisplayLength: 25,
1646                        dom: 'lBfrtip',
1647                        buttons: [{
1648                                extend: 'copy',
1649                                text: "Copy",
1650                                exportOptions: {
1651                                    columns: ':visible',
1652                                }
1653                            },
1654                            {
1655                                extend: 'excel',
1656                                text: "Excel",
1657                                exportOptions: {
1658                                    columns: ':visible',
1659                                }
1660                            },
1661                            {
1662                                extend: 'csv',
1663                                text: "CSV",
1664                                exportOptions: {
1665                                    columns: ':visible',
1666                                }
1667                            },
1668                            {
1669                                extend: 'colvis',
1670                                text: "Column visibility",
1671                            },
1672                        ],
1673                        "language": {
1674                            "emptyTable": "No data available in table",
1675                            "info": "Showing _START_ to _END_ of _TOTAL_ entries",
1676                            "infoEmpty": "Showing 0 to 0 of 0 entries",
1677                            "infoFiltered": "(filtered from _MAX_ total entries)",
1678                            "lengthMenu": "Show _MENU_ entries",
1679                            "loadingRecords": "Loading...",
1680                            "processing": "Processing...",
1681                            "search": "Search",
1682                            "zeroRecords": "No matching records foun
1682d",
1683                            "paginate": {
1684                                "first": "First",
1685                                "last": "Last",
1686                                "next": "Next",
1687                                "previous": "Previous"
1688                            },
1689                            buttons: {
1690                                copyTitle: "Copy to clipboard",
1691                                copySuccess: {
1692                                    _: "Copied %d rows to clipboard"
1693                                }
1694                            }
1695                        }
1696                    });
1697                }
1698            
1699            $.ajaxSetup({
1700                headers: {
1701                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
1702                }
1703            });
1704            });
1705
1706    function initialize_text_editor(element_name, placeholder, height, type="form") {
1707        element_name = $.escapeSelector(element_name);
1708        if(tinymce.get(`${element_name}`)) tinymce.get(`${element_name}`).remove();
1709        setTimeout(() => {
1710            tinymce.init({
1711                selector: `#${element_name}`,
1712                placeholder: placeholder,
1713                min_height: height || 300,
1714                promotion: false,
1715                branding: false,
1716                plugins: 'link lists anchor autoresize image',
1717                toolbar: 'undo redo | blocks fontsize | bold italic underline strikethrough  | forecolor backcolor  alignleft aligncenter alignright al
1717ignjustify | link image lineheight | bullist numlist outdent indent | superscript subscript | hr removeformat',
1718                toolbar_mode: 'wrap',
1719                menubar: false,
1720                relative_urls : false,
1721                document_base_url: APP.APP_URL+'/',
1722                images_upload_handler: function (blobInfo, success, failure) {
1723                    return new Promise(function (resolve, reject) {
1724                        let __form_id = $("#__form_id").val() || '';
1725                        let data = new FormData();
1726                        data.append('file', blobInfo.blob(), blobInfo.filename());
1727                        data.append('type', type);
1728                        data.append('form_id', __form_id);
1729                        $.ajax({
1730                            data: data,
1731                            type: "POST",
1732                            url: "https://formnx.com/file-upload",
1733                            processData: false,
1734                            contentType: false,
1735                            success: function(response) {
1736                                if(response.success) {
1737                                    resolve(response.url);
1738                                } else {
1739                                    toastr.error(response.msg);
1740                                    reject('File upload failed: ' + error);
1741                                }
1742                            },
1743                            error: function (xhr, status, error) {
1744                                reject('File upload failed: ' + error);
1745                            }
1746                        });
1747                    });
1748                }
1749            });
1750        },100);
1751    }
1752
1753    function initialize_star_rating(element_name) {
1754        $("#" + $.escapeSelector(element_name)).rating({
1755            theme: 'krajee-fas',
1756            filledStar: '<i class="fas fa-star"></i>',
1757            emptyStar: '<i class="fas fa-star"></i>',
1758            rtl: APP.FORM_LOCALES[APP.FORM_LOCALE]['rtl'] || false,
1759            language: APP.FORM_LOCALE
1760        });
1761    }
1762
1763    function initializeToastrSettingsForForm(position) {
1764        var toastr_position = 'toast-top-right';
1765        if (position) {
1766            toastr_position = position;
1767        }
1768        toastr.options = {
1769            "positionClass": toastr_position
1770        }
1771    }
1772
1773    function showAuthAlert(msg = '', template_slug = '', template_name = '') {
1774        let route_name = 'https://formnx.com/register';
1775        if(template_slug) {
1776            route_name = route_name + '?template=' + template_slug;
1777        }
1778
1779        // ====== A/B TEST: Modal vs Direct ======
1780        // Get or assign variant (50% modal, 50% direct)
1781        let abVariant = localStorage.getItem('ab_auth_modal_test');
1782        if (!abVariant) {
1783            abVariant = Math.random() < 0.5 ? 'modal' : 'direct';
1784            localStorage.setItem('ab_auth_modal_test', abVariant);
1785        }
1786
1787        // VARIANT B: Direct Redirect (no modal)
1788        if (abVariant === 'direct') {
1789            window.location.href = route_name;
1790            return;
1791        }
1792
1793        // VARIANT A: Show Modal
1794        let title = template_name
1795            ? 'Use the <strong>' + template_name + '</strong> template — it\'s free'
1796            : 'Create your free account';
1797
1798        let ctaText = template_name ? 'Use This Template Free' : 'Register';
1799
1800        let loginUrl = 'https://formnx.com/login';
1801
1802        Swal.fire({
1803            title: '<span class="lh-sm fs-5">' + title + '</span>',
1804            html: '<div class="mt-3">' +
1805                  '<a id="registerButton" class="btn btn-success btn-lg mx-2 mb-2 col-md-8" href="' + route_name + '">' + ctaText + ' →</a>' +
1806                  '<div class="mt-2 mb-2 text-center"><small>' +
1807                      '<i class="fas fa-check-circle me-1 text-success"></i><small>Unlimited Forms</small>' +
1808                      '<i class="fas fa-check-circle ms-2 me-1 text-success"></i><small>Unlimited Responses</small>' +
1809                      '<i class="fas fa-check-circle ms-2 me-1 text-success"></i><small>Free Forever</small>' +
1810                  '</small></div>' +
1811                  '<div class="text-center mt-1"><small class="text-muted">⭐ 4.5/5 · 12,271+ users</small></div>' +
1812                  '<div class="text-center mt-2"><small class="text-muted">Already have an account? <a href="' + loginUrl + '">Sign in</a></small></div>' +
1813                  '</div>',
1814            showCloseButton: true,
1815            showConfirmButton: false,
1816            focusCancel: false,
1817            allowOutsideClick: true,
1818            customClass: {
1819                popup: 'animated tada',
1820            },
1821            didOpen: () => {
1822                document.getElementById('registerButton').focus();
1823            }
1824        })
1825    }
1826
1827    function initializeConfettiAnimation() {
1828        const count = 200,
1829        defaults = {
1830            origin: { y: 0.7 },
1831        };
1832
1833        function fire(particleRatio, opts) {
1834            confetti(
1835                Object.assign({}, defaults, opts, {
1836                particleCount: Math.floor(count * particleRatio),
1837                })
1838            );
1839        }
1840
1841        fire(0.25, {
1842            spread: 26,
1843            startVelocity: 55,
1844        });
1845
1846        fire(0.2, {
1847            spread: 60,
1848        });
1849
1850        fire(0.35, {
1851            spread: 100,
1852            decay: 0.91,
1853            scalar: 0.8,
1854        });
1855
1856        fire(0.1, {
1857            spread: 120,
1858            startVelocity: 25,
1859            decay: 0.92,
1860            scalar: 1.2,
1861        });
1862
1863        fire(0.1, {
1864            spread: 120,
1865            startVelocity: 45,
1866        });
1867    }
1868
1869    function getStyles(config, inline=false) {
1870        let triggerType = config.triggerType || 'button';
1871        let buttonPosition = config.buttonPosition || 'auto';
1872        if(buttonPosition && !inline) {
1873            let popupPositionStyles = {
1874                topLeft: `.topLeft::before {margin: 0;}.topLeft .fancybox__content {align-self: flex-start;}`,
1875                topRight: `.topRight::before {margin: 0;}.topRight .fancybox__content {align-self: flex-end;}`,
1876                bottomLeft: `.bottomLeft::after {margin: 0;}.bottomLeft .fancybox__content {align-self: flex-start;}`,
1877                bottomRight: `.bottomRight::after {margin: 0;}.bottomRight .fancybox__content {align-self: flex-end;}`
1878            }
1879            return popupPositionStyles[buttonPosition] || '';
1880        }
1881
1882        if(triggerType == 'button' && inline) {
1883            // Shared modern look for every trigger button. `border:0` removes the
1884            // default <button> border (the old square/black outline), with comfy
1885            // padding, rounded corners, a medium weight and a subtle shadow.
1886            let base = `font-family: inherit;font-size: 1rem;font-weight: 600;line-height: 1.2;color: ${config.buttonTextColor};background: ${config.buttonColor};border: 0;cursor: pointer;text-align: center;text-decoration: none;text-shadow: none;`;
1887            let floatShadow = `box-shadow: 0 4px 14px rgba(0,0,0,0.18);`;
1888            let buttonPositionStyles = {
1889                leftCenter: `${base}transform: rotate(-90deg);transform-origin: top left;padding: 12px 18px;position: fixed;left: 0px;z-index: 999;border-radius: 0 0 8px 8px;top: 50%;margin-top: -16px;`,
1890                rightCenter: `${base}transform: rotate(90deg);transform-origin: right top;padding: 12px 18px;position: fixed;right: 0px;z-index: 999;border-radius: 0 0 8px 8px;top: 50%;margin-top: -16px;`,
1891                auto: `${base}padding: 12px 24px;border-radius: 8px;box-shadow: 0 1px 2px rgba(0,0,0,0.08);`,
1892                bottomLeft: `${base}${floatShadow}padding: 12px 24px;position: fixed;left: 16px;z-index: 999;border-radius: 8px;bottom: 16px;`,
1893                bottomRight: `${base}${floatShadow}padding: 12px 24px;position: fixed;right: 16px;z-index: 999;border-radius: 8px;bottom: 16px;`,
1894                topLeft: `${base}${floatShadow}padding: 12px 24px;position: fixed;left: 16px;z-index: 999;border-radius: 8px;top: 16px;`,
1895                topRight: `${base}${floatShadow}padding: 12px 24px;position: fixed;right: 16px;z-index: 999;border-radius: 8px;top: 16px;`,
1896            }
1897            return buttonPositionStyles[buttonPosition] || '';
1898        }
1899    }
1900
1901    /*
1902     * Build the popup embed snippet. Emits a trigger element carrying the popup
1903     * behaviour as data-* attributes plus a single hosted formnx-popup.js script
1904     * tag — no inline event handlers (CSP-safe) and no external lightbox library.
1905     * Older embeds use their own frozen self-contained code and are unaffected.
1906     */
1907    function generateFormPublishCodes(link, config) {
1908        let triggers = config.popupTrigger || [];
1909        let hasButton = triggers.includes('button');
1910
1911        // Minimal by design: the only required attribute is data-formnx="<url>".
1912        // Everything else is emitted only when it differs from the defaults
1913        // (click trigger, close button on). This also makes "add it to your own
1914        // element" a single copy-pasteable attribute.
1915        let attrs = [`data-formnx="${link}"`];
1916        if(!(triggers.length === 1 && triggers[0] === 'button')) {
1917            attrs.push(`data-formnx-trigger="${triggers.join(',')}"`);
1918        }
1919        if(triggers.includes('delayed')) attrs.push(`data-formnx-delay="${config.delayBy || 4}"`);
1920        if(triggers.includes('scroll')) attrs.push(`data-formnx-scroll="${config.scrollPercent || 60}"`);
1921        if(!config.popupClose) attrs.push('data-formnx-close="false"');
1922        if(config.fullscreen) attrs.push('data-formnx-fullscreen="true"');
1923
1924        let scriptTag = `&lt;script src="${APP.PUBLIC_URL}js/formnx-popup.js" async&gt;&lt;/script&gt;`;
1925
1926        let triggerEl;
1927        if(hasButton) {
1928            // getStyles(config, true) returns the button's colour + position styles
1929            // (click is wired by formnx-popup.js; hover is left to the user's own CSS).
1930            triggerEl = `<button ${attrs.join(' ')} style="${getStyles(config, true)}">${config.buttonText || 'Open form'}</button>`;
1931        } else {
1932            // Auto-trigger only (delayed / scroll / exit): a hidden element carries the config.
1933            triggerEl = `<div ${attrs.join(' ')} style="display:none"></div>`;
1934        }
1935
1936        return `${triggerEl}\n${scriptTag}`;
1937    }
1938
1939    function initialize_camera(config) {
1940        const {name, captured_notification="Photo captured successfully."} = config;
1941        let isFrontCamera = true;
1942        let videoStream = null;
1943        function openCamera() {
1944            navigator.mediaDevices.getUserMedia({ video: { facingMode: isFrontCamera ? 'user' : 'environment' } })
1945            .then(function(stream) {
1946                const video = document.getElementById(`camera_${$.escapeSelector(name)}`);
1947                video.srcObject = stream;
1948                videoStream = stream;
1949                $(`#start_camera_${$.escapeSelector(name)}`).addClass('d-none');
1950                showActiveCameraButtons($.escapeSelector(name));
1951                showMessage($.escapeSelector(name));
1952            })
1953            .catch(function(error) {
1954                showMessage($.escapeSelector(name), `<span class='text-danger'>Permission denied: Check your browser&#039;s privacy settings to use camera.</span>`);
1955                setCameraToInitialState($.escapeSelector(name));
1956            });
1957        }
1958
1959        function showMessage(name, msg='') {
1960            $(`#${name}`).parent().parent()
1961                .find(".capture_img_error")
1962                .html(`${msg}`);
1963        }
1964
1965        function flipCamera() {
1966            isFrontCamera = !isFrontCamera;
1967            if (videoStream) {
1968                videoStream.getTracks().forEach(track => track.stop());
1969            }
1970            openCamera();
1971        }
1972
1973        function setCameraToInitialState(name) {
1974            $(`#camera_${name}`).addClass('d-none');
1975            $(`#canvas_${name}`).addClass('d-none');
1976            $(`#capture_img_${name}`).addClass('d-none');
1977            $(`#flip_camera_${name}`).addClass('d-none');
1978            $(`#start_camera_${name}`).removeClass('d-none');
1979        }
1980
1981        function takeSnapshot() {
1982            const video = document.getElementById(`camera_${$.escapeSelector(name)}`);
1983            const canvas = document.getElementById(`canvas_${$.escapeSelector(name)}`);
1984            const context = canvas.getContext('2d');
1985
1986            // Cap the captured resolution so the (PNG) data URL submitted inline
1987            // with the form stays a reasonable size. Scale the longest side down
1988            // to MAX_DIMENSION, preserving aspect ratio; never upscale.
1989            const MAX_DIMENSION = 1280;
1990            const srcW = video.videoWidth || MAX_DIMENSION;
1991            const srcH = video.videoHeight || MAX_DIMENSION;
1992            const scale = Math.min(1, MAX_DIMENSION / Math.max(srcW, srcH));
1993            canvas.width = Math.round(srcW * scale);
1994            canvas.height = Math.round(srcH * scale);
1995
1996            context.drawImage(video, 0, 0, canvas.width, canvas.height);
1997            $(`#${$.escapeSelector(name)}`).val(canvas.toDataURL()).trigger('change');
1998            showInactiveCameraButtons($.escapeSelector(name));
1999            if (videoStream) {
2000                videoStream.getTracks().forEach(track => track.stop());
2001                videoStream = null;
2002            }
2003            showMessage($.escapeSelector(name), `<span class='text-success'>${captured_notification}</span>`);
2004        }
2005
2006        function showInactiveCameraButtons(name) {
2007            $(`#canvas_${name}`).removeClass('d-none');
2008            $(`#camera_${name}`).addClass('d-none');
2009            $(`#capture_img_${name}`).addClass('d-none');
2010            $(`#flip_camera_${name}`).addClass('d-none');
2011            $(`#recapture_img_${name}`).removeClass('d-none');
2012            $(`#start_camera_${name}`).addClass('d-none');
2013        }
2014
2015        function showActiveCameraButtons(name) {
2016            $(`#canvas_${name}`).addClass('d-none');
2017            $(`#camera_${name}`).removeClass('d-none');
2018            $(`#capture_img_${name}`).removeClass('d-none');
2019            $(`#flip_camera_${name}`).removeClass('d-none');
2020        }
2021
2022        function drawImageOnCanvasFromUrl(imageUrl, name) {
2023            const img = new Image();
2024            img.crossOrigin = 'Anonymous'; //to avoid CORS issues
2025            img.src = imageUrl;
2026
2027            /*
2028            * when image is loaded, 
2029            * draw it on a canvas and convert it to base64
2030            */
2031            img.onload = function() {
2032                try {
2033                    const canvas = document.getElementById(`canvas_${$.escapeSelector(name)}`);
2034                    const ctx = canvas.getContext('2d');
2035                    canvas.width = img.width;
2036                    canvas.height = img.height;
2037                    ctx.drawImage(img, 0, 0); //Draw the image on the canvas
2038                    const base64Data = canvas.toDataURL('image/png'); //Get the base64-encoded data URL
2039                    $(`#${$.escapeSelector(name)}`).val(base64Data);
2040                    showInactiveCameraButtons($.escapeSelector(name));
2041                } catch (error) {
2042                    $(`#${$.escapeSelector(name)}`).val('');
2043                    console.error('Error drawing image:', error.message);
2044                    setCameraToInitialState($.escapeSelector(name));
2045                }
2046            };
2047
2048            /*
2049            * Handle image loading errors
2050            */
2051            img.onerror = function(error) {
2052                console.error('Error loading image:', error);
2053            };
2054        }
2055
2056        $(`#start_camera_${$.escapeSelector(name)}`).click(function() {
2057            openCamera();
2058        });
2059
2060        $(`#capture_img_${$.escapeSelector(name)}`).click(function() {
2061            takeSnapshot();
2062        });
2063
2064        $(`#flip_camera_${$.escapeSelector(name)}`).click(function() {
2065            flipCamera();
2066        });
2067
2068        $(`#recapture_img_${$.escapeSelector(name)}`).click(function() {
2069            $(`#${$.escapeSelector(name)}`).val('').trigger('change');
2070            showMessage($.escapeSelector(name));
2071            showActiveCameraButtons($.escapeSelector(name));
2072            $(`#recapture_img_${$.escapeSelector(name)}`).addClass('d-none');
2073            openCamera();
2074        });
2075
2076        /*
2077        * Draw image to canvas if 
2078        * image exist
2079        */
2080        let existingImg = $(`#${$.escapeSelector(name)}`).val() || '';
2081        if(existingImg?.length > 0) {
2082            let imageUrl = `${APP.STATIC_URL}/${existingImg}`;
2083            drawImageOnCanvasFromUrl(imageUrl, name);
2084        }
2085    }
2086
2087    /*
2088    * scroll to given
2089    * element if element is 
2090    * not visible in viewport
2091    */
2092    function scrollToElement(el) {
2093        const rect = el?.getBoundingClientRect();
2094        const isElementInViewport =  (rect.top >= 0 && rect.top < (window.innerHeight || document.documentElement.clientHeight));
2095        if(!isElementInViewport) {
2096            el?.scrollIntoView({ behavior: "smooth", block: "start", inline: "start"});
2097        }
2098    }
2099
2100    /*
2101    * reCAPTCHA v2 token expiry handler.
2102    *
2103    * Google fires this once the token's 120-second lifetime elapses. We reset the
2104    * widget (so the user can re-verify), tell the user clearly what happened, and
2105    * scroll the widget into view in case they were filling other fields and missed
2106    * the change. Silent reset alone is the dominant cause of "reCAPTCHA error"
2107    * false rejects on long forms / file-upload forms.
2108    */
2109    function grecaptchaExpiryHandler() {
2110        const captchaEl = document.querySelector('.g-recaptcha-v2');
2111        if(window.grecaptcha && captchaEl) {
2112            window.grecaptcha.reset();
2113
2114            if (typeof toastr !== 'undefined') {
2115                const msg = _.get(window.i18n, 'form.recaptcha_expired')
2116                    || 'Verification expired. Please check the "I\'m not a robot" box again before submitting.';
2117                toastr.error(msg);
2118            }
2119
2120            // Bring the widget on-screen so the user sees they need to act on it
2121            captchaEl.scrollIntoView({ behavior: 'smooth', block: 'center' });
2122        }
2123    }
2124
2125    /*
2126    * reCAPTCHA v2 API onload handler.
2127    * Called by Google's api.js once it has finished loading. Dispatches a global
2128    * event so the form component can render the widget without polling for grecaptcha.
2129    */
2130    window.onRecaptchaApiLoad = function() {
2131        window.dispatchEvent(new Event('recaptcha-api-loaded'));
2132    };
2133    
2134</script>
2134
2135
2136<script type="text/javascript">
2137    $(document).ready(function() {
2138        
2139
2140        
2141        
2142        $('.prevent_space_and_symbol').on('input', function() {
2143            let value = $(this).val();
2144            $(this).val(value.replace(/[\s~`!@#$%^&*()_\-+=\[\]{};:'"\\|,.<>\/?]/g, ''));
2145        });
2146
2147        if($(".edit_template").length > 0) {
2148            $(document).on('click', '.edit_template', function() {
2149                let url = $(this).data('href');
2150                $.ajax({
2151                    method: "GET",
2152                    url: url,
2153                    dataType: "html",
2154                    success: function(response) {
2155                        $("#edit_template_info").html(response).modal('show');
2156                    }
2157                });
2158            });
2159
2160            $('#edit_template_info').on('shown.bs.modal', function () {
2161                $(".select2").select2({
2162                    multiple: true,
2163                    allowClear: true,
2164                    dropdownParent: $('#edit_template_info'),
2165                    placeholder: 'Select categories',
2166                    theme: "bootstrap-5",
2167                });
2168                $('form#edit_template_details_form').validate({
2169                    submitHandler: function(form, e) {
2170                        e.preventDefault();
2171                        let data = $('form#edit_template_details_form').serialize();
2172                        let url = $('form#edit_template_details_form').attr('action');
2173                        if ($('form#edit_template_details_form').valid()) {
2174                            let ladda = Ladda.create(document.querySelector('.update-template-details-btn'));
2175                            ladda.start();
2176                            $.ajax({
2177                                method:"PUT",
2178                                url: url,
2179                                data: data,
2180                                dataType: "json",
2181                                success:function(response) {
2182                                    ladda.stop();
2183                                    if(response.success == true){
2184                                        toastr.success(response.msg);
2185                                        $("#edit_template_info").modal('hide');
2186                                    } else {    
2187                                        toastr.error(response.msg);
2188                                    }
2189                                }
2190                            });
2191                        }
2192                    }
2193                });
2194            })
2195        }
2196
2197        /**
2198         * Opens the subscription packages modal via AJAX.
2199         * Optionally accepts a feature key to show a context-aware headline.
2200         * @param {string|null} feature - e.g. 'csv_export', 'ai_fields', 'integrations'
2201         */
2202        window.triggerSubscriptionModal = function(feature) {
2203            const params = feature ? '?feature=' + encodeURIComponent(feature) : '';
2204            $.ajax({
2205                method: "GET",
2206                url: "https://formnx.com/show-subscription-packages" + params,
2207                dataType: "html",
2208                success: function(response) {
2209                    $("#modal_div").html(response).modal('show');
2210                    // Funnel tracking: which locked feature opened the upgrade modal
2211                    window.lastUpgradeFeature = feature || 'generic';
2212                    window.fnxTrack('upgrade_modal_shown', { upgrade_feature: window.lastUpgradeFeature });
2213                    setTimeout(() => {
2214                        initializeFilterFunctions();
2215                        // Tooltips are normally initialised by the Vue mixin in functions.vue on
2216                        // mounted/updated. This modal is injected with jQuery .html() over AJAX,
2217                        // so Vue never sees it and its tooltips stayed dead. Initialise them here.
2218                        initializeModalTooltips();
2219                    }, 0);
2220                }
2221            });
2222        };
2223
2224        /**
2225         * Bootstrap tooltips for markup injected into #modal_div after page load.
2226         *
2227         * `container: 'body'` keeps the tooltip out of the modal'
2227s own stacking/overflow
2228         * context, and disposing on hide stops instances leaking each time the modal reopens.
2229         */
2230        function initializeModalTooltips() {
2231            var triggers = document.querySelectorAll('#modal_div [data-bs-toggle="tooltip"]');
2232            [].forEach.call(triggers, function(el) {
2233                if (!el._bootstrapTooltip) {
2234                    new bootstrap.Tooltip(el, { container: 'body' });
2235                    el._bootstrapTooltip = true;
2236                }
2237            });
2238
2239            $('#modal_div').off('hidden.bs.modal.tips').on('hidden.bs.modal.tips', function() {
2240                [].forEach.call(this.querySelectorAll('[data-bs-toggle="tooltip"]'), function(el) {
2241                    var tip = bootstrap.Tooltip.getInstance(el);
2242                    if (tip) { tip.dispose(); }
2243                    el._bootstrapTooltip = false;
2244                });
2245            });
2246        }
2247
2248        /**
2249         * Checkout from the upgrade modal, without the browser's "Leave site?" prompt.
2250         *
2251         * The builder arms window.onbeforeunload when the form has unsaved edits, so
2252         * navigating to Stripe triggers the native warning - and answering it discards the
2253         * user's work while they pay for the feature that unblocks it. Instead: save first
2254         * (the builder saves over AJAX and resets window.initialFormData, which is what the
2255         * guard compares), then let CreateForm redirect once the save succeeds.
2256         *
2257         * Falls straight through to normal navigation when there is no guard, no builder on
2258         * the page, or nothing unsaved.
2259         */
2260        $(document).on('click', '.pkg-checkout-cta', function(e) {
2261            // Funnel tracking: checkout started, attributed to the feature that opened the modal.
2262            // Skip the Stripe billing-portal button (existing subscribers managing billing, not a new checkout).
2263            if (!/billing\.stripe\.com/.test(this.href || '')) {
2264                window.fnxTrack('checkout_started', { upgrade_feature: window.lastUpgradeFeature || 'direct' });
2265            }
2266
2267            // No unsaved-changes guard armed - nothing to work around.
2268            if (typeof window.onbeforeunload !== 'function') {
2269                return;
2270            }
2271
2272            var $builderForm = $('form#create_form').not('#modal_div form#create_form');
2273            var $saveBtn     = $('button.ladda-form-save-btn').filter(':visible').first();
2274
2275            // Not the builder, or nothing to save with: just disable the guard and navigate.
2276            if (!$builderForm.length || !$saveBtn.length) {
2277                window.onbeforeunload = null;
2278                return;
2279            }
2280
2281            // Guard returns a string only when the form is actually dirty.
2282            var isDirty = typeof window.onbeforeunload() === 'string';
2283            if (!isDirty) {
2284                window.onbeforeunload = null;
2285                return;
2286            }
2287
2288            // Unsaveable (validation errors) - warn rather than trap them on a dead button.
2289            if ($builderForm.length && typeof $builderForm.valid === 'function' && !$builderForm.valid()) {
2290                toastr.error('Please fix the highlighted fields, then upgrade.');
2291                e.preventDefault();
2292                return;
2293            }
2294
2295            e.preventDefault();
2296            window.pendingCheckoutUrl = this.href;
2297            $saveBtn.trigger('click');
2298        });
2299
2300        setTimeout(() => {
2301            if($('.subscription_alert').length > 0) {
2302                $(document).on('click', '.subscription_alert', function() {
2303                    // Read data-feature from the clicked element (or its closest parent with one)
2304                    const feature = $(this).data('feature') || $(this).closest('[data-feature]').data('feature') || null;
2305                    window.triggerSubscriptionModal(feature);
2306                });
2307            }
2308        },300);
2309
2310        function initializeFilterFunctions() {
2311            // The pricing partial ships its own combined interval + workspace filter when a
2312            // Monthly/Yearly toggle is on screen. Defer to it so the two never disagree.
2313            if (typeof window.applyPackageFilters === 'function') {
2314                window.applyPackageFilters();
2315                return;
2316            }
2317
2318            const filterPackagesBasedOnWorkspace = () => {
2319                if($("#filter_by_workspace").length > 0) {
2320                    const workspace = $("#filter_by_workspace").val();
2321                    $('.package').hide();
2322                    $(`.workspace_${workspace}`).fadeIn();
2323                }
2324            };
2325
2326            //initial filter on page load
2327            filterPackagesBasedOnWorkspace();
2328
2329            //re-filter when workspace is changed
2330            $(document).on('change', '#filter_by_workspace', filterPackagesBasedOnWorkspace);
2331        }
2332
2333        initializeFilterFunctions();
2334
2335        const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]');
2336        const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl));
2337    });
2338</script>
2338<script>
2339    (function () {
2340        // ----- Sticky CTA (appears once the hero scrolls out of view) -----
2341        var sticky = document.getElementById('pp-sticky');
2342        var hero = document.getElementById('pp-hero');
2343        if (sticky && hero) {
2344            window.addEventListener('scroll', function () {
2345                sticky.classList.toggle('is-visible', hero.getBoundingClientRect().bottom < 0);
2346            }, { passive: true });
2347        }
2348
2349        // ----- FAQ accordion (same behaviour as alternative pages) -----
2350        function showFaqAccordion(e) { e.setAttribute("style", "max-height: " + e.scrollHeight + "px"); }
2351        if (document.querySelectorAll("#faq-accordion-block").length > 0) {
2352            document.querySelector("#faq-accordion-block").addEventListener("click", function (e) {
2353                var o, c = document.querySelector(".faq-accordion__section--open"),
2354                    t = e.target.closest(".faq-accordion__section");
2355                if (!t) return;
2356                var n = t.querySelector(".faq-accordion__content");
2357                t && t !== c ? c ? (o = function (e) {
2358                    t.classList.add("faq-accordion__section--open"); showFaqAccordion(n); c.removeEventListener("transitionend", o);
2359                }, c.addEventListener("transitionend", o), c.querySelector(".faq-accordion__content").removeAttribute("style"), c.classList.remove("faq-accordion__section--open")) : (t.classList.add("faq-accordion__section--open"), showFaqAccordion(n)) : (t.querySelector(".faq-accordion__content").removeAttribute("style"), t.classList.remove("faq-accordion__section--open"));
2360            });
2361        }
2362    })();
2363</script>
2363
2364
2365<!-- Cal.com element-click embed (Book a Demo popup). embed.js is injected async on first Cal() call. -->
2366<script type="text/javascript">
2367  (function (C, A, L) { let p = function (a, ar) { a.q.push(ar); }; let d = C.document; C.Cal = C.Cal || function () { let cal = C.Cal; let ar = arguments; if (!cal.loaded) { cal.ns = {}; cal.q = cal.q || []; d.head.appendChild(d.createElement("script")).src = A; cal.loaded = true; } if (ar[0] === L) { const api = function () { p(api, arguments); }; const namespace = ar[1]; api.q = api.q || []; if(typeof namespace === "string"){cal.ns[namespace] = cal.ns[namespace] || api;p(cal.ns[namespace], ar);p(cal, ["initNamespace", namespace]);} else p(cal, ar); return;} p(cal, ar); }; })(window, "https://app.cal.com/embed/embed.js", "init");
2368  Cal("init", "formnx-support", {origin:"https://app.cal.com"});
2369  Cal.ns["formnx-support"]("ui", {"hideEventTypeDetails":false,"layout":"month_view"});
2370</script>
2370
2371<!-- Cal.com embed ends -->
2372
2373<script>
2374/* Review carousel (shared partial: partials/reviews_carousel.blade.php).
2375   Lives in the layout so ANY page that includes the partial gets working
2376   controls - it self-guards on #reviews-track and exits on pages without it.
2377   Everything is DELEGATED on document and re-queries the DOM at use time:
2378   Vue re-renders #app and replaces nodes, so direct listeners and JS-built
2379   children can be silently lost. The dots are therefore self-healing. */
2380(function () {
2381        if (!document.getElementById('reviews-track')) return;
2382        var AUTOPLAY_MS = 5000;
2383        var RESUME_AFTER_MS = 12000;
2384        var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
2385        var userPaused = false;
2386        var hoverPaused = false;
2387        var resumeTimer;
2388
2389        function track() { return document.getElementById('reviews-track'); }
2390        /* The carousel advances ONE card at a time (conveyor style): card 2
2391           slides into slot 1, card 3 into slot 2, a new card enters slot 3,
2392           and the spotlight passes to whichever card is now centered. */
2393        function cardStep() {
2394            var t = track();
2395            if (!t || !t.children.length) return 1;
2396            var gap = parseFloat(getComputedStyle(t).columnGap) || 20;
2397            return t.children[0].offsetWidth + gap;
2398        }
2399        function pageCount() {
2400            var t = track();
2401            if (!t) return 1;
2402            return Math.max(1, Math.round((t.scrollWidth - t.clientWidth) / cardStep()) + 1);
2403        }
2404        function pageIndex() {
2405            var t = track();
2406            return t ? Math.round(t.scrollLeft / cardStep()) : 0;
2407        }
2408        function goTo(i) {
2409            var t = track();
2410            if (!t) return;
2411            var n = pageCount();
2412            i = ((i % n) + n) % n;   // wrap both directions
2413            var left = Math.min(i * cardStep(), t.scrollWidth - t.clientWidth);
2414            t.scrollTo({ left: left, behavior: reduceMotion ? 'auto' : 'smooth' });
2415        }
2416        function pauseForUser() {
2417            userPaused = true;
2418            clearTimeout(resumeTimer);
2419            resumeTimer = setTimeout(function () { userPaused = false; }, RESUME_AFTER_MS);
2420        }
2421
2422        /* Pagination dots: rebuilt whenever the count is wrong (initial
2423           render, resize breakpoint change, or a Vue re-render wiped them) */
2424        function ensureDots() {
2425            var wrap = document.querySelector('[data-reviews-dots]');
2426            var t = track();
2427            if (!wrap || !t) return;
2428            var n = pageCount();
2429            if (wrap.children.length !== n) {
2430                var html = '';
2431                for (var i = 0; i < n; i++) {
2432                    html += '<button type="button" class="mk-review-dot" data-reviews-dot="' + i + '" aria-label="Go to reviews page ' + (i + 1) + '"></button>';
2433                }
2434                wrap.innerHTML = html;
2435            }
2436            var active = pageIndex();
2437            for (var j = 0; j < wrap.children.length; j++) {
2438                wrap.children[j].classList.toggle('is-active', j === active);
2439            }
2440        }
2441
2442        /* Spotlight: the card closest to the visible center gets the ring */
2443        function spotlight() {
2444            var t = track();
2445            if (!t) return;
2446            var center = t.scrollLeft + t.clientWidth / 2;
2447            var best = null, bestDist = Infinity;
2448            for (var i = 0; i < t.children.length; i++) {
2449                var c = t.children[i];
2450                var d = Math.abs((c.offsetLeft + c.offsetWidth / 2) - center);
2451                c.classList.remove('is-spotlight');
2452                if (d < bestDist) { bestDist = d; best = c; }
2453            }
2454            if (best) best.classList.add('is-spotlight');
2455        }
2456
2457        function sync() { ensureDots(); spotlight(); }
2458
2459        document.addEventListener('click', function (e) {
2460            var el = e.target.closest ? e.target.closest('[data-reviews-prev],[data-reviews-next],[data-reviews-dot]') : null;
2461            if (!el) return;
2462            e.preventDefault();
2463            pauseForUser();
2464            if (el.hasAttribute('data-reviews-dot')) {
2465                goTo(parseInt(el.getAttribute('data-reviews-dot'), 10));
2466            } else {
2467                goTo(pageIndex() + (el.hasAttribute('data-reviews-prev') ? -1 : 1));
2468            }
2469        });
2470        document.addEventListener('pointerdown', function (e) {
2471            if (e.target.closest && e.target.closest('.mk-review-carousel')) pauseForUser();
2472        }, true);
2473        document.addEventListener('pointerover', function (e) {
2474            hoverPaused = !!(e.target.closest && e.target.closest('.mk-review-track'));
2475        });
2476        /* scroll does not bubble; capture it at document level */
2477        document.addEventListener('scroll', function (e) {
2478            if (e.target && e.target.id === 'reviews-track') sync();
2479        }, true);
2480        window.addEventListener('resize', sync);
2481
2482        setInterval(function () {
2483            sync();   // self-heal dots/spotlight even without user scrolling
2484            if (reduceMotion || document.hidden || userPaused || hoverPaused) return;
2485            goTo(pageIndex() + 1);
2486        }, AUTOPLAY_MS);
2487
2488        setTimeout(sync, 800);   // first paint after Vue settles
2489    })();
2490
2491/* Scroll reveal (2026 redesign, lp2.css section 15).
2492   Fail-safe by design: elements are hidden only AFTER this script tags the
2493   below-fold ones with .mk-reveal, so no-JS/crawlers/script errors always
2494   see the full page. Classes are removed after each reveal finishes, so
2495   hover transitions return to their normal component styling. */
2496(function () {
2497    if (!('IntersectionObserver' in window)) return;
2498    if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
2499
2500    var SELECTOR = [
2501        '.mk-section-head',
2502        '.icon-card', '.card-2', '.card-3', '.enhanced-card',
2503        '.pain-card', '.problem', '.what-is-step', '.the-step',
2504        '.mk-review-carousel', '.mini-testimonial-card', '.alt-final-review',
2505        '.mk-guarantee', '.guarantee-card', '.mk-privacy-fact',
2506        '.block-10__card', '.cta-card',
2507        '.faq-accordion__section',
2508        '.mk-stats-band > div',
2509        '.vs-card', '.cost-stack',
2510        '.feature-block-video .row > [class*="col-lg-"]',
2511        '.mk-cta-band .col-lg-8'
2512    ].join(',');
2513
2514    function init() {
2515        var all = document.querySelectorAll(SELECTOR);
2516        var targets = [];
2517        var foldLine = window.innerHeight * 0.88;
2518
2519        for (var i = 0; i < all.length; i++) {
2520            /* Only elements strictly below the fold take part; anything already
2521               visible (or above the current scroll position) is left untouched,
2522               so there is no flash on load and late init cannot hide content. */
2523            if (all[i].getBoundingClientRect().top > foldLine) {
2524                all[i].classList.add('mk-reveal');
2525                targets.push(all[i]);
2526            }
2527        }
2528        if (!targets.length) return;
2529
2530        document.documentElement.classList.add('mk-reveal-on');
2531
2532        var io = new IntersectionObserver(function (entries) {
2533            var batchIndex = 0;
2534            entries.forEach(function (entry) {
2535                if (!entry.isIntersecting) return;
2536                var el = entry.target;
2537                io.unobserve(el);
2538
2539                /* Elements entering in the same batch stagger by 60ms, capped
2540                   so a fast scroll never queues long waits. */
2541                var delay = Math.min(batchIndex, 7) * 60;
2542                batchIndex++;
2543                el.style.transitionDelay = delay + 'ms';
2544                el.classList.add('mk-reveal--in');
2545
2546                /* Cleanup: once the rise (and any checkmark draw) is done the
2547                   element goes back to 100% stock styling. */
2548                setTimeout(function () {
2549                    el.classList.remove('mk-reveal', 'mk-reveal--in');
2550                    el.style.transitionDelay = '';
2551                }, delay + 1500);
2552            });
2553        }, { rootMargin: '0px 0px -8% 0px', threshold: 0.06 });
2554
2555        for (var j = 0; j < targets.length; j++) io.observe(targets[j]);
2556    }
2557
2558    /* This script sits at the end of the body, so the DOM above is fully
2559       parsed; init synchronously (rAF can be deferred for seconds in
2560       background/throttled tabs, which would arm the reveals too late). */
2561    if (document.readyState === 'loading') {
2562        document.addEventListener('DOMContentLoaded', init);
2563    } else {
2564        init();
2565    }
2566})();
2567</script>
vendor: 1 bytes, line 2567
2567
2568<script src="https://unpkg.com/tua-body-scroll-lock" crossorigin="anonymous"></script>
vendor: 1 bytes, line 2568
2568
2569<script>
2570    $(document).ready(function(){
2571
2572        $('.stats_show').click(function(){
2573            var statsDetailsDiv = $('.stats_details');
2574            statsDetailsDiv.slideToggle();
2575        });
2576
2577        function showFaqAccordion(e) {
2578            var o = e.scrollHeight;
2579            e.setAttribute("style", "max-height: " + o + "px")
2580        }
2581
2582        if (document.querySelectorAll("#faq-accordion-block").length > 0) {
2583            
2584            document.querySelector("#faq-accordion-block").addEventListener("click", function(e) {
2585                var o, c = document.querySelector(".faq-accordion__section--open"),
2586                    t = e.target.closest(".faq-accordion__section"),
2587                    n = t.querySelector(".faq-accordion__content");
2588                t && t !== c ? c ? (o = function(e) {
2589                    t.classList.add("faq-accordion__section--open"), showFaqAccordion(n), c.removeEventListener("transitionend", o)
2590                }, c.addEventListener("transitionend", o), c.querySelector(".faq-accordion__content").removeAttribute("style"), c.classList.remove("faq-accordion__section--open")) : (t.classList.add("faq-accordion__section--open"), showFaqAccordion(n)) : (t.querySelector(".faq-accordion__content").removeAttribute("style"), t.classList.remove("faq-accordion__section--open"))
2591            })
2592        }
2593
2594        /* Hero Menu & Dropdown's JavaScript */
2595        var showDropdown = function(e) {
2596            e.currentTarget.classList.add("hero-nav__item--show-dropdown");
2597        };
2598
2599        var hideDropdown = function(e) {
2600            e.currentTarget.classList.remove("hero-nav__item--show-dropdown");
2601        };
2602
2603        var toggleDropdown = function(e) {
2604            e.currentTarget.classList.toggle("hero-nav__item--show-dropdown");
2605        };
2606
2607        function setupDropdowns(mediaQuery) {
2608            document
2609                .querySelectorAll(".hero-nav__item--with-dropdown")
2610                .forEach(function(liElement) {
2611                    if (mediaQuery.matches) {
2612                        var liElclassList = liElement.classList;
2613                        if (
2614                            !liElclassList.contains("hero-nav__item--dropdown-left") ||
2615                            !liElclassList.contains("hero-nav__item--dropdown-right")
2616                        ) {
2617                            var linkWidth = liElement.getBoundingClientRect().width;
2618                            liElement.querySelector(".dropdown").style.transform =
2619                                "translateX(calc(-15% + " + linkWidth / 2 + "px))";
2620                        }
2621
2622                        liElement.addEventListener("mouseenter", showDropdown);
2623                        liElement.addEventListener("mouseleave", hideDropdown);
2624
2625                        /* If someone resize his browser to small screen */
2626                        var heroNavLink = liElement.querySelector(".hero-nav__link");
2627                        heroNavLink.removeEventListener("click", toggleDropdown);
2628                    } else {
2629                        /* if someone resize his browser to large screen */
2630                        liElement.removeEventListener("mouseenter", showDropdown);
2631                        liElement.removeEventListener("mouseleave", hideDropdown);
2632                        liElement.querySelector(".dropdown").style.transform = "";
2633
2634                        liElement.addEventListener("click", toggleDropdown);
2635                    }
2636                });
2637        }
2638
2639        var mediaQuery = window.matchMedia("(min-width: 992px)");
2640        /* setup dropdowns on page load */
2641        setupDropdowns(mediaQuery);
2642        mediaQuery.addListener(function(mediaQuery) {
2643            setupDropdowns(mediaQuery);
2644
2645            if (mediaQuery.matches) {
2646                var heroMenu = document.querySelector("#hero-menu");
2647                heroMenu.style.height = "";
2648                bodyScrollLock.unlock(heroMenu);
2649            }
2650        });
2651
2652        /* Toggle Menu on mobile */
2653        var heroMenu = document.querySelector("#hero-menu");
2654        document.querySelector("[close-nav-menu]").onclick = function(e) {
2655            heroMenu.classList.toggle("ft-menu--js-show");
2656            bodyScrollLock.unlock(heroMenu);
2657        };
2658
2659        document.querySelector("[open-nav-menu]").onclick = function(e) {
2660            heroMenu.classList.toggle("ft-menu--js-show");
2661            heroMenu.style.height = window.innerHeight + "px";
2662            bodyScrollLock.lock(heroMenu);
2663        };
2664        /* Close mobile Menu & scroll smoothly */
2665        function closeMenuAndGoTo(query) {
2666            // Guard against bare href="#" placeholders (e.g. dropdown toggles)
2667            // which would make querySelector("#") throw a SyntaxError.
2668            if (!query || query === "#" || query.length < 2) {
2669                document.querySelector("#hero-menu").classList.toggle("ft-menu--js-show");
2670                return;
2671            }
2672            document.querySelector("#hero-menu").classList.toggle("ft-menu--js-show");
2673            setTimeout(() => {
2674                const element = document.querySelector(query);
2675                if (!element) return;
2676                window.scrollTo({
2677                    top: element.getBoundingClientRect().top,
2678                    behavior: "smooth",
2679                });
2680            }, 250);
2681        }
2682
2683        document
2684            .querySelector("#hero-menu")
2685            .querySelectorAll("[href*='#']:not(.dropdown-toggle)")
2686            .forEach(function(link) {
2687                link.onclick = function(event) {
2688                    event.preventDefault();
2689                    closeMenuAndGoTo(link.getAttribute("href"));
2690                };
2691            });
2692
2693        /* Make the navigation sticky */
2694        var nav = document.querySelector(".hero-nav");
2695        window.onscroll = function(e) {
2696            var logoElement = document.querySelector("[change-src-onscroll]");
2697            if (window.scrollY > nav.getBoundingClientRect().height) {
2698                if (!nav.classList.contains("hero-nav--is-sticky")) {
2699                    window.logoSrc = logoElement.getAttribute("src");
2700                    logoElement.setAttribute(
2701                        "src",
2702                        logoElement.getAttribute("change-src-onscroll")
2703                    );
2704                    logoElement.setAttribute("change-src-onscroll", logoSrc);
2705                }
2706
2707                nav.classList.add("hero-nav--is-sticky");
2708            } else if (window.scrollY === 0) {
2709                if (nav.classList.contains("hero-nav--is-sticky")) {
2710                    window.logoSrc = logoElement.getAttribute("src");
2711                    logoElement.setAttribute(
2712                        "src",
2713                        logoElement.getAttribute("change-src-onscroll")
2714                    );
2715                    logoElement.setAttribute("change-src-onscroll", logoSrc);
2716                }
2717
2718                nav.classList.remove("hero-nav--is-sticky");
2719            }
2720        };
2721
2722        //Toggle template category nested  menu
2723$(document).on('click', '.category-menu', function() {
2724    const $icon = $(this);
2725    const $nestedMenu = $('#' + $icon.data('menu-id'));
2726    $nestedMenu.slideToggle();
2727    $icon.toggleClass('active');
2728});    });
2729</script>
2729
2730</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.