PageSourceSearch

https://evquotes.ca/page/contact-us/

html evquotes.ca collected 2026-10-10 00:07:35 UTC 69,711 bytes, 1,593 lines download raw bytes

1
2
3
4<!DOCTYPE html>
5<html lang="en">
6
7<head>
8    <meta charset="UTF-8">
9    <title>Contact EV Quotes</title>
10    <meta name="viewport" content="width=device-width, initial-scale=1">
11    <link rel="icon" type="image/png" href="/static/images/favicon.png">
12    <link rel="manifest" href="/static/manifest.json">
13    <meta name="theme-color" content="#47bac1">
14    <meta name="mobile-web-app-capable" content="yes">
15    <meta name="apple-mobile-web-app-capable" content="yes">
16    <meta name="apple-mobile-web-app-status-bar-style" content="default">
17    <meta name="apple-mobile-web-app-title" content="EV Quotes">
18
19    <!-- SEO Meta Tags -->
20    <meta name="title" content="Contact EV Quotes">
21    <meta name="description" content="">
22    <meta name="keywords" content="">
23    
24    
25
26    
27    <!-- Open Graph and Twitter Card Meta Tags -->
28    
29    <meta property="og:image" content="https://evquotes.ca/static/images/evquotes.png" />
30    <meta property="og:image:secure_url" content="https://evquotes.ca/static/images/evquotes.png" />
31    <meta name="twitter:image" content="https://evquotes.ca/static/images/evquotes.png" />
32    
33
34    <!-- Bootstrap 5 CSS -->
35    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
36    <!-- Bootstrap Icons -->
37    <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet" media="print" onload="this.media='all'">
38    <noscript><link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet"></noscript>
39
40    <!-- other cdn -->
41    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/fonts/remixicon.css" media="print" onload="this.media='all'">
42    <noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/fonts/remixicon.css"></noscript>
43
44    <!-- fonts cdn -->
45    <link rel="preconnect" href="https://fonts.googleapis.com">
46    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
47    <link href="https://fonts.googleapis.com/css2?family=Public+Sans:ital@0;1&display=swap" rel="stylesheet" media="print" onload="this.media='all'">
48    <noscript><link href="https://fonts.googleapis.com/css2?family=Public+Sans:ital@0;1&display=swap" rel="stylesheet"></noscript>
49
50    
51
52    <!-- Optional Custom CSS -->
53    <link rel="stylesheet" href="/static/css/style.css">
54 
55    
56<link rel="stylesheet" href="/static/css/blog-post.css">
57
58
59    <!-- Defer menu CSS loading for better performance -->
60    
60<script>
61        // Load menu-related CSS after page load for better performance
62        function loadDeferredCSS() {
63            const cssFiles = [
64                '/static/css/mobile-menu.css',
65                '/static/css/avatar-dropdown.css'
66            ];
67            
68            cssFiles.forEach(function(href) {
69                const link = document.createElement('link');
70                link.rel = 'stylesheet';
71                link.href = href;
72                link.media = 'print'; // Load as non-blocking
73                link.onload = function() {
74                    this.media = 'all'; // Apply styles after loading
75                };
76                document.head.appendChild(link);
77            });
78        }
79        
80        // Load CSS after DOM is ready or immediately if already loaded
81        if (document.readyState === 'loading') {
82            document.addEventListener('DOMContentLoaded', loadDeferredCSS);
83        } else {
84            loadDeferredCSS();
85        }
86    </script>
86
87
88    <!-- Link Swiper's CSS without blocking first paint -->
89    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" media="print" onload="this.media='all'">
90    <noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"></noscript>
91</head>
92
93<body>
94    <!-- Schema.org JSON-LD Structured Data -->
95    
96    
97
98    <!-- Footer -->
99    
100
101
102<!-- Top Strip -->
103<div class="top-strip">
104  <div class="container">
105    <div class="row align-items-center">
106      <div class="col-12">
107        
108          <!-- Default: Show authentication content -->
109          <div class="top-strip-right d-flex align-items-center justify-content-end">
110            
111              <!-- Not logged in state -->
112              <div class="d-flex w-100 justify-content-between align-items-center">
113                
114                <a href="/quotes" class="top-strip-link" style="text-decoration: none;">
115                  
116                  
117                </a>
118                <a href="/accounts/login/" class="top-strip-link">
119                  SIGN IN
120                </a>
121              </div>
122            
123          </div>
124        
125      </div>
126    </div>
127  </div>
128</div>
129
130<header class="container bg-white" style="max-width: 1200px;">
131  <nav class="navbar navbar-expand-md navbar-light py-4">
132    <div class="container-fluid px-0">
133      <a class="navbar-brand" href="/">
134        <div class="flex items-center space-x-2">
135          <img src="/static/images/logo.png" alt="EV Logo" class="logo-img" width="248" height="62">
136        </div>
137      </a>
138      
139      <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#navbarListDiv"
140        aria-controls="navbarListDiv" aria-expanded="false" aria-label="Toggle navigation">
141        <span class="navbar-toggler-icon"></span>
142      </button>
143      <div class="offcanvas offcanvas-start" tabindex="-1" id="navbarListDiv">
144        <div class="offcanvas-header">
145          <h5 class="offcanvas-title">Menu</h5>
146          <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
147        </div>
148        <div class="offcanvas-body align-items-center">
149          <ul class="navbar-nav ms-auto me-3 mb-2 mb-lg-0" style="justify-content: right;">
150            
151            
152            
153            <!-- Regular navigation item without children -->
154            <li class="nav-item">
155              <a class="nav-link header-list-tab fs-18 fw-bold primary-text-color "
156                aria-current="page"
157                href="/">
158                Home
159                <hr>
160              </a>
161            </li>
162            
163            
164            
165            
166            
167            <!-- Parent item with children - dropdown -->
168            <li class="nav-item dropdown">
169              <a class="nav-link header-list-tab fs-18 fw-bold primary-text-color" href="#"
170                id="navbarDropdown8" role="button" data-bs-toggle="dropdown" aria-expanded="false">
171                How It Works
172              </a>
173              <ul class="dropdown-menu shadow-sm border-0" aria-labelledby="navbarDropdown8"
174                style="border-radius: 12px; padding: 8px 0; margin-top: 8px;">
175                
176                <li>
177                  <a class="dropdown-item px-4 py-3 fs-16 fw-medium text-dark"
178                    href="/homeowners"
179                    style="transition: all 0.2s ease; ">
180                    For EV Owners
181                  </a>
182                </li>
183                
184                <li>
185                  <a class="dropdown-item px-4 py-3 fs-16 fw-medium text-dark"
186                    href="/installers"
187                    style="transition: all 0.2s ease; ">
188                    For EV Installers
189                  </a>
190                </li>
191                
192              </ul>
193            </li>
194            
195            
196            
197            
198            
199            
200            
201            
202            
203            <!-- Regular navigation item without children -->
204            <li class="nav-item">
205              <a class="nav-link header-list-tab fs-18 fw-bold primary-text-color "
206                aria-current="page"
207                href="https://evquotes.ca/guides">
208                Guides
209                <hr>
210              </a>
211            </li>
212            
213            
214            
215          </ul>
216          <!-- <form class="d-flex"> -->
217          <!-- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search"> -->
218          <a href="/quotes" class="btn justify-content-center get-quote-btn choose-button align-items-center d-flex"
219            style="width: 170px; height: 50px;">Get a Quote</a>
220          <!-- </form> -->
221        </div>
222
223      </div>
224      
225    </div>
226  </nav>
227</header>
228
229    <!-- Page content -->
230    <main class="min-vh-100">
231        
232
233<section class="ev-section">
234  <div class="container">
235    <h2 class="ev-title"></h2>
236    <p class="ev-subtitle"></p>
237
238  </div>
239</section>
240
241<div class="container pb-4">
242  <!-- Content Centered -->
243  <div class="row justify-content-center mb-5">
244    <div class="col-lg-8 col-md-10">
245      <!-- Breadcrumb -->
246      <nav class="mb-4 mt-3" style="--bs-breadcrumb-divider: '>'; --bs-breadcrumb-divider-color: black;" aria-label="breadcrumb">
247        <ol class="breadcrumb mb-0">
248          <li class="breadcrumb-item"><a class="text-decoration-none text-black" href="/">Home</a></li>
249          <li class="breadcrumb-item active text-primary" aria-current="page">Contact Us</li>
250        </ol>
251      </nav>
252
253      <p>Get in touch with the EV Quotes head office for general inquiries, partnerships, or media requests. Our team is here to assist with anything related to EV charger installations and services across Canada.</p>
254
255<p>Head office:</p>
256
257<p>EV Quotes&nbsp;</p>
258
259<p>Address:</p>
260
261<p>2987 Rutherford Rd #202, <br>
262Vaughan, ON L4K 2N7</p>
263
264<p>Phone: +1 844-645-6560</p>
265<br />
266<!-- Elfsight Contact Form | EV Quotes Contact -->
266<script src="https://elfsightcdn.com/platform.js" async></script>
266
267<div class="elfsight-app-807e36c9-8a1d-4de1-9b6a-f9aa12b2b6b7" data-elfsight-app-lazy="">&nbsp;</div>
268    </div>
269  </div>
270</div>
271
272
273    </main>
274
275    <!-- Modal -->
276    <!-- Modal -->
277<div class="modal fade quote-modal" id="quoteModal" tabindex="-1" aria-labelledby="quoteModalLabel" aria-hidden="true">
278  <div class="modal-dialog">
279    <div class="modal-content quote-modal-content">
280
281      <div class="modal-header quote-modal-header border-0">
282        <h5 class="modal-title quote-modal-title" id="quoteModalLabel">
283          <!-- Get A Quote From <span class="text-primary">[Name of Installer]</span> -->
284          Get A Quote 
285        </h5>
286        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
287      </div>
288
289      <div class="modal-body">
290        <form id="quoteForm">
291          <label for="postcode" class="form-label quote-modal-label">Enter Your Postcode Now</label>
292          <input type="text" id="postcode" class="form-control quote-form-control" placeholder="e.g. SW1A 1AA" required>
293          <div id="postcodeError" class="text-danger mt-2" style="display: none;">Please enter your postcode to continue</div>
294          <a class="btn quote-btn" href="#" onclick="submitQuoteForm(event)" role="button">
295            Get a Quote
296          </a>
297        </form>
298      </div>
299
300    </div>
301  </div>
302</div>
303
304<script>
305let currentInstallerId = null;
306let currentQuoteType = null;
307
308function openQuoteModal(installerId = null, quoteType = 'general') {
309    currentInstallerId = installerId;
310    currentQuoteType = quoteType;
311    
312    // Update modal title based on quote type
313    const modalTitle = document.getElementById('quoteModalLabel');
314    if (quoteType === 'exclusive' && installerId) {
315        modalTitle.innerHTML = 'Get A Quote From <span class="text-primary">Selected Installer</span>';
316    } else if (quoteType === 'hybrid') {
317        modalTitle.innerHTML = 'Get Multiple Quotes';
318    } else {
319        modalTitle.innerHTML = 'Get A Quote';
320    }
321}
322
323function submitQuoteForm(event) {
324    event.preventDefault();
325    const postcode = document.getElementById('postcode').value.trim();
326    const errorDiv = document.getElementById('postcodeError');
327    
328    if (!postcode) {
329        errorDiv.style.display = 'block';
330        document.getElementById('postcode').classList.add('is-invalid');
331        return;
332    }
333    
334    errorDiv.style.display = 'none';
335    document.getElementById('postcode').classList.remove('is-invalid');
336    
337    // Construct professional URL with parameters
338    let url = "/quotes?postcode=" + encodeURIComponent(postcode);
339    
340    if (currentQuoteType) {
341        url += "&type=" + encodeURIComponent(currentQuoteType);
342    }
343    
344    if (currentInstallerId) {
345        url += "&installer=" + encodeURIComponent(currentInstallerId);
346    }
347    
348    window.location.href = url;
349}
350
351// Add input event listener to hide error when user starts typing
352document.getElementById('postcode').addEventListener('input', function() {
353    const errorDiv = document.getElementById('postcodeError');
354    if (this.value.trim()) {
355        errorDiv.style.display = 'none';
356        this.classList.remove('is-invalid');
357    }
358});
359</script>
359
360    
361    <!-- Footer -->
362    
363
364<link rel="stylesheet" href="/static/css/footer.css">
365
366
367
368<footer class="bg-white  font-size-16">
369    
370    
371    <!-- Top Section: Find Pros by Province -->
372    <div class="footer-middle-section mt-5" style="border-bottom: 1px solid #e5e7eb !important; padding-bottom: 3rem;">
373        <div class="container pt-1 pb-3 py-md-3">
374            
375            <h4 class="mb-3 mb-md-4 fw-semibold" style="color: #012152 !important;" hidden>Find EV Charger Installers near you</h4>
376
377            
378            <!-- Mobile Accordion -->
379            <div class="d-md-none">
380                <div class="accordion" id="regionAccordion">
381                    
382                    <div class="accordion-item border-0 bg-primary rounded-3 mb-2">
383                        <h2 class="accordion-header">
384                            <button class="accordion-button collapsed bg-primary text-white rounded-3 py-2" 
385                                    type="button" 
386                                    data-bs-toggle="collapse" 
387                                    data-bs-target="#region1"
388                                    style="box-shadow: none;">
389                                Ontario
390                            </button>
391                        </h2>
392                        <div id="region1" class="accordion-collapse collapse" data-bs-parent="#regionAccordion">
393                            <div class="accordion-body bg-white rounded-bottom-3">
394                                <ul class="list-unstyled mb-0">
395                                    
396                                    <li class="border-bottom py-2">
397                                        <a href="/ev-charger-installation/ajax/"
398                                           class="text-decoration-none text-dark d-block">
399                                            Ajax
400                                        </a>
401                                    </li>
402                                    
403                                    <li class="border-bottom py-2">
404                                        <a href="/ev-charger-installation/barrie/"
405                                           class="text-decoration-none text-dark d-block">
406                                            Barrie
407                                        </a>
408                                    </li>
409                                    
410                                    <li class="border-bottom py-2">
411                                        <a href="/ev-charger-installation/brampton/"
412                                           class="text-decoration-none text-dark d-block">
413                                            Brampton
414                                        </a>
415                                    </li>
416                                    
417                                    <li class="border-bottom py-2">
418                                        <a href="/ev-charger-installation/burlington/"
419                                           class="text-decoration-none text-dark d-block">
420                                            Burlington
421                                        </a>
422                                    </li>
423                                    
424                                    <li class="border-bottom py-2">
425                                        <a href="/ev-charger-installation/caledon/"
426                                           class="text-decoration-none text-dark d-block">
427                                            Caledon
428                                        </a>
429                                    </li>
430                                    
431                                    <li class="border-bottom py-2">
432                                        <a href="/ev-charger-installation/cambridge/"
433                                           class="text-decoration-none text-dark d-block">
434                                            Cambridge
435                                        </a>
436                                    </li>
437                                    
438                                    <li class="border-bottom py-2">
439                                        <a href="/ev-charger-installation/collingwood/"
440                                           class="text-decoration-none text-dark d-block">
441                                            Collingwood
442                                        </a>
443                                    </li>
444                                    
445                                    <li class="border-bottom py-2">
446                                        <a href="/ev-charger-installation/etobicoke/"
447                                           class="text-decoration-none text-dark d-block">
448                                            Etobicoke
449                                        </a>
450                                    </li>
451                                    
452                                    <li class="border-bottom py-2">
453                                        <a href="/ev-charger-installation/hamilton/"
454                                           class="text-decoration-none text-dark d-block">
455                                            Hamilton
456                                        </a>
457                                    </li>
458                                    
459                                    <li class="border-bottom py-2">
460                                        <a href="/ev-charger-installation/innisfil/"
461                                           class="text-decoration-none text-dark d-block">
462                                            Innisfil
463                                        </a>
464                                    </li>
465                                    
466                                    <li class="border-bottom py-2">
467                                        <a href="/ev-charger-installation/king-city/"
468                                           class="text-decoration-none text-dark d-block">
469                                            King City
470                                        </a>
471                                    </li>
472                                    
473                                    <li class="border-bottom py-2">
474                                        <a href="/ev-charger-installation/kitchener/"
475                                           class="text-decoration-none text-dark d-block">
476                                            Kitchener
477                                        </a>
478                                    </li>
479                                    
480                                    <li class="border-bottom py-2">
481                                        <a href="/ev-charger-installation/markham/"
482                                           class="text-decoration-none text-dark d-block">
483                                            Markham
484                                        </a>
485                                    </li>
486                                    
487                                    <li class="border-bottom py-2">
488                                        <a href="/ev-charger-installation/milton/"
489                                           class="text-decoration-none text-dark d-block">
490                                            Milton
491                                        </a>
492                                    </li>
493                                    
494                                    <li class="border-bottom py-2">
495                                        <a href="/ev-charger-installation/mississauga/"
496                                           class="text-decoration-none text-dark d-block">
497                                            Mississauga
498                                        </a>
499                                    </li>
500                                    
501                                    <li class="border-bottom py-2">
502                                        <a href="/ev-charger-installation/newmarket/"
503                                           class="text-decoration-none text-dark d-block">
504                                            Newmarket
505                                        </a>
506                                    </li>
507                                    
508                                    <li class="border-bottom py-2">
509                                        <a href="/ev-charger-installation/north-york/"
510                                           class="text-decoration-none text-dark d-block">
511                                            North York
512                                        </a>
513                                    </li>
514                                    
515                                    <li class="border-bottom py-2">
516                                        <a href="/ev-charger-installation/oakville/"
517                                           class="text-decoration-none text-dark d-block">
518                                            Oakville
519                                        </a>
520                                    </li>
521                                    
522                                    <li class="border-bottom py-2">
523                                        <a href="/ev-charger-installation/oshawa/"
524                                           class="text-decoration-none text-dark d-block">
525                                            Oshawa
526                                        </a>
527                                    </li>
528                                    
529                                    <li class="border-bottom py-2">
530                                        <a href="/ev-charger-installation/ottawa/"
531                                           class="text-decoration-none text-dark d-block">
532                                            Ottawa
533                                        </a>
534                                    </li>
535                                    
536                                    <li class="border-bottom py-2">
537                                        <a href="/ev-charger-installation/pickering/"
538                                           class="text-decoration-none text-dark d-block">
539                                            Pickering
540                                        </a>
541                                    </li>
542                                    
543                                    <li class="border-bottom py-2">
544                                        <a href="/ev-charger-installation/richmond-hill/"
545                                           class="text-decoration-none text-dark d-block">
546                                            Richmond Hill
547                                        </a>
548                                    </li>
549                                    
550                                    <li class="border-bottom py-2">
551                                        <a href="/ev-charger-installation/scarborough/"
552                                           class="text-decoration-none text-dark d-block">
553                                            Scarborough
554                                        </a>
555                                    </li>
556                                    
557                                    <li class="border-bottom py-2">
558                                        <a href="/ev-charger-installation/thornhill/"
559                                           class="text-decoration-none text-dark d-block">
560                                            Thornhill
561                                        </a>
562                                    </li>
563                                    
564                                    <li class="border-bottom py-2">
565                                        <a href="/ev-charger-installation/toronto/"
566                                           class="text-decoration-none text-dark d-block">
567                                            Toronto
568                                        </a>
569                                    </li>
570                                    
571                                    <li class="border-bottom py-2">
572                                        <a href="/ev-charger-installation/vaughan/"
573                                           class="text-decoration-none text-dark d-block">
574                                            Vaughan
575                                        </a>
576                                    </li>
577                                    
578                                    <li class="border-bottom py-2">
579                                        <a href="/ev-charger-installation/wasaga-beach/"
580                                           class="text-decoration-none text-dark d-block">
581                                            Wasaga Beach
582                                        </a>
583                                    </li>
584                                    
585                                    <li class="border-bottom py-2">
586                                        <a href="/ev-charger-installation/waterloo/"
587                                           class="text-decoration-none text-dark d-block">
588                                            Waterloo
589                                        </a>
590                                    </li>
591                                    
592                                    <li class="border-bottom py-2">
593                                        <a href="/ev-charger-installation/whitby/"
594                                           class="text-decoration-none text-dark d-block">
595                                            Whitby
596                                        </a>
597                                    </li>
598                                    
599                                    <li class="border-bottom py-2">
600                                        <a href="/ev-charger-installation/whitchurch-stouffville/"
601                                           class="text-decoration-none text-dark d-block">
602                                            Whitchurch-Stouffville
603                                        </a>
604                                    </li>
605                                    
606                                </ul>
607                            </div>
608                        </div>
609                    </div>
610                    
611                </div>
612            </div>
613
614            <!-- Desktop Tabbed Interface -->
615            <div class="d-none d-md-block">
616                <!-- Region Tabs -->
617                <div class="region-tabs">
618                    <nav class="nav nav-tabs border-0" id="regionTabs" role="tablist">
619                        
620                        <button class="nav-link region-tab active" 
621                                id="region-tab-1" 
622                                data-bs-toggle="tab" 
623                                data-bs-target="#region-pane-1" 
624                                type="button" 
625                                role="tab" 
626                                aria-controls="region-pane-1" 
627                                aria-selected="true">
628                            Ontario
629                        </button>
630                        
631                    </nav>
632                </div>
633
634                <!-- Tab Content -->
635                <div class="tab-content" id="regionTabContent">
636                    
637                    <div class="tab-pane fade show active" 
638                         id="region-pane-1" 
639                         role="tabpanel" 
640                         aria-labelledby="region-tab-1">
641                        
642                        <!-- Cities Grid -->
643                        <div class="row cities-grid g-0">
644                            
645                            <div class="col-md-3 col-lg-2">
646                                <a href="/ev-charger-installation/ajax/" 
647                                   class="text-decoration-none city-link">
648                                    Ajax
649                                </a>
650                            </div>
651                            
652                            <div class="col-md-3 col-lg-2">
653                                <a href="/ev-charger-installation/barrie/" 
654                                   class="text-decoration-none city-link">
655                                    Barrie
656                                </a>
657                            </div>
658                            
659                            <div class="col-md-3 col-lg-2">
660                                <a href="/ev-charger-installation/brampton/" 
661                                   class="text-decoration-none city-link">
662                                    Brampton
663                                </a>
664                            </div>
665                            
666                            <div class="col-md-3 col-lg-2">
667                                <a href="/ev-charger-installation/burlington/" 
668                                   class="text-decoration-none city-link">
669                                    Burlington
670                                </a>
671                            </div>
672                            
673                            <div class="col-md-3 col-lg-2">
674                                <a href="/ev-charger-installation/caledon/" 
675                                   class="text-decoration-none city-link">
676                                    Caledon
677                                </a>
678                            </div>
679                            
680                            <div class="col-md-3 col-lg-2">
681                                <a href="/ev-charger-installation/cambridge/" 
682                                   class="text-decoration-none city-link">
683                                    Cambridge
684                                </a>
685                            </div>
686                            
687                            <div class="col-md-3 col-lg-2">
688                                <a href="/ev-charger-installation/collingwood/" 
689                                   class="text-decoration-none city-link">
690                                    Collingwood
691                                </a>
692                            </div>
693                            
694                            <div class="col-md-3 col-lg-2">
695                                <a href="/ev-charger-installation/etobicoke/" 
696                                   class="text-decoration-none city-link">
697                                    Etobicoke
698                                </a>
699                            </div>
700                            
701                            <div class="col-md-3 col-lg-2">
702                                <a href="/ev-charger-installation/hamilton/" 
703                                   class="text-decoration-none city-link">
704                                    Hamilton
705                                </a>
706                            </div>
707                            
708                            <div class="col-md-3 col-lg-2">
709                                <a href="/ev-charger-installation/innisfil/" 
710                                   class="text-decoration-none city-link">
711                                    Innisfil
712                                </a>
713                            </div>
714                            
715                            <div class="col-md-3 col-lg-2">
716                                <a href="/ev-charger-installation/king-city/" 
717                                   class="text-decoration-none city-link">
718                                    King City
719                                </a>
720                            </div>
721                            
722                            <div class="col-md-3 col-lg-2">
723                                <a href="/ev-charger-installation/kitchener/" 
724                                   class="text-decoration-none city-link">
725                                    Kitchener
726                                </a>
727                            </div>
728                            
729                            <div class="col-md-3 col-lg-2">
730                                <a href="/ev-charger-installation/markham/" 
731                                   class="text-decoration-none city-link">
732                                    Markham
733                                </a>
734                            </div>
735                            
736                            <div class="col-md-3 col-lg-2">
737                                <a href="/ev-charger-installation/milton/" 
738                                   class="text-decoration-none city-link">
739                                    Milton
740                                </a>
741                            </div>
742                            
743                            <div class="col-md-3 col-lg-2">
744                                <a href="/ev-charger-installation/mississauga/" 
745                                   class="text-decoration-none city-link">
746                                    Mississauga
747                                </a>
748                            </div>
749                            
750                            <div class="col-md-3 col-lg-2">
751                                <a href="/ev-charger-installation/newmarket/" 
752                                   class="text-decoration-none city-link">
753                                    Newmarket
754                                </a>
755                            </div>
756                            
757                            <div class="col-md-3 col-lg-2">
758                                <a href="/ev-charger-installation/north-york/" 
759                                   class="text-decoration-none city-link">
760                                    North York
761                                </a>
762                            </div>
763                            
764                            <div class="col-md-3 col-lg-2">
765                                <a href="/ev-charger-installation/oakville/" 
766                                   class="text-decoration-none city-link">
767                                    Oakville
768                                </a>
769                            </div>
770                            
771                            <div class="col-md-3 col-lg-2">
772                                <a href="/ev-charger-installation/oshawa/" 
773                                   class="text-decoration-none city-link">
774                                    Oshawa
775                                </a>
776                            </div>
777                            
778                            <div class="col-md-3 col-lg-2">
779                                <a href="/ev-charger-installation/ottawa/" 
780                                   class="text-decoration-none city-link">
781                                    Ottawa
782                                </a>
783                            </div>
784                            
785                            <div class="col-md-3 col-lg-2">
786                                <a href="/ev-charger-installation/pickering/" 
787                                   class="text-decoration-none city-link">
788                                    Pickering
789                                </a>
790                            </div>
791                            
792                            <div class="col-md-3 col-lg-2">
793                                <a href="/ev-charger-installation/richmond-hill/" 
794                                   class="text-decoration-none city-link">
795                                    Richmond Hill
796                                </a>
797                            </div>
798                            
799                            <div class="col-md-3 col-lg-2">
800                                <a href="/ev-charger-installation/scarborough/" 
801                                   class="text-decoration-none city-link">
802                                    Scarborough
803                                </a>
804                            </div>
805                            
806                            <div class="col-md-3 col-lg-2">
807                                <a href="/ev-charger-installation/thornhill/" 
808                                   class="text-decoration-none city-link">
809                                    Thornhill
810                                </a>
811                            </div>
812                            
813                            <div class="col-md-3 col-lg-2">
814                                <a href="/ev-charger-installation/toronto/" 
815                                   class="text-decoration-none city-link">
816                                    Toronto
817                                </a>
818                            </div>
819                            
820                            <div class="col-md-3 col-lg-2">
821                                <a href="/ev-charger-installation/vaughan/" 
822                                   class="text-decoration-none city-link">
823                                    Vaughan
824                                </a>
825                            </div>
826                            
827                            <div class="col-md-3 col-lg-2">
828                                <a href="/ev-charger-installation/wasaga-beach/" 
829                                   class="text-decoration-none city-link">
830                                    Wasaga Beach
831                                </a>
832                            </div>
833                            
834                            <div class="col-md-3 col-lg-2">
835                                <a href="/ev-charger-installation/waterloo/" 
836                                   class="text-decoration-none city-link">
837                                    Waterloo
838                                </a>
839                            </div>
840                            
841                            <div class="col-md-3 col-lg-2">
842                                <a href="/ev-charger-installation/whitby/" 
843                                   class="text-decoration-none city-link">
844                                    Whitby
845                                </a>
846                            </div>
847                            
848                            <div class="col-md-3 col-lg-2">
849                                <a href="/ev-charger-installation/whitchurch-stouffville/" 
850                                   class="text-decoration-none city-link">
851                                    Whitchurch-Stouffville
852                                </a>
853                            </div>
854                            
855                        </div>
856                    </div>
857                    
858                </div>
859            </div>
860            
861            
862        </div>
863    </div>
864    
865
866    <!-- Middle Section: Newsletter, Logo, Links -->
867    <div class="footer-top-section container mt-5">
868        <div class="row align-items-start mb-3 mb-md-5">
869            <!-- Newsletter Form and Logo -->
870            <div class="col-12 newsletter-column mt-3">
871                <div class="row justify-content-between">
872                    <!-- Newsletter and Logo - Always Visible -->
873                    
874                    <div class="col-md-4 mb-4 ms-4 ms-md-0">
875                        <h4 class="mb-3 mb-md-5 fs-24 fw-semibold">Subscribe to our newsletter</h4>
876                        <form class="d-flex mt-2 footer-email-form mb-4" role="form">
877                            <input type="email" class="form-control footer-email-input p-0" placeholder="Email address">
878                            <button type="submit"
879                                class="btn btn-primary footer-email-button rounded-top-3 ">&gt;</button>
880                        </form>
881                        <!-- Logo placed below subscribe field -->
882                        <div class="footer-logo-img">
883                            <img src="/static/images/logo.png" alt="" width="248" height="62" style="height: 40px; width: auto;" loading="lazy" decoding="async">
884                        </div>
885                    </div>
886                    
887
888                    <!-- Mobile Accordion -->
889                    
890                    <div class="col-md-8 d-md-none">
891                        <div class="accordion" id="footerAccordion">
892                            
893                                
894                                <div class="accordion-item border-0 bg-primary rounded-3 mb-2">
895                                    <h2 class="accordion-header">
896                                        <button class="accordion-button collapsed bg-primary text-white rounded-3 py-2" 
897                                                type="button" 
898                                                data-bs-toggle="collapse" 
899                                                data-bs-target="#how-it-worksCollapse"
900                                                style="box-shadow: none;">
901                                            How It Works
902                                        </button>
903                                    </h2>
904                                    <div id="how-it-worksCollapse" class="accordion-collapse collapse" data-bs-parent="#footerAccordion">
905                                        <div class="accordion-body bg-white rounded-bottom-3">
906                                            <ul class="list-unstyled mb-0">
907                                                
908                                                <li class="border-bottom py-2"><a href="/homeowners" class="text-decoration-none text-dark d-block">For EV Owners</a></li>
909                                                
910                                                <li class="border-bottom py-2">
910<a href="/installers" class="text-decoration-none text-dark d-block">For Installers</a></li>
911                                                
912                                                <li class="border-bottom py-2"><a href="https://evquotes.ca/guides-category/category/car-guides/" class="text-decoration-none text-dark d-block">Car Guides</a></li>
913                                                
914                                                <li class="border-bottom py-2"><a href="https://evquotes.ca/guides-category/category/ev-charger-guides/" class="text-decoration-none text-dark d-block">EV Charger Guides</a></li>
915                                                
916                                            </ul>
917                                        </div>
918                                    </div>
919                                </div>
920                                
921                            
922                                
923                            
924                                
925                            
926                                
927                            
928                                
929                            
930                                
931                                <div class="accordion-item border-0 bg-primary rounded-3 mb-2">
932                                    <h2 class="accordion-header">
933                                        <button class="accordion-button collapsed bg-primary text-white rounded-3 py-2" 
934                                                type="button" 
935                                                data-bs-toggle="collapse" 
936                                                data-bs-target="#aboutCollapse"
937                                                style="box-shadow: none;">
938                                            About
939                                        </button>
940                                    </h2>
941                                    <div id="aboutCollapse" class="accordion-collapse collapse" data-bs-parent="#footerAccordion">
942                                        <div class="accordion-body bg-white rounded-bottom-3">
943                                            <ul class="list-unstyled mb-0">
944                                                
945                                                <li class="border-bottom py-2"><a href="/page/our-story/" class="text-decoration-none text-dark d-block">Our Story</a></li>
946                                                
947                                                <li class="border-bottom py-2"><a href="/page/careers/" class="text-decoration-none text-dark d-block">Careers</a></li>
948                                                
949                                            </ul>
950                                        </div>
951                                    </div>
952                                </div>
953                                
954                            
955                                
956                            
957                                
958                            
959                                
960                                <div class="accordion-item border-0 bg-primary rounded-3 mb-2">
961                                    <h2 class="accordion-header">
962                                        <button class="accordion-button collapsed bg-primary text-white rounded-3 py-2" 
963                                                type="button" 
964                                                data-bs-toggle="collapse" 
965                                                data-bs-target="#helpCollapse"
966                                                style="box-shadow: none;">
967                                            Help
968                                        </button>
969                                    </h2>
970                                    <div id="helpCollapse" class="accordion-collapse collapse" data-bs-parent="#footerAccordion">
971                                        <div class="accordion-body bg-white rounded-bottom-3">
972                                            <ul class="list-unstyled mb-0">
973                                                
974                                                <li class="border-bottom py-2"><a href="/page/support-desk/" class="text-decoration-none text-dark d-block">Support Desk</a></li>
975                                                
976                                                <li class="border-bottom py-2"><a href="/page/contact-us/" class="text-decoration-none text-dark d-block">Contact Us</a></li>
977                                                
978                                            </ul>
979                                        </div>
980                                    </div>
981                                </div>
982                                
983                            
984                                
985                            
986                                
987                            
988                        </div>
989                    </div>
990                    
991
992                    <!-- Desktop Links from FooterNavigation (MPTT roots as columns) -->
993                    
994                    
995                        
996                        <div class="col-md-2 mb-4 d-none d-md-block">
997                            <h4 class="mb-3 mb-md-5 fs-24 fw-semibold">How It Works</h4>
998                            <ul class="list-unstyled d-flex flex-column gap-3">
999                                
1000                                <li><a href="/homeowners" class="text-decoration-none">For EV Owners</a></li>
1001                                
1002                                <li>
1002<a href="/installers" class="text-decoration-none">For Installers</a></li>
1003                                
1004                                <li><a href="https://evquotes.ca/guides-category/category/car-guides/" class="text-decoration-none">Car Guides</a></li>
1005                                
1006                                <li><a href="https://evquotes.ca/guides-category/category/ev-charger-guides/" class="text-decoration-none">EV Charger Guides</a></li>
1007                                
1008                            </ul>
1009                        </div>
1010                        
1011                    
1012                        
1013                    
1014                        
1015                    
1016                        
1017                    
1018                        
1019                    
1020                        
1021                        <div class="col-md-2 mb-4 d-none d-md-block">
1022                            <h4 class="mb-3 mb-md-5 fs-24 fw-semibold">About</h4>
1023                            <ul class="list-unstyled d-flex flex-column gap-3">
1024                                
1025                                <li><a href="/page/our-story/" class="text-decoration-none">Our Story</a></li>
1026                                
1027                                <li><a href="/page/careers/" class="text-decoration-none">Careers</a></li>
1028                                
1029                            </ul>
1030                        </div>
1031                        
1032                    
1033                        
1034                    
1035                        
1036                    
1037                        
1038                        <div class="col-md-2 mb-4 d-none d-md-block">
1039                            <h4 class="mb-3 mb-md-5 fs-24 fw-semibold">Help</h4>
1040                            <ul class="list-unstyled d-flex flex-column gap-3">
1041                                
1042                                <li><a href="/page/support-desk/" class="text-decoration-none">Support Desk</a></li>
1043                                
1044                                <li><a href="/page/contact-us/" class="text-decoration-none">Contact Us</a></li>
1045                                
1046                            </ul>
1047                        </div>
1048                        
1049                    
1050                        
1051                    
1052                        
1053                    
1054                    
1055                </div>
1056            </div>
1057        </div>
1058    </div>
1059
1060
1061    <!-- External JavaScript Reference -->
1062    
1062<script defer src="/static/js/footer-cities.js"></script>
1062
1063
1064    <!-- Bottom Section -->
1065    <div class="footer-bottom-section">
1066        <div class="container py-3 py-md-5">
1067            <div class="d-flex flex-column flex-md-row justify-content-between gap-3 align-items-center">
1068                <div class="small d-flex align-items-center gap-5">
1069                    
1070                        
1071                        <a href="/page/privacy-policy/" class="text-decoration-none  blue-footer-text-color fs-16">Privacy Policy</a>
1072                        
1073                    
1074                        
1075                        <a href="/page/terms-conditions/" class="text-decoration-none  blue-footer-text-color fs-16">General Use Terms</a>
1076                        
1077                    
1078                        
1079                        <a href="/page/installer-terms-conditions/" class="text-decoration-none  blue-footer-text-color fs-16">Installer Terms &amp; Conditions</a>
1080                        
1081                    
1082                        
1083                        <a href="/page/copyright/" class="text-decoration-none  blue-footer-text-color fs-16">© 2026 EV Quotes. All Rights Reserved.</a>
1084                        
1085                    
1086                </div>
1087                <div class="mt-3 mt-md-0 d-flex align-items-center gap-3">
1088                    <a href="#" class="blue-footer-text-color"><i class="bi bi-facebook"></i></a>
1089                    <a href="#" class="blue-footer-text-color"><i class="bi bi-instagram"></i></a>
1090                </div>
1091            </div>
1092        </div>
1093    </div>
1094
1095    
1096
1097</footer>
1098
1099
1100    
1100<script>
1101        window.addEventListener('load', function() {
1102            if (
1103                !document.querySelector('.mySwiper') &&
1104                !document.querySelector('.testimonialSwiper') &&
1105                !document.querySelector('.myBlogSlider') &&
1106                !document.querySelector('.freeChargerReviewSwiper') &&
1107                !document.querySelector('.project-section-swiper')
1108            ) {
1109                return;
1110            }
1111
1112            var script = document.createElement('script');
1113            script.src = 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js';
1114            script.onload = function() {
1115                if (document.querySelector('.mySwiper')) {
1116                    new Swiper(".mySwiper", {
1117                        slidesPerView: 1,
1118                        spaceBetween: 40,
1119                        pagination: {
1120                            el: ".swiper-pagination",
1121                            clickable: true,
1122                            dynamicMainBullets: 1,
1123                        },
1124                        breakpoints: {
1125                            768: {
1126                                slidesPerView: 1,
1127                                spaceBetween: 50,
1128                            },
1129                            1024: {
1130                                slidesPerView: 4,
1131                                spaceBetween: 30,
1132                            },
1133                            1400: {
1134                                slidesPerView: 4,
1135                                spaceBetween: 40,
1136                            },
1137                        },
1138                        autoplay: {
1139                            delay: 5000,
1140                            disableOnInteraction: false,
1141                            pauseOnMouseEnter: true,
1142                        },
1143                        loop: true,
1144                        grabCursor: true,
1145                    });
1146                }
1147
1148                if (document.querySelector('.testimonialSwiper')) {
1149                    new Swiper(".testimonialSwiper", {
1150                        slidesPerView: 1,
1151                        spaceBetween: 0,
1152                        pagination: {
1153                            el: ".testimonial-mobile-pagination",
1154                            clickable: true,
1155                            dynamicMainBullets: 1,
1156                        },
1157                        breakpoints: {
1158                            768: {
1159                                slidesPerView: 1,
1160                                spaceBetween: 0,
1161                            },
1162                            1024: {
1163                                slidesPerView: 4,
1164                                spaceBetween: 30,
1165                            },
1166                            1400: {
1167                                slidesPerView: 4,
1168                                spaceBetween: 40,
1169                            },
1170                        },
1171                        autoplay: {
1172                            delay: 5000,
1173                            disableOnInteraction: false,
1174                            pauseOnMouseEnter: true,
1175                        },
1176                        loop: true,
1177                        grabCursor: true,
1178                    });
1179                }
1180
1181                if (document.querySelector('.myBlogSlider')) {
1182                    new Swiper(".myBlogSlider", {
1183                        slidesPerView: 1,
1184                        spaceBetween: 30,
1185                        pagination: {
1186                            el: ".swiper-pagination",
1187                            clickable: true,
1188                            dynamicMainBullets: 1,
1189                        },
1190                        breakpoints: {
1191                            768: {
1192                                slidesPerView: 2,
1193                                spaceBetween: 25,
1194                            },
1195                            1024: {
1196                                slidesPerView: 3,
1197                                spaceBetween: 30,
1198                            },
1199                            1200: {
1200                                slidesPerView: 3,
1201                                spaceBetween: 35,
1202                            },
1203                            1400: {
1204                                slidesPerView: 4,
1205                                spaceBetween: 40,
1206                            },
1207                        },
1208                        autoplay: {
1209                            delay: 5000,
1210                            disableOnInteraction: false,
1211                            pauseOnMouseEnter: true,
1212                        },
1213                        loop: true,
1214                        grabCursor: true,
1215                    });
1216                }
1217
1218                var freeChargerReviewSwiper = document.querySelector('.freeChargerReviewSwiper');
1219                if (freeChargerReviewSwiper) {
1220                    var freeChargerReviewSlides = freeChargerReviewSwiper.querySelectorAll('.swiper-slide').length;
1221                    new Swiper(".freeChargerReviewSwiper", {
1222                        slidesPerView: 1,
1223                        spaceBetween: 16,
1224                        breakpoints: {
1225                            768: {
1226                                slidesPerView: 2,
1227                                spaceBetween: 20,
1228                            },
1229                            1024: {
1230                                slidesPerView: 3,
1231                                spaceBetween: 24,
1232                            },
1233                        },
1234                        autoplay: freeChargerReviewSlides > 3 ? {
1235                            delay: 5000,
1236                            disableOnInteraction: false,
1237                            pauseOnMouseEnter: true,
1238                        } : false,
1239                        loop: freeChargerReviewSlides > 3,
1240                        grabCursor: true,
1241                    });
1242                }
1243
1244                if (document.querySelector('.project-section-swiper')) {
1245                    new Swiper(".project-section-swiper", {
1246                        slidesPerView: 1,
1247                        spaceBetween: 30,
1248                        pagination: {
1249                            el: ".swiper-pagination-sm",
1250                            clickable: true,
1251                            dynamicMainBullets: 1,
1252                        },
1253                        breakpoints: {
1254                            768: {
1255                                slidesPerView: 2,
1256                                spaceBetween: 25,
1257                            },
1258                            1024: {
1259                                slidesPerView: 3,
1260                                spaceBetween: 30,
1261                            },
1262                        },
1263                    });
1264                }
1265            };
1266            document.body.appendChild(script);
1267        });
1268    </script>
1268
1269
1270    <!-- Bootstrap JS Bundle -->
1271    
1271<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
1271
1272    <!-- Toaster Notification System - Reusable Component -->
1273<!-- Include this in any template where you want toaster notifications -->
1274
1275<!-- Toast Container -->
1276<div id="toast-container" class="toast-container"></div>
1277
1278<!-- Toaster Styles -->
1279<style>
1280    /* Toaster Notification Styles */
1281    .toast-container {
1282        position: fixed;
1283        top: 20px;
1284        right: 20px;
1285        z-index: 1000;
1286        max-width: 400px;
1287        pointer-events: none;
1288    }
1289
1290    .toast {
1291        display: flex;
1292        align-items: center;
1293        gap: 12px;
1294        margin-bottom: 12px;
1295        padding: 16px;
1296        border-radius: 8px;
1297        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1298        font-weight: 500;
1299        pointer-events: auto;
1300        transform: translateX(100%);
1301        opacity: 0;
1302        transition: all 0.3s ease;
1303        max-width: 100%;
1304        word-wrap: break-word;
1305    }
1306
1307    .toast.show {
1308        transform: translateX(0);
1309        opacity: 1;
1310    }
1311
1312    .toast.success {
1313        background-color: #10b981;
1314        color: white;
1315        border-left: 4px solid #059669;
1316    }
1317
1318    .toast.error {
1319        background-color: #ef4444;
1320        color: white;
1321        border-left: 4px solid #dc2626;
1322    }
1323
1324    .toast.warning {
1325        background-color: #f59e0b;
1326        color: white;
1327        border-left: 4px solid #d97706;
1328    }
1329
1330    .toast.info {
1331        background-color: #3b82f6;
1332        color: white;
1333        border-left: 4px solid #2563eb;
1334    }
1335
1336    .toast-icon {
1337        flex-shrink: 0;
1338        width: 20px;
1339        height: 20px;
1340    }
1341
1342    .toast-content {
1343        flex: 1;
1344        font-size: 14px;
1345        line-height: 1.4;
1346    }
1347
1348    .toast-close {
1349        background: none;
1350        border: none;
1351        color: inherit;
1352        cursor: pointer;
1353        padding: 0;
1354        width: 20px;
1355        height: 20px;
1356        display: flex;
1357        align-items: center;
1358        justify-content: center;
1359        border-radius: 4px;
1360        transition: background-color 0.2s ease;
1361        flex-shrink: 0;
1362    }
1363
1364    .toast-close:hover {
1365        background-color: rgba(255, 255, 255, 0.2);
1366    }
1367
1368    @media (max-width: 640px) {
1369        .toast-container {
1370            top: 10px;
1371            right: 10px;
1372            left: 10px;
1373            max-width: none;
1374        }
1375    }
1376</style>
1377
1378<!-- Toaster JavaScript -->
1379<script>
1380    // Toaster Notification System
1381    class ToastManager {
1382        constructor() {
1383            this.container = document.getElementById('toast-container');
1384            this.toasts = [];
1385        }
1386
1387        show(message, type = 'info', duration = 5000) {
1388            const toast = this.createToast(message, type);
1389            this.container.appendChild(toast);
1390            this.toasts.push(toast);
1391
1392            // Trigger animation
1393            setTimeout(() => {
1394                toast.classList.add('show');
1395            }, 10);
1396
1397            // Auto remove
1398            setTimeout(() => {
1399                this.remove(toast);
1400            }, duration);
1401
1402            return toast;
1403        }
1404
1405        createToast(message, type) {
1406            const toast = document.createElement('div');
1407            toast.className = `toast ${type}`;
1408
1409            const icon = this.getIcon(type);
1410            
1411            toast.innerHTML = `
1412                <div class="toast-icon">${icon}</div>
1413                <div class="toast-content">${message}</div>
1414                <button class="toast-close" onclick="window.toastManager.remove(this.parentElement)">
1415                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1416                        <line x1="18" y1="6" x2="6" y2="18"></line>
1417                        <line x1="6" y1="6" x2="18" y2="18"></line>
1418                    </svg>
1419                </button>
1420            `;
1421
1422            return toast;
1423        }
1424
1425        getIcon(type) {
1426            const icons = {
1427                success: `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1428                    <polyline points="20,6 9,17 4,12"></polyline>
1429                </svg>`,
1430                error: `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1431                    <circle cx="12" cy="12" r="10"></circle>
1432                    <line x1="15" y1="9" x2="9" y2="15"></line>
1433                    <line x1="9" y1="9" x2="15" y2="15"></line>
1434                </svg>`,
1435                warning: `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1436                    <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path>
1437                    <line x1="12" y1="9" x2="12" y2="13"></line>
1438                    <line x1="12" y1="17" x2="12.01" y2="17"></line>
1439                </svg>`,
1440                info: `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1441                    <circle cx="12" cy="12" r="10"></circle>
1442                    <line x1="12" y1="16" x2="12" y2="12"></line>
1443                    <line x1="12" y1="8" x2="12.01" y2="8"></line>
1444                </svg>`
1445            };
1446            return icons[type] || icons.info;
1447        }
1448
1449        remove(toast) {
1450            if (!toast || !toast.parentElement) return;
1451
1452            toast.classList.remove('show');
1453            
1454            setTimeout(() => {
1455                if (toast.parentElement) {
1456                    toast.parentElement.removeChild(toast);
1457                }
1458                this.toasts = this.toasts.filter(t => t !== toast);
1459            }, 300);
1460        }
1461
1462        success(message, duration = 5000) {
1463            return this.show(message, 'success', duration);
1464        }
1465
1466        error(message, duration = 7000) {
1467            return this.show(message, 'error', duration);
1468        }
1469
1470        warning(message, duration = 6000) {
1471            return this.show(message, 'warning', duration);
1472        }
1473
1474        info(message, duration = 5000) {
1475            return this.show(message, 'info', duration);
1476        }
1477    }
1478
1479    // Initialize toast manager globally
1480    if (typeof window.toastManager === 'undefined') {
1481        window.toastManager = new ToastManager();
1482    }
1483
1484    // Global helper functions
1485    window.showSuccessToast = function(message, duration) {
1486        return window.toastManager.success(message, duration);
1487    };
1488
1489    window.showErrorToast = function(message, duration) {
1490        return window.toastManager.error(message, duration);
1491    };
1492
1493    window.showWarningToast = function(message, duration) {
1494        return window.toastManager.warning(message, duration);
1495    };
1496
1497    window.showInfoToast = function(message, duration) {
1498        return window.toastManager.info(message, duration);
1499    };
1500</script>
1500 
1501    <!-- Include Django Messages Integration -->
1502    <!-- Django Messages to Toaster Integration -->
1503<!-- Include this AFTER including toaster.html to automatically show Django messages as toasts -->
1504
1505 
1506
1507    <!-- PWA Registration - Service worker and install button available across entire app -->
1508    <!-- Push subscriptions only enabled in dashboard pages (installer_base.html, homeowner_base.html) -->
1509    
1510
1511    
1512    <template id="delayed-header-scripts">
1513        
1513<script type="text/javascript">
1514    (function(c,l,a,r,i,t,y){
1515        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
1516        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
1517        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
1518    })(window, document, "clarity", "script", "vm6y569o5p");
1519</script>
1519
1520
1521<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 1521-1522
1521
1522<script async src="https://www.googletagmanager.com/gtag/js?id=
1522AW-10996390203
vendor: 13 bytes, line 1522
1522"></script>
1523<script>
1524  
vendor: 138 bytes, lines 1524-1528
1524window.dataLayer = window.dataLayer || [];
1525  function gtag(){dataLayer.push(arguments);}
1526  gtag('js', new Date());
1527
1528  gtag('config', '
1528AW-10996390203
vendor: 5 bytes, line 1528
1528');
1529</script>
1529
1530
1531<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 1531-1532
1531
1532<script async src="https://www.googletagmanager.com/gtag/js?id=
1532G-2ZKMMGQKY8
vendor: 13 bytes, line 1532
1532"></script>
1533<script>
1534  
vendor: 138 bytes, lines 1534-1538
1534window.dataLayer = window.dataLayer || [];
1535  function gtag(){dataLayer.push(arguments);}
1536  gtag('js', new Date());
1537
1538  gtag('config', '
1538G-2ZKMMGQKY8
vendor: 5 bytes, line 1538
1538');
1539</script>
1539
1540
1541<!-- Affiliatable Base Code --> 
1541<script src="https://cdn.affiliatable.io/5670e55e4d3459091885818c74beba82.js" async></script>
1541 <!-- /Affiliatable Base Code -->
1542
1543
1544<!-- Meta Pixel Code -->
1545<script>
vendor: 408 bytes, lines 1545-1554
1545
1546!function(f,b,e,v,n,t,s)
1547{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
1548n.callMethod.apply(n,arguments):n.queue.push(arguments)};
1549if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
1550n.queue=[];t=b.createElement(e);t.async=!0;
1551t.src=v;s=b.getElementsByTagName(e)[0];
1552s.parentNode.insertBefore(t,s)}(window, document,'script',
1553'https://connect.facebook.net/en_US/fbevents.js');
1554fbq('init', '
1554379186429790656
vendor: 32 bytes, lines 1554-1555
1554');
1555fbq('track', 'PageView');
1556</script>
1556
1557<noscript><img height="1" width="1" style="display:none"
1558src="https://www.facebook.com/tr?id=1746627840101898&ev=PageView&noscript=1"
1559/></noscript>
1560<!-- End Meta Pixel Code -->
1561    </template>
1562    
1562<script>
1563        window.addEventListener('load', function() {
1564            function loadDelayedHeaderScripts() {
1565                var template = document.getElementById('delayed-header-scripts');
1566                if (!template || window.__delayedHeaderScriptsLoaded) return;
1567                window.__delayedHeaderScriptsLoaded = true;
1568
1569                Array.prototype.forEach.call(template.content.childNodes, function(node) {
1570                    if (node.tagName && node.tagName.toLowerCase() === 'script') {
1571                        var script = document.createElement('script');
1572                        Array.prototype.forEach.call(node.attributes, function(attr) {
1573                            script.setAttribute(attr.name, attr.value);
1574                        });
1575                        script.text = node.textContent;
1576                        document.body.appendChild(script);
1577                        return;
1578                    }
1579
1580                    document.body.appendChild(node.cloneNode(true));
1581                });
1582            }
1583
1584            setTimeout(loadDelayedHeaderScripts, 2500);
1585        });
1586    </script>
1586
1587    
1588
1589    
1590    
1591</body>
1592
1593</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.