PageSourceSearch

https://price-estimation-calculator.webflow.io/success

html price-estimation-calculator.webflow.io collected 2026-10-03 13:37:01 UTC 22,899 bytes, 394 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Wed Jul 09 2025 09:18:49 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="price-estimation-calculator.webflow.io" data-wf-page="6852b920593d17ffe50dd6d1" data-wf-site="6852b920593d17ffe50dd6d5"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Success</title><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/6852b920593d17ffe50dd6d5/css/price-estimation-calculator.shared.73236f567.css" rel="stylesheet" type="text/css"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/>
1<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
1<script type="text/javascript">WebFont.load({  google: {    families: ["DM Sans:100,200,300,regular,500,600,700,800,900","Plus Jakarta Sans:200,300,regular,500,600,700,800","Manrope:200,300,regular,500,600,700,800"]  }});</script>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/66a0e364c9ecfecfb8386e5d/66a0e364c9ecfecfb8386ee9_fav-icon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/66a0e364c9ecfecfb8386e5d/66a0e364c9ecfecfb8386eea_web-clip.png" rel="apple-touch-icon"/><!-- Memberstack webflow package -->
2<script data-memberstack-app="app_cm0l0fjnj00jb0stu4g573kn5" src="https://static.memberstack.com/scripts/v1/memberstack.js" type="text/javascript"></script>
2</head><body><div class="page-wrapper"><div class="global-styles w-embed"><style>
3
4/* Make text look crisper and more legible in all browsers */
5body {
6  -webkit-font-smoothing: antialiased;
7  -moz-osx-font-smoothing: grayscale;
8  font-smoothing: antialiased;
9  text-rendering: optimizeLegibility;
10}
11
12/* Focus state style for keyboard navigation for the focusable elements */
13*[tabindex]:focus-visible,
14  input[type="file"]:focus-visible {
15   outline: 0.125rem solid #4d65ff;
16   outline-offset: 0.125rem;
17}
18
19/* Set color style to inherit */
20.inherit-color * {
21    color: inherit;
22}
23
24/* Get rid of top margin on first element in any rich text element */
25.w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child {
26  margin-top: 0 !important;
27}
28
29/* Get rid of bottom margin on last element in any rich text element */
30.w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child {
31	margin-bottom: 0 !important;
32}
33
34
35/* Make sure containers never lose their center alignment */
36.container-medium,.container-small, .container-large {
37	margin-right: auto !important;
38  margin-left: auto !important;
39}
40
41/* 
42Make the following elements inherit typography styles from the parent and not have hardcoded values. 
43Important: You will not be able to style for example "All Links" in Designer with this CSS applied.
44Uncomment this CSS to use it in the project. Leave this message for future hand-off.
45*/
46/*
47a,
48.w-input,
49.w-select,
50.w-tab-link,
51.w-nav-link,
52.w-dropdown-btn,
53.w-dropdown-toggle,
54.w-dropdown-link {
55  color: inherit;
56  text-decoration: inherit;
57  font-size: inherit;
58}
59*/
60
61/* Apply "..." after 3 lines of text */
62.text-style-3lines {
63	display: -webkit-box;
64	overflow: hidden;
65	-webkit-line-clamp: 3;
66	-webkit-box-orient: vertical;
67}
68
69/* Apply "..." after 2 lines of text */
70.text-style-2lines {
71	display: -webkit-box;
72	overflow: hidden;
73	-webkit-line-clamp: 2;
74	-webkit-box-orient: vertical;
75}
76
77/* These classes are never overwritten */
78.hide {
79  display: none !important;
80}
81
82@media screen and (max-width: 991px) {
83    .hide, .hide-tablet {
84        display: none !important;
85    }
86}
87  @media screen and (max-width: 767px) {
88    .hide-mobile-landscape{
89      display: none !important;
90    }
91}
92  @media screen and (max-width: 479px) {
93    .hide-mobile{
94      display: none !important;
95    }
96}
97 
98.margin-0 {
99  margin: 0rem !important;
100}
101  
102.padding-0 {
103  padding: 0rem !important;
104}
105
106.spacing-clean {
107padding: 0rem !important;
108margin: 0rem !important;
109}
110
111.margin-top {
112  margin-right: 0rem !important;
113  margin-bottom: 0rem !important;
114  margin-left: 0rem !important;
115}
116
117.padding-top {
118  padding-right: 0rem !important;
119  padding-bottom: 0rem !important;
120  padding-left: 0rem !important;
121}
122  
123.margin-right {
124  margin-top: 0rem !important;
125  margin-bottom: 0rem !important;
126  margin-left: 0rem !important;
127}
128
129.padding-right {
130  padding-top: 0rem !important;
131  padding-bottom: 0rem !important;
132  padding-left: 0rem !important;
133}
134
135.margin-bottom {
136  margin-top: 0rem !important;
137  margin-right: 0rem !important;
138  margin-left: 0rem !important;
139}
140
141.padding-bottom {
142  padding-top: 0rem !important;
143  padding-right: 0rem !important;
144  padding-left: 0rem !important;
145}
146
147.margin-left {
148  margin-top: 0rem !important;
149  margin-right: 0rem !important;
150  margin-bottom: 0rem !important;
151}
152  
153.padding-left {
154  padding-top: 0rem !important;
155  padding-right: 0rem !important;
156  padding-bottom: 0rem !important;
157}
158  
159.margin-horizontal {
160  margin-top: 0rem !important;
161  margin-bottom: 0rem !important;
162}
163
164.padding-horizontal {
165  padding-top: 0rem !important;
166  padding-bottom: 0rem !important;
167}
168
169.margin-vertical {
170  margin-right: 0rem !important;
171  margin-left: 0rem !important;
172}
173  
174.padding-vertical {
175  padding-right: 0rem !important;
176  padding-left: 0rem !important;
177}
178</style></div><div class="section_top-bar"><div class="padding-global"><div class="container-large"><div class="top-bar_inner"><a href="/" class="w-inline-block"><img src="https://cdn.prod.website-files.com/6852b920593d17ffe50dd6d5/6852b920593d17ffe50dd6f4_memberstacklogo.svg" loading="lazy" alt="" class="intro_logo"/></a><a href="https://webflow.com/made-in-webflow/website/price-estimation-calculator" target="_blank" class="button is-icon 
178is-brand is-clone w-inline-block"><div class="clone-icon w-embed"><svg data-wf-icon="DuplicateOutlineIcon" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 3C6 2.44772 6.44772 2 7 2H13C13.5523 2 14 2.44772 14 3V9C14 9.55228 13.5523 10 13 10H7C6.44772 10 6 9.55228 6 9V3ZM7 3H13V9H7V3Z" fill="currentColor"></path><path d="M3 5V12C3 12.5523 3.44772 13 4 13H11V12H4V5H3Z" fill="currentColor"></path></svg></div><div>Clone Project</div></a></div></div></div></div><div class="delete-me"><div><div class="ms-iframe"><div class="ms-iframe-embed w-embed w-iframe"><iframe id="memberstack-iframe" src="https://memberstack-embeds.webflow.io/branding?ref=blank" sandbox="allow-same-origin allow-scripts allow-forms allow-top-navigation allow-popups"></iframe>
179
180
181<style>
182iframe {
183		height: 100%;
184    width: 100%;
185    border-width: 0px;
186    border-style: inset;
187    border-color: initial;
188    border-image: initial;
189    border: 0;
190    border: none;
191    min-height: 0px;
192    min-width: 0px;
193    background: transparent;
194}
195
196* {
197    box-sizing: border-box;
198}
199
200/* width */
201::-webkit-scrollbar {
202    height: 0px;
203    width: 0px;
204    background-color:;
205}
206
207/* Track */
208::-webkit-scrollbar-track {
209    background: transparent; 
210}
211
212/* Handle */
213::-webkit-scrollbar-thumb {
214    background: transparent; 
215}
216
217/* Handle on hover */
218::-webkit-scrollbar-thumb:hover {
219    background: transparent; 
220}
221   
222</style></div><div class="hidden-embed w-embed w-script">
222<script>
223  // get the domain name of the page where the iframe is embedded
224  var domain = window.location.hostname;
225
226  // get the iframe element
227  var iframe = document.getElementById('memberstack-iframe');
228
229  // get the src attribute value of the iframe
230  var src = iframe.getAttribute('src');
231
232  // replace the ref value in the src with the domain name
233  src = src.replace('ref=blank', 'ref=' + domain);
234
235  // set the new src value to the iframe
236  iframe.setAttribute('src', src);
237</script>
237</div></div></div></div><div class="cta-button"></div><div class="section"><div id="Price-Calculator" class="calculator-form w-form"><form id="wf-form-" name="wf-form-" data-name="" method="get" data-ms-code="price-calculator" class="w-clearfix" data-wf-page-id="6852b920593d17ffe50dd6d1" data-wf-element-id="14b9c99b-6907-e064-ad95-9b34df2f5259"><h1 class="form-name">Web Agency Price Estimator</h1><div class="calculator-block"><div id="w-node-_69fb10b7-b86d-765f-9e10-43c8fd6599b4-e50dd6d1" class="calculator-wrapper"><div class="calculator-input w-clearfix"><label for="Input-Slider" class="field-label">How many pages will your website have?</label><input type="range" data-ms-code-slider="pages" data-price-per-unit="150" class="form_input max-width-full"/><div class="range-slider-info w-clearfix"><div class="min">0</div><div class="max">100</div></div><div class="w-embed"><style>
238input[type="range"][data-ms-code-slider="pages"] {
239  accent-color: #dd23bb; /* Replace with your desired color */
240}
241</style></div></div><div class="calculator-input"><h6 class="margin-bottom margin-small">Content Management System</h6><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-feature-group="cms" data-price="0" name="no-cms" data-name="no-cms" type="checkbox" id="no-cms"/><span class="w-form-label" for="no-cms">No CMS</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-feature-group="cms" data-price="1000" name="basic-cms" data-name="basic-cms" type="checkbox" id="basic-cms"/><span class="w-form-label" for="basic-cms">Basic CMS</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-feature-group="cms" data-price="2500" name="advanced-cms" data-name="advanced-cms" type="checkbox" id="advanced-cms"/><span class="w-form-label" for="advanced-cms">Advanced CMS (Blog, Portfolio)</span></label></div><div class="calculator-input"><h6 class="margin-bottom margin-small">What is your goal</h6><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="500" name="checkbox" data-name="Checkbox" data-summary-group="goal" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">Build Trust</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="1200" name="checkbox" data-name="Checkbox" data-summary-group="goal" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">Reach Audience</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="3000" name="checkbox" data-name="Checkbox" data-summary-group="goal" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">Generate Leads</span></label></div><div class="calculator-input"><h6 class="margin-bottom margin-small">Do you need help with branding?</h6><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="2500" name="branding" data-name="branding" data-summary-group="branding" type="checkbox" id="branding"/><span class="w-form-label" for="branding">Yes, I need branding help</span></label></div><div class="calculator-input"><h6 class="margin-bottom margin-small">Do you have an existing website</h6><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="1500" name="existing-website" data-name="existing-website" data-summary-group="existing-website" type="checkbox" id="existing-website"/><span class="w-form-label" for="existing-website">Yes, I have a site to migrate/redesign</span></label></div><div class="calculator-input"><h6 class="margin-bottom margin-small">Features &amp; Services</h6><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="4500" name="checkbox" data-name="Checkbox" data-summary-group="features" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">Custom UI/UX Design</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="5000" name="checkbox" data-name="Checkbox" data-summary-group="features" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">E-commerce Functionality</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="6000" name="checkbox" data-name="Checkbox" data-summary-group="features" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">Blog Integration</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="2000" name="checkbox" data-name="Checkbox" data-summary-group="features" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">Basic SEO Setup</span></label><label class="w-checkbox checkbox-field"><input class="w-checkbox-input" data-price="1500" name="checkbox" data-name="Checkbox" data-summary-group="features" type="checkbox" id="checkbox"/><span class="w-form-label" for="checkbox">Newsletter Integration</span></label></div></div><div id="w-node-b740a7a8-988b-bdbd-9a8f-3cb5e4d00f42-e50dd6d1"><div id="w-node-_14b9c99b-6907-e064-ad95-9b34df2f52f6-e50dd6d1" class="calculator-output-block"><p>Please note the following are estimations based on avarage hours and resources.</p><div class="total-features"><div><strong>Total Pages:</strong></div>
241<div data-output-type="value" data-ms-code-output="pages">0</div></div><div class="total-features"><div><strong>Content Management System</strong></div><div data-ms-code-summary="cms">[output]</div></div><div class="total-features"><div><strong>Goal</strong></div><div data-ms-code-summary="goal">[output]</div></div><div class="total-features"><div><strong>Branding</strong></div><div data-ms-code-summary="branding">[output]</div></div><div class="total-features"><div><strong>Existing Website</strong></div><div data-ms-code-summary="existing-website">[output]</div></div><div class="total-features"><div><strong>Features</strong></div><div data-ms-code-summary="features">[output]</div></div><div class="calculator-revenue-output-block"><h6>Total price</h6><h6 data-ms-code-price-total="" class="price-amount">xxxx</h6></div></div></div></div></form><div class="w-form-done"><p>Thank you! Your submission has been received!</p></div><div class="error-message w-form-fail"><p>Oops! Something went wrong while submitting the form</p></div></div><div class="w-form"><form id="wf-form-Price-Estimation-Form" name="wf-form-Price-Estimation-Form" data-name="Price Estimation Form" method="get" data-ms-code="submission-form" data-wf-page-id="6852b920593d17ffe50dd6d1" data-wf-element-id="0d9a7d0e-1da8-53e0-ed4f-07095fe792bb"><div class="hidden-inputs"><input class="form_input hidden-input w-input" data-ms-code-hidden="total-price" maxlength="256" name="Total-Price" data-name="Total Price" placeholder="" type="text" id="Total-Price"/><input class="form_input hidden-input w-input" data-ms-code-hidden="pages" maxlength="256" name="Pages" data-name="Pages" placeholder="" type="text" id="Pages"/><input class="form_input hidden-input w-input" data-ms-code-hidden="cms" maxlength="256" name="CMS" data-name="CMS" placeholder="" type="text" id="CMS"/><input class="form_input hidden-input w-input" data-ms-code-hidden="goal" maxlength="256" name="Goals" data-name="Goals" placeholder="" type="text" id="Goals"/><input class="form_input hidden-input w-input" data-ms-code-hidden="branding" maxlength="256" name="Branding" data-name="Branding" placeholder="" type="text" id="Branding"/><input class="form_input hidden-input w-input" data-ms-code-hidden="existing-website" maxlength="256" name="Existing-Website" data-name="Existing Website" placeholder="" type="text" id="Existing-Website"/><input class="form_input hidden-input w-input" data-ms-code-hidden="features" maxlength="256" name="Features" data-name="Features" placeholder="" type="text" id="Features"/></div><div class="button-group align-center"><input type="submit" data-wait="Please wait..." class="button w-button" value="Get My Estimate"/></div></form><div class="success-message-2 w-form-done"><div>Thank you! Your request has been received!</div></div><div class="w-form-fail"><div>Oops! Something went wrong while submitting the form.</div></div></div></div></div>
241<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=6852b920593d17ffe50dd6d5" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
241<script src="https://cdn.prod.website-files.com/6852b920593d17ffe50dd6d5/js/price-estimation-calculator.schunk.36b8fb49256177c8.js" type="text/javascript"></script>
241<script src="https://cdn.prod.website-files.com/6852b920593d17ffe50dd6d5/js/price-estimation-calculator.schunk.84129606b358a198.js" type="text/javascript"></script>
241<script src="https://cdn.prod.website-files.com/6852b920593d17ffe50dd6d5/js/price-estimation-calculator.c003fd2b.9d214831cfa4de82.js" type="text/javascript"></script>
241<!-- 💙 MEMBERSCRIPT #159 v0.1 💙 - PRICE ESTIMATION CALCULATOR -->
242<script>
243document.addEventListener("DOMContentLoaded", function () {
244  const calculator = document.querySelector('[data-ms-code="price-calculator"]');
245  const submissionForm = document.querySelector('[data-ms-code="submission-form"]');
246
247  if (!calculator || !submissionForm) {
248    console.error("Calculator or Submission Form not found.");
249    return;
250  }
251
252  const BASE_PRICE = 500; // Replace with your minimum/base price
253
254  const calculatePriceAndSummary = () => {
255    let subTotal = 0;
256
257    // 1. PRICE CALCULATION
258    const pricedInputs = calculator.querySelectorAll('[data-price], [data-price-per-unit]');
259    pricedInputs.forEach((input) => {
260      if (input.type === "checkbox" && !input.checked) return;
261      const price = parseFloat(input.dataset.price) || 0;
262      const perUnit = parseFloat(input.dataset.pricePerUnit) || 0;
263      const value = parseFloat(input.value) || 0;
264      subTotal += perUnit > 0 ? value * perUnit : price;
265    });
266
267    const total = BASE_PRICE + subTotal;
268
269    // 2. UPDATE TOTAL DISPLAY
270    const totalPriceEl = calculator.querySelector('[data-ms-code-price-total]');
271    if (totalPriceEl) totalPriceEl.textContent = `$${Math.round(total).toLocaleString()}`;
272
273    // 3. BUILD GROUP SUMMARIES + HIDDEN FIELDS
274    const allGroupNames = new Set();
275    submissionForm.querySelectorAll("[data-ms-code-hidden]").forEach((el) => {
276      allGroupNames.add(el.dataset.msCodeHidden);
277    });
278
279    allGroupNames.forEach((group) => {
280      let selectedLabels = [];
281
282      const groupInputs = calculator.querySelectorAll(
283        `input[data-summary-group="${group}"]:checked, 
284         input[data-feature-group="${group}"]:checked, 
285         input[data-summary-group="${group}"][type="range"],
286         input[data-ms-code-slider="${group}"],
287         select[data-summary-group="${group}"]`
288      );
289
290      groupInputs.forEach((input) => {
291        if (input.type === "range") {
292          selectedLabels.push(input.value);
293        } else if (input.tagName === "SELECT") {
294          const selectedOption = input.options[input.selectedIndex];
295          if (selectedOption) selectedLabels.push(selectedOption.textContent);
296        } else {
297          const label = input.parentElement.querySelector(".w-form-label");
298          if (label) selectedLabels.push(label.textContent);
299        }
300      });
301
302      const summaryText = selectedLabels.length > 0 ? selectedLabels.join(", ") : "None";
303
304      const summaryEl = calculator.querySelector(`[data-ms-code-summary="${group}"]`);
305      if (summaryEl) summaryEl.textContent = summaryText;
306
307      const hiddenInput = submissionForm.querySelector(`[data-ms-code-hidden="${group}"]`);
308      if (hiddenInput) hiddenInput.value = summaryText;
309    });
310
311    // 4. SET TOTAL IN HIDDEN FIELD
312    const hiddenPrice = submissionForm.querySelector('[data-ms-code-hidden="total-price"]');
313    if (hiddenPrice) hiddenPrice.value = total;
314
315    // 5. HANDLE OUTPUT DISPLAY FOR GROUPS (subtotal or raw value)
316    allGroupNames.forEach((group) => {
317      let groupTotal = 0;
318      const groupInputs = calculator.querySelectorAll(
319        `input[data-summary-group="${group}"]:checked, 
320         input[data-feature-group="${group}"]:checked, 
321         input[data-summary-group="${group}"][type="range"],
322         input[data-ms-code-slider="${group}"],
323         select[data-summary-group="${group}"]`
324      );
325
326      groupInputs.forEach((input) => {
327        const price = parseFloat(input.dataset.price) || 0;
328        const perUnit = parseFloat(input.dataset.pricePerUnit) || 0;
329        const value = parseFloat(input.value) || 0;
330        groupTotal += perUnit > 0 ? value * perUnit : price;
331      });
332
333      const groupOutput = calculator.querySelector(`[data-ms-code-output="${group}"]`);
334      if (groupOutput) {
335        const outputType = groupOutput.dataset.outputType || "price";
336        if (outputType === "value") {
337          // Output raw slider or number input value
338          const valueInput = calculator.querySelector(
339            `input[data-ms-code-slider="${group}"], 
340             input[data-summary-group="${group}"][type="range"]`
341          );
342          if (valueInput) {
343            groupOutput.textContent = valueInput.value;
344          }
345        } else {
346          // Output subtotal price (default)
347          groupOutput.textContent = `$${Math.round(groupTotal).toLocaleStr
347ing()}`;
348        }
349      }
350    });
351  };
352
353  const setupEventListeners = () => {
354    calculator.addEventListener("input", calculatePriceAndSummary);
355
356    // Exclusive checkbox behavior
357    const checkboxGroups = {};
358    calculator.querySelectorAll('input[type="checkbox"][data-feature-group]').forEach((cb) => {
359      const groupName = cb.dataset.featureGroup;
360      if (!checkboxGroups[groupName]) checkboxGroups[groupName] = [];
361      checkboxGroups[groupName].push(cb);
362    });
363
364    Object.values(checkboxGroups).forEach((group) => {
365      group.forEach((cb) => {
366        cb.addEventListener("change", () => {
367          if (cb.checked) {
368            group.forEach((otherCb) => {
369              if (otherCb !== cb) otherCb.checked = false;
370            });
371          }
372          calculatePriceAndSummary();
373        });
374      });
375    });
376
377    // Reset on submission
378    submissionForm.addEventListener("submit", () => {
379      setTimeout(() => {
380        calculator.querySelectorAll('input[type="checkbox"]').forEach((cb) => (cb.checked = false));
381        calculator.querySelectorAll('input[type="range"]').forEach((slider) => {
382          slider.value = slider.defaultValue || slider.min || "0";
383          slider.dispatchEvent(new Event("input", { bubbles: true }));
384        });
385        calculatePriceAndSummary();
386      }, 100);
387    });
388  };
389
390  setupEventListeners();
391  calculatePriceAndSummary();
392});
393</script>
393
394</body></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.