<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="shortcut icon" href="/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="manifest" href="/site.webmanifest"><meta name="generator" content="Astro v6.0.8"><meta name="description" content="The page you're looking for can't be found. Browse our services or return to the homepage."><meta property="og:title" content="Page Not Found | Excel Carpet Cleaning"><meta property="og:description" content="The page you're looking for can't be found. Browse our services or return to the homepage."><meta property="og:type" content="website"><title>Page Not Found | Excel Carpet Cleaning</title><!-- Hotjar --><script>
            ;(function (h, o, t, j, a, r) {
                h.hj =
                    h.hj ||
                    function () {
                        ;(h.hj.q = h.hj.q || []).push(arguments)
                    }
                h._hjSettings = { hjid: 3003356, hjsv: 6 }
                a = o.getElementsByTagName('head')[0]
                r = o.createElement('script')
                r.async = 1
                r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv
                a.appendChild(r)
            })(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv=')
        </script><!-- Google Tag Manager (North + South) --><script async src="https://www.googletagmanager.com/gtag/js?id=G-C1GTF934PM"></script><script async src="https://www.googletagmanager.com/gtag/js?id=AW-17422343613"></script><script>
            window.dataLayer = window.dataLayer || []
            function gtag() {
                dataLayer.push(arguments)
            }
            gtag('js', new Date())
            // North
            gtag('config', 'G-C1GTF934PM')
            // South
            gtag('config', 'AW-17422343613')
        </script><!-- Facebook Pixel --><script>
            !(function (f, b, e, v, n, t, s) {
                if (f.fbq) return
                n = f.fbq = function () {
                    n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments)
                }
                if (!f._fbq) f._fbq = n
                n.push = n
                n.loaded = !0
                n.version = '2.0'
                n.queue = []
                t = b.createElement(e)
                t.async = !0
                t.src = v
                s = b.getElementsByTagName(e)[0]
                s.parentNode.insertBefore(t, s)
            })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js')

            fbq('init', '935349417736507')
            fbq('track', 'PageView')
        </script><noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=935349417736507&ev=PageView&noscript=1"></noscript><link rel="stylesheet" href="/_astro/Layout.Bhn5g8f_.css"></head> <body class="bg-white"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="2299T" prefix="r2" component-url="/_astro/ToastBridge.DLd3h_A8.js" component-export="default" renderer-url="/_astro/client.qUSPoiCY.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;ToastBridge&quot;,&quot;value&quot;:true}" await-children><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><!--astro:end--></astro-island> <div class="bg-black text-white w-full p-2 flex gap-2 justify-center items-center text-xs font-bold"> <p>Schedule Online 24/7</p> <div class="hidden md:block w-1 h-1 rounded-full bg-white"></div> <p class="hidden md:block">excelcarpetcleaning@gmail.com</p> <div class="hidden md:block w-1 h-1 rounded-full bg-white"></div> <p class="hidden md:block">North: (425) 394-0404</p> <div class="hidden md:block w-1 h-1 rounded-full bg-white"></div> <p class="hidden md:block">South: (253) 234-7071</p> </div> <astro-island uid="Z1XjwvY" prefix="r3" component-url="/_astro/TopNav.D8w5YTzp.js" component-export="default" renderer-url="/_astro/client.qUSPoiCY.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;TopNav&quot;,&quot;value&quot;:true}" await-children><link rel="preload" as="image" href="/logo-long-crop.png"/><link rel="preload" as="image" href="/logo-small-crop.png"/><header class="py-1 px-4 lg:px-8 bg-white shadow-md sticky top-0 z-50"><nav class="w-full max-w-350 mx-auto lg:grid flex justify-between lg:grid-cols-[216px_1fr_216px] gap-4 items-center h-14 lg:h-18"><button class="lg:hidden w-fit block" title="Toggle navigation menu"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="text-4xl cursor-pointer" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M32 96v64h448V96H32zm0 128v64h448v-64H32zm0 128v64h448v-64H32z"></path></svg></button><a href="/" title="Excel Carpet Cleaning Homepage" class="hover:scale-105"><img src="/logo-long-crop.png" alt="Excel Carpet Cleaning logo" class="h-16 hidden lg:block" height="64" width="auto" loading="eager"/><img src="/logo-small-crop.png" alt="Excel Carpet Cleaning small logo" class="h-12 lg:hidden" height="48" width="auto" loading="eager"/></a><ul class="transition-transform duration-500 shadow-lg lg:shadow-none lg:bg-transparent absolute lg:static left-0 top-full w-screen max-w-75 p-4 lg:p-0 lg:max-w-none lg:w-auto h-[calc(100dvh-64px)] lg:h-fit -translate-x-full lg:translate-x-0 bg-white flex-col lg:flex-row flex lg:justify-center lg:items-center gap-8 text-sm font-medium"><li><div class="relative group flex flex-col lg:flex-row"><div class="flex gap-2"><span class="font-bold uppercase tracking-wider cursor-default">Services</span><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 320 512" class="mt-0.5 rotate-0 transition-all duration-300 lg:hidden" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"></path></svg></div><div class="overflow-hidden max-h-0 transition-max-height duration-500 lg:transition-none"><ul class="lg:absolute z-10 left-0 top-full p-4 pb-0 lg:pb-4 rounded-lg bg-white shadow-lg lg:opacity-0 group-hover:opacity-100 transition-opacity lg:pointer-events-none group-hover:pointer-events-auto flex flex-col gap-4"><li><a href="/services/carpet-cleaning" class="flex gap-2 items-center lg:p-2 hover:bg-gray-100 font-bold uppercase tracking-wider whitespace-nowrap"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-gray-600" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="m11.99 18.54-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27-7.38 5.74zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16z"></path></svg><span>Carpet Cleaning</span></a></li><li><a href="/services/upholstery-cleaning" class="flex gap-2 items-center lg:p-2 hover:bg-gray-100 font-bold uppercase tracking-wider whitespace-nowrap"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-gray-600" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0V0z"></path><path d="M7 11v2h10v-2c0-1.86 1.28-3.41 3-3.86V6c0-1.65-1.35-3-3-3H7C5.35 3 4 4.35 4 6v1.14c1.72.45 3 2 3 3.86z"></path><path d="M21 9c-1.1 0-2 .9-2 2v4H5v-4c0-1.1-.9-2-2-2s-2 .9-2 2v5c0 1.65 1.35 3 3 3v1c0 .55.45 1 1 1s1-.45 1-1v-1h12v1c0 .55.45 1 1 1s1-.45 1-1v-1c1.65 0 3-1.35 3-3v-5c0-1.1-.9-2-2-2z"></path></svg><span>Upholstery Cleaning</span></a></li><li><a href="/services/area-rug-cleaning" class="flex gap-2 items-center lg:p-2 hover:bg-gray-100 font-bold uppercase tracking-wider whitespace-nowrap"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" class="text-gray-600" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M24 64l32 0 24 0 0 24 0 88 0 80 0 80 0 88 0 24-24 0-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0C10.7 112 0 101.3 0 88S10.7 64 24 64zm88 0l416 0 0 384-416 0 0-384zM640 88c0 13.3-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0-24 0 0-24 0-88 0-80 0-80 0-88 0-24 24 0 32 0c13.3 0 24 10.7 24 24z"></path></svg><span>Area Rug Cleaning</span></a></li><li><a href="/services/hard-surface-cleaning" class="flex gap-2 items-center lg:p-2 hover:bg-gray-100 font-bold uppercase tracking-wider whitespace-nowrap"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="text-gray-600" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M37.08 29c-8.55 0-15.284 6.734-15.284 15.284S28.53 59.57 37.08 59.57s15.285-6.735 15.285-15.285S45.63 29 37.08 29zm31.745 26.3C64.226 68.41 51.69 77.91 37.08 77.91c-5.008 0-9.77-1.123-14.056-3.119l37.413 49.886 19.324-8.453zm16.708 78.418l-16.435 7.19 111.193 283.177 16.108-8.056zm213.04 198.173v14.265h79.479v-14.265zm0 32.607v46.872h79.479v-46.872zm-149.69 32.606l-4.56 11.398a58.622 58.622 0 0 1 15.041 12.014l-8.78-23.412zm60.01 0l5.35 14.266h65.99v-14.266zm-92.713 22.417a39.601 39.601 0 0 0-39.74 39.74A39.601 39.601 0 0 0 116.18 499a39.601 39.601 0 0 0 39.74-39.74 39.601 39.601 0 0 0-39.74-39.739zm100.877 10.19v30.569h242.512v-30.57zm-18.342 5.668l-25.537 12.77a57.869 57.869 0 0 1 1.083 11.112c0 .341-.02.678-.026 1.019h24.48v-24.901zm14.84 43.242l-7.134 14.265h263.783l-7.133-14.265z"></path></svg><span>Hard Surface Cleaning</span></a></li><li><a href="/services/air-duct-cleaning" class="flex gap-2 items-center lg:p-2 hover:bg-gray-100 font-bold uppercase tracking-wider whitespace-nowrap"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-gray-600" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M13 5.5C13 3.57 11.43 2 9.5 2 7.466 2 6.25 3.525 6.25 5h2c0-.415.388-1 1.25-1 .827 0 1.5.673 1.5 1.5S10.327 7 9.5 7H2v2h7.5C11.43 9 13 7.43 13 5.5zm2.5 9.5H8v2h7.5c.827 0 1.5.673 1.5 1.5s-.673 1.5-1.5 1.5c-.862 0-1.25-.585-1.25-1h-2c0 1.475 1.216 3 3.25 3 1.93 0 3.5-1.57 3.5-3.5S17.43 15 15.5 15z"></path><path d="M18 5c-2.206 0-4 1.794-4 4h2c0-1.103.897-2 2-2s2 .897 2 2-.897 2-2 2H2v2h16c2.206 0 4-1.794 4-4s-1.794-4-4-4zM2 15h4v2H2z"></path></svg><span>Air Duct Cleaning</span></a></li><li><a href="/services/commercial-cleaning" class="flex gap-2 items-center lg:p-2 hover:bg-gray-100 font-bold uppercase tracking-wider whitespace-nowrap"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" class="text-gray-600" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z"></path></svg><span>Commercial Cleaning</span></a></li></ul></div></div></li><li><a href="/estimator" class="font-bold uppercase tracking-wider hover:scale-105 block">Estimator</a></li><li><a href="/about" class="font-bold uppercase tracking-wider whitespace-nowrap hover:scale-105 block">About Us</a></li><li><a href="/faq" class="font-bold uppercase tracking-wider hover:scale-105 block">FAQ</a></li><li><a href="/gallery" class="font-bold uppercase tracking-wider hover:scale-105 block">Gallery</a></li><li><a href="/contact" class="font-bold uppercase tracking-wider hover:scale-105 block">Contact</a></li><li><a class="block px-4 py-2 bg-yellow font-black shadow-md uppercase rounded-full border-3 border-black hover:scale-105 lg:hidden w-fit" href="/scheduling">Book Appointment</a></li></ul><a class="block px-4 py-2 bg-yellow font-black shadow-md uppercase rounded-full border-3 border-black hover:scale-105 hidden lg:block" href="/scheduling">Book Appointment</a><div class="relative lg:hidden"><button class="lg:hidden w-fit p-1.5 cursor-pointer" title="Show phone numbers"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="text-2xl" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"></path></svg></button></div></nav></header><!--astro:end--></astro-island> <main>  <section class="bg-black text-white py-16"> <div class="container mx-auto px-4 text-center"> <h1 class="text-4xl md:text-5xl font-bold uppercase">404 - Page Not Found</h1> <p class="text-xl mt-4">Sorry, the page you're looking for doesn't exist.</p> <a href="/" class="inline-block mt-6 rounded-full bg-gold px-6 py-3 text-[11px] font-bold tracking-[0.16em] uppercase text-black transition hover:bg-[#f1d15a]">
Return Home
</a> </div> </section>  </main> <section class="bg-white px-4 pb-8 pt-18 sm:pb-10 overflow-hidden"> <div class="mx-auto grid max-w-350 gap-4 lg:gap-8 lg:grid-cols-2 lg:items-start"> <div class="js-pop-in" data-delay="200"> <p class="text-xs font-semibold tracking-[0.24em] text-gold uppercase">Have A Question?</p> <h2 class="mt-2 lg:mt-4 text-xl font-black uppercase lg:text-4xl">We have answers.</h2> <p class="mt-2 lg:mt-4 max-w-lg text-base leading-8 text-black/70">
Reach out for pricing, availability, service area details, or same-day scheduling. We&apos;ll follow up
                quickly.
</p> </div> <form data-x-start="32px" data-delay="200" class="js-pop-in grid gap-4 rounded-2xl bg-faint-gold p-4 lg:p-8 shadow-[0_22px_60px_rgba(0,0,0,0.08)] lg:grid-cols-2" id="question-block-contact-form"> <label for="question-email" class="sr-only">Email Address</label> <input id="question-email" type="email" name="email" placeholder="Email Address" class="min-h-13 rounded-full border border-black/10 px-5 text-sm outline-none md:col-span-1"> <label for="question-phone" class="sr-only">Phone Number</label> <input id="question-phone" type="tel" name="phone" placeholder="Phone Number" class="min-h-13 rounded-full border border-black/10 px-5 text-sm outline-none md:col-span-1"> <label for="question-first-name" class="sr-only">First Name</label> <input id="question-first-name" type="text" name="first_name" placeholder="Name" class="min-h-13 rounded-full border border-black/10 px-5 text-sm outline-none md:col-span-2"> <label for="question-last-name" class="hidden">Last Name</label> <input id="question-last-name" type="text" name="last_name" class="hidden"> <label for="question-message" class="sr-only">Message</label> <textarea id="question-message" name="message" placeholder="Message" rows="5" class="rounded-3xl border border-black/10 px-5 py-4 text-sm outline-none lg:col-span-2"></textarea> <div class="lg:col-span-2 flex flex-col lg:flex-row items-center lg:justify-between"> <button class="rounded-full bg-black px-8 py-4 text-[12px] font-bold tracking-[0.16em] uppercase text-white transition hover:bg-black/85">Submit</button> <a href="/contact" class="mt-4 inline-block text-[12px] font-bold tracking-[0.16em] uppercase text-black lg:mt-0">View Contact Page</a> </div> </form> </div> </section> <script type="module">const e=document.querySelector("#question-block-contact-form");e.addEventListener("submit",async s=>{s.preventDefault();const a=e.elements.namedItem("email").value,n=e.elements.namedItem("phone").value,o=e.elements.namedItem("first_name").value,r=e.elements.namedItem("last_name").value,m=e.elements.namedItem("message").value;if(r){await new Promise(t=>setTimeout(t,1e3)),window.toast.success("Message sent successfully!"),e.reset();return}try{await fetch("https://api.excelcarpetcleaningwa.com/public/contact",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:a,phone:n,name:o,message:m})}).then(t=>{t.ok?(window.toast.success("Message sent successfully!"),e.reset()):window.toast.error("Failed to send message. Please try again later.")})}catch{window.toast.error("There was an error sending your message. Please try again later.");return}});</script> <section class="border-b border-black/10 px-4 py-8 lg:px-8 lg:py-16 overflow-hidden"> <div class="mx-auto grid max-w-350 gap-4 lg:gap-8 lg:grid-cols-2 lg:items-start"> <div class="js-pop-in" data-delay="200"> <p class="mb-2 lg:mb-4 text-xs font-semibold tracking-[0.24em] text-gold uppercase">Stay Up To Date</p> <h2 class="mb-2 lg:mb-4 text-xl font-black uppercase lg:text-4xl">
Get cleaning tips, alerts and coupons to save big!
</h2> <p class="max-w-2xl text-base leading-8 text-black/65">
Simply enter your information below to receive occasional emails with promotional offers for future
                cleanings.
</p> </div> <form data-delay="200" data-x-start="32px" class="js-pop-in grid gap-3 rounded-[28px] bg-white p-5 text-black shadow-[0_18px_45px_rgba(0,0,0,0.25)] sm:grid-cols-[1fr_180px_auto]" id="newsletter-form"> <label for="newsletter-email" class="sr-only">Email Address</label> <input id="newsletter-email" type="email" name="email" placeholder="Email Address" class="min-h-12 rounded-full border border-black/10 px-5 text-sm outline-none"> <label for="newsletter-name" class="hidden">Name</label> <input id="newsletter-name" type="text" name="name" placeholder="Name" class="hidden"> <label for="newsletter-zip" class="sr-only">Zip Code</label> <input id="newsletter-zip" type="text" name="zip" placeholder="Zip Code" class="min-h-12 rounded-full border border-black/10 px-5 text-sm outline-none"> <button class="cursor-pointer min-h-12 rounded-full bg-gold px-6 text-[12px] font-bold tracking-[0.14em] uppercase text-white transition hover:bg-dark-gold">Join</button> </form> </div> </section> <script type="module">const e=document.querySelector("#newsletter-form");e.addEventListener("submit",async n=>{n.preventDefault();const s=e.elements.namedItem("email").value,a=e.elements.namedItem("name").value,r=e.elements.namedItem("zip").value;if(a){await new Promise(t=>setTimeout(t,1e3)),window.toast.success("Successfully joined the newsletter!"),e.reset();return}try{await fetch("https://api.excelcarpetcleaningwa.com/public/newsletter",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:s,zip:r})}).then(t=>{t.ok?(window.toast.success("Successfully joined the newsletter!"),e.reset()):window.toast.error("Failed to join the newsletter. Please try again later.")})}catch{window.toast.error("There was an error joining the newsletter. Please try again later.");return}});</script> <footer class="bg-white text-black"> <div class="mx-auto grid max-w-350 gap-10 px-4 py-12 lg:grid-cols-[1.2fr_1fr_1fr_1fr]"> <!-- BRAND --> <div> <img src="/logo-long-crop.png" alt="excel carpet cleaning logo" loading="lazy" class="mb-2 h-12 max-w-full object-contain object-left"> <p class="text-sm text-black/65">
Excel Carpet Cleaning Services LLC.<br>Serving you since 1991.
</p> <p class="mt-2 text-sm text-black/65">excelcarpetcleaning@gmail.com</p> <p class="mt-2 text-sm text-black/65">N: (425) 394-0404</p> <p class="text-sm text-black/65">S: (253) 234-7071</p> <a href="https://www.facebook.com/excelcarpetcleaningincorporated/" target="_blank" rel="noopener" class="mt-5 inline-flex h-11 w-11 items-center justify-center rounded-full border border-black/15 hover:border-[#e2c247]"> <img loading="lazy" src="/facebook-white.webp" alt="facebook logo" class="h-5 w-5 object-contain brightness-0"> </a> </div> <!-- SERVICES (matches nav dropdown) --> <div> <h3 class="mb-4 text-[14px] font-bold tracking-[0.2em] text-gold uppercase">Services</h3> <ul class="space-y-3 text-sm"> <li><a href="/services/carpet-cleaning" class="text-black/65 hover:text-black">Carpet Cleaning</a></li> <li> <a href="/services/upholstery-cleaning" class="text-black/65 hover:text-black">Upholstery Cleaning</a> </li> <li> <a href="/services/area-rug-cleaning" class="text-black/65 hover:text-black">Area Rug Cleaning</a> </li> <li> <a href="/services/hard-surface-cleaning" class="text-black/65 hover:text-black">Hard Surface Cleaning</a> </li> <li> <a href="/services/air-duct-cleaning" class="text-black/65 hover:text-black">Air Duct Cleaning</a> </li> <li> <a href="/services/commercial-cleaning" class="text-black/65 hover:text-black">Commercial Services</a> </li> </ul> </div> <!-- COMPANY --> <div> <h3 class="mb-4 text-[14px] font-bold tracking-[0.2em] text-gold uppercase">Company</h3> <ul class="space-y-3 text-sm"> <li><a href="/about" class="text-black/65 hover:text-black">About Us</a></li> <li><a href="/faq" class="text-black/65 hover:text-black">FAQ</a></li> <li><a href="/gallery" class="text-black/65 hover:text-black">Gallery</a></li> <li><a href="/contact" class="text-black/65 hover:text-black">Contact</a></li> </ul> </div> <!-- ACTIONS / LEGAL --> <div> <h3 class="mb-4 text-[14px] font-bold tracking-[0.2em] text-gold uppercase">Get Started</h3> <ul class="space-y-3 text-sm"> <li> <a href="/scheduling" class="font-bold text-black hover:text-gold"> Book Appointment </a> </li> <li><a href="/estimator" class="text-black/65 hover:text-black">Estimator</a></li> <li><a href="/privacy" class="text-black/65 hover:text-black">Privacy Policy</a></li> </ul> </div> </div> <!-- BOTTOM BAR --> <div class="border-t border-black/10 px-4 py-5 text-center text-[11px] font-medium tracking-[0.16em] text-black/45 uppercase">
© 2026 Excel Carpet Cleaning
</div> </footer> </body> </html>  <script type="module">document.querySelectorAll(".js-pop-in").forEach(i=>{const t=i,r=t.dataset.xStart?parseInt(t.dataset.xStart):0,n=t.dataset.yStart?parseInt(t.dataset.yStart):0,s=t.dataset.delay?parseInt(t.dataset.delay):0,d=window.innerWidth<1024?0:t.dataset.initialDelay?parseInt(t.dataset.initialDelay):s,c=t.dataset.threshold?parseFloat(t.dataset.threshold):.1,y=t.dataset.once==="true";let l=!0,e=setTimeout(()=>{},0),a=!1;t.style.transform=`translate3d(${r}px, ${n}px, 0)`,t.style.opacity="0",t.style.willChange="transform, opacity";const o=new IntersectionObserver(p=>{p.forEach(u=>{if(u.isIntersecting){if(a)return;a=!0,clearTimeout(e),e=setTimeout(()=>{t.style.opacity="1",t.style.transform="translate3d(0,0,0)"},l?d:s),l=!1,y&&o.unobserve(t)}else{if(!a)return;a=!1,clearTimeout(e),e=setTimeout(()=>{t.style.opacity="0",t.style.transform=`translate3d(${r}px, ${n}px, 0)`},s+50)}})},{threshold:c,rootMargin:"-10% 0px -10% 0px"});o.observe(t)});</script>