<?php /** * Smart Blog Template - Renderer Class * Handles template rendering with placeholder replacement and ZIP form auto-placement */ if (!defined('ABSPATH')) { exit; } class SBT_Renderer { private $post; private $post_id; private $post_title; private $post_content; private $header_image_url; private $header_image_alt; // ZIP form placement: 1 form per 600 words private $words_per_zip_form = 600; public function __construct($post) { $this->post = $post; $this->post_id = $post->ID; $this->post_title = get_the_title($post_id); $this->post_content = apply_filters('the_content', $post->post_content); // Get featured image $this->header_image_url = get_the_post_thumbnail_url($post_id, 'full'); if (!$this->header_image_url) { $this->header_image_url = 'https://fixwaterca.site/wp-content/uploads/2026/02/water-damage-restoration-hero-298.webp'; } $this->header_image_alt = get_post_meta(get_post_thumbnail_id($post_id), '_wp_attachment_image_alt', true); if (!$this->header_image_alt) { $this->header_image_alt = $this->post_title; } } /** * Render the complete post HTML */ public function render() { // Get template $template = $this->get_template(); // Calculate ZIP form positions $content_with_zips = $this->insert_zip_forms($this->post_content); // Get navigation links $prev_post = get_previous_post(); $next_post = get_next_post(); $prev_link = $prev_post ? '<a class="nav-link" href="' . get_permalink($prev_post->ID) . '"><span class="nav-arrow">←</span> ' . get_the_title($prev_post->ID) . '</a>' : '<span class="nav-link" style="opacity:0.5">No previous post</span>'; $next_link = $next_post ? '<a class="nav-link" href="' . get_permalink($next_post->ID) . '">' . get_the_title($next_post->ID) . ' <span class="nav-arrow">→</span></a>' : '<span class="nav-link" style="opacity:0.5">No next post</span>'; // Generate ZIP form nonce $zip_form_nonce = wp_create_nonce('fixwater_zip_form_nonce'); // Replace placeholders $output = str_replace( [ '{{POST_TITLE}}', '{{HEADER_IMAGE_URL}}', '{{HEADER_IMAGE_ALT}}', '{{POST_CONTENT}}', '{{PREV_POST_LINK}}', '{{NEXT_POST_LINK}}', '{{ZIP_FORM_NONCE}}' ], [ esc_html($this->post_title), esc_url($this->header_image_url), esc_attr($this->header_image_alt), $content_with_zips, $prev_link, $next_link, $zip_form_nonce ], $template ); return $output; } /** * Get the embedded template HTML */ private function get_template() { $template_path = SBT_PLUGIN_DIR . 'includes/template.html'; if (file_exists($template_path)) { $template = file_get_contents($template_path); return file_get_contents($template_path); } // Fallback to default template return $this->get_default_template(); } /** * Insert ZIP forms at calculated positions * Rule: 1 ZIP form per 600 words */ private function insert_zip_forms($content) { // Count words (strip HTML tags for accurate count) $word_count = str_word_count(strip_tags($content)); // Calculate number of ZIP forms needed $zip_form_count = max(1, floor($word_count / $this->words_per_zip_form)); // If content is short, just add one form after first paragraph if ($zip_form_count === 1 && $word_count < 600) { return $this->insert_single_zip_form($content); } // For longer content, distribute forms evenly return $this->insert_multiple_zip_forms($content, $zip_form_count); } /** * Insert single ZIP form after first paragraph */ private function insert_single_zip_form($content) { // Find first </p> tag $first_paragraph_end = strpos($content, '</p>'); if ($first_paragraph_end !== false) { $insert_position = $first_paragraph_end + 4; // Length of '</p>' $zip_form = $this->get_zip_form_shortcode(); return substr($content, 0, $insert_position) . "\n\n" . $zip_form . "\n\n" . substr($content, $insert_position); } // Fallback: append at end return $content . "\n\n" . $this->get_zip_form_shortcode(); } /** * Insert multiple ZIP forms distributed throughout content */ private function insert_multiple_zip_forms($content, $count) { // Find all paragraph ends preg_match_all('/<\/p>/', $content, $matches, PREG_OFFSET_CAPTURE); $paragraph_ends = array_column($matches[0], 1); if (count($paragraph_ends) < $count) { // Not enough paragraphs, just insert after first and before last return $this->insert_single_zip_form($content); } // Calculate insertion points (evenly distributed) $insert_positions = []; $interval = floor(count($paragraph_ends) / ($count + 1)); for ($i = 1; $i <= $count; $i++) { $index = $i * $interval; if ($index < count($paragraph_ends)) { $insert_positions[] = $paragraph_ends[$index]; } } // Insert ZIP forms (reverse order to maintain positions) $zip_form = $this->get_zip_form_shortcode(); rsort($insert_positions); foreach ($insert_positions as $pos) { $content = substr($content, 0, $pos + 4) . "\n\n" . $zip_form . "\n\n" . substr($content, $pos + 4); } return $content; } /** * Get ZIP form shortcode HTML wrapped in template-matching div */ private function get_zip_form_shortcode() { return '<div class="zip-form-wrapper" id="zip-form-card">' . '<p style="text-align:center;margin-bottom:20px;color:#b0b0b0;font-size:15px;">Get connected with a licensed water damage restoration professional in your area</p>' . do_shortcode('[zip_form]') . '</div>'; } /** * Default template HTML (embedded fallback) */ private function get_default_template() { return <<<'HTML' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <title>{{POST_TITLE}} | FixWater CA</title> <style> @import url("https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&display=swap"); *{margin:0!important;padding:0!important;box-sizing:border-box!important} html,body{background:#0d0d0d!important;color:#e0e0e0!important;font-family:'Outfit',sans-serif!important;line-height:1.6!important} .navbar-dark{position:fixed!important;top:0!important;left:0!important;right:0!important;height:72px!important;background:rgba(13,13,13,0.92)!important;backdrop-filter:blur(12px)!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:0 48px!important;z-index:1000!important} .navbar-brand{display:flex!important;align-items:center!important;gap:14px!important;text-decoration:none!important} .navbar-brand a{color:#ffffff!important;text-decoration:none!important;border:none!important;outline:none!important;box-shadow:none!important} .navbar-brand a:hover,.navbar-brand a:active,.navbar-brand a:focus,.navbar-brand a:visited{color:#ffffff!important;text-decoration:none!important;border:none!important;outline:none!important;box-shadow:none!important} .navbar-brand img{width:42px!important;height:42px!important;border-radius:8px!important;border:none!important;outline:none!important} .brand-text{color:#ffffff!important;font-size:19px!important;font-weight:600!important;letter-spacing:0.3px!important;text-decoration:none!important;border:none!important;outline:none!important} .navbar-nav{display:flex!important;gap:28px!important;list-style:none!important} .navbar-nav a{color:#e0e0e0!important;text-decoration:none!important;font-size:15px!important} .navbar-nav a:hover{color:#1a6fd4!important} .cta-button{background:#1a6fd4!important;color:#fff!important;padding:12px 24px!important;border-radius:6px!important;font-size:15px!important;font-weight:600!important;text-decoration:none!important} .hero-section-post{position:relative!important;background-size:cover!important;background-position:center!important;min-height:400px!important;display:flex!important;align-items:center!important;justify-content:center!important;padding:120px 20px 60px!important} .hero-content-box{background:rgba(13,13,13,0.85)!important;backdrop-filter:blur(10px)!important;border:1px solid rgba(26,111,212,0.3)!important;border-radius:16px!important;padding:48px 64px!important;max-width:900px!important} .hero-heading-blue{color:#1a6fd4!important;font-size:2.8rem!important;font-weight:800!important;line-height:1.2!important} .post-content-container{max-width:1100px!important;margin:0 auto!important;padding:60px 48px!important} .post-content-inner{color:#b0b0b0!important;font-size:18px!important;line-height:1.8!important} .post-content-inner p{margin-bottom:24px!important} .post-content-inner h2{color:#1a6fd4!important;font-size:28px!important;margin:48px 0 24px!important;border-bottom:2px solid rgba(26,111,212,0.3)!important;padding-bottom:12px!important} .post-content-inner h3{color:#fff!important;font-size:22px!important;margin:36px 0 16px!important} .post-content-inner img{max-width:100%!important;height:auto!important;border-radius:12px!important;margin:32px 0!important} .disclaimer-section{padding:40px 48px!important;background:#1a1a1a!important;border-top:1px solid rgba(255,255,255,0.06)!important} .disclaimer-section p{color:#858585!important;font-size:13px!important;text-align:center!important} .site-footer-custom{padding:20px 48px!important;background:#1a1a1a!important} .footer-grid{display:grid!important;grid-template-columns:repeat(3,1fr)!important;gap:50px!important;max-width:1380px!important;margin:0 auto!important} .footer-column h4{color:#1a6fd4!important;font-size:15px!important;margin-bottom:20px!important} .footer-column a{color:#b5b5b5!important;text-decoration:none!important;display:block!important;margin-bottom:12px!important} @media(max-width:768px){ .navbar-dark{padding:0 16px!important;height:64px!important} .navbar-nav{display:none!important} .hero-content-box{padding:24px 16px!important} .hero-heading-blue{font-size:1.8rem!important} .post-content-container{padding:40px 20px!important} .footer-grid{grid-template-columns:1fr!important} } .wp-block-comments,.wp-block-post-comments-form,#respond,.comments-area{display:none!important} </style> </head> <body> <nav class="navbar-dark"> <a href="/" class="navbar-brand"> <img src="https://fixwaterca.site/wp-content/uploads/2026/02/logo.png" alt="FixWater CA" /> <span class="brand-text">FixWater CA</span> </a> <ul class="navbar-nav"> <li><a href="/blog/">Blog</a></li> <li><a href="/terms-and-conditions/">Terms</a></li> <li><a href="/privacy-policy/">Privacy</a></li> <li><a href="/about-us/">About Us</a></li> </ul> <a href="tel:+18882177044" class="cta-button">Call Now</a> </nav> <section class="hero-section-post" style="background-image: linear-gradient(135deg, rgba(13,13,13,0.85), rgba(13,13,13,0.75)), url('{{HEADER_IMAGE_URL}}')"> <div class="hero-content-box"> <h1 class="hero-heading-blue">{{POST_TITLE}}</h1> </div> </section> <main class="post-content-container"> <div class="post-content-inner"> {{POST_CONTENT}} </div> </main> <footer class="site-footer-custom"> <div class="footer-grid"> <div class="footer-column"> <h4>Services</h4> <a href="/">Water Damage Restoration</a> <a href="/">Emergency Service</a> <a href="/">24/7 Response</a> </div> <div class="footer-column"> <h4>Legal</h4> <a href="/terms-and-conditions/">Terms & Conditions</a> <a href="/privacy-policy/">Privacy Policy</a> </div> <div class="footer-column"> <h4>Contact</h4> <span>(888) 217-7044</span> <a href="/about-us/">About Us</a> </div> </div> <div class="disclaimer-section"> <p>FixWater CA connects homeowners with licensed, insured water damage restoration professionals. We are a referral service, not a restoration contractor. All work is performed by independent third-party contractors. Response times and availability vary by location and service demand.</p> </div> </footer> <!-- FixWater Popup Overlay --> <div id="fixwater-popup-overlay" class="fixwater-popup-overlay"> <div class="fixwater-popup-container"> <button id="fixwater-popup-close" aria-label="Close popup">×</button> <div class="fixwater-popup-service-hours">Monday – Sunday: 10:00am – 2:00am EST</div> <div class="fixwater-popup-header"> <h2>Need Emergency Service?</h2> <p>Enter your ZIP code to check availability in your area</p> </div> <div id="fixwater-popup-form-container"> <div class="zip-form-wrapper" id="fixwater-popup-form-card"> <div class="zip-form-card" id="fixwater-popup-card-inner"> <h3>Check Service Availability</h3> <p class="subtitle">Enter your ZIP to see if we serve your area</p> <form id="fixwater-zip-verification-form"> <input type="text" id="fixwater-zip-code-input" placeholder="Enter 5-digit ZIP code" maxlength="5" pattern="[0-9]{5}" autocomplete="off"> <div class="fixwater-recaptcha-wrapper"> <div class="g-recaptcha" data-sitekey="6LcLY3UsAAAAAJz94vzwgVsRKqKIEirIvDJYzOm0" data-callback="fixwater_onRecaptchaVerified" data-expired-callback="fixwater_onRecaptchaExpired" data-theme="dark"></div> </div> <input type="hidden" id="fixwater-recaptcha-token" name="recaptchaToken"> <button type="submit" id="fixwater-submit-btn"><span>Check Availability</span></button> </form> <div id="fixwater-success-message">✓ Service available in your area!</div> <div id="fixwater-timing-line">Click the phone number above to call now</div> </div> </div> <div class="fixwater-popup-footer"><p>Fast response • Licensed professionals • Serving all of California</p></div> </div> </div> </div> <div id="fixwater-sticky-button">📞</div> <style> .fixwater-popup-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.85);z-index:999998;align-items:center;justify-content:center} .fixwater-popup-overlay.active{display:flex} .fixwater-popup-container{background:linear-gradient(135deg,#1a1a1a,#0f0f0f);border-radius:12px;max-width:480px;width:90%;position:relative;box-shadow:0 20px 60px rgba(0,0,0,0.5);border:1px solid rgba(26,111,212,0.3)} #fixwater-popup-close{position:absolute;top:16px;right:20px;background:rgba(255,255,255,0.1);border:none;color:#fff;font-size:28px;cursor:pointer;z-index:10;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all 0.3s} #fixwater-popup-close:hover{background:rgba(255,255,255,0.2);transform:rotate(180deg)} .fixwater-popup-service-hours{background:rgba(255,0,0,0.2);border:1px solid rgba(255,0,0,0.2);border-radius:10px;padding:8px 20px;margin:0 0 20px 0;display:inline-block;color:#fff;font-size:14px;font-weight:700;text-align:center;width:100%} .fixwater-popup-header{text-align:center;margin-bottom:20px}.fixwater-popup-header h2{color:#fff;font-size:26px;margin-bottom:8px;font-weight:700} .fixwater-popup-header p{color:#ccc;font-size:15px}#fixwater-popup-form-container{padding:0 32px 0px 32px} .zip-form-wrapper#fixwater-popup-form-card{background:rgba(26,26,26,0.8);border:1px solid rgba(26,111,212,0.4);border-radius:10px;padding:24px;margin:0 auto;max-width:420px;text-align:center;box-shadow:0 0 15px rgba(26,111,212,0.2)} .zip-form-card#fixwater-popup-card-inner{background:rgba(20,20,40,0.88);border-radius:8px;padding:32px;text-align:center} #fixwater-popup-card-inner h3{color:#fff;font-size:22px;margin-bottom:8px;font-weight:700}.subtitle{color:#ccc;font-size:14px;margin-bottom:24px} #fixwater-zip-code-input{width:100%;height:48px;padding:0 16px;background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.2);border-radius:6px;color:#fff;font-size:16px;margin-bottom:16px} #fixwater-zip-code-input:focus{outline:none;border-color:#1a6fd4;box-shadow:0 0 0 2px rgba(26,111,212,0.3)}#fixwater-zip-code-input::placeholder{color:#888} #fixwater-submit-btn{width:100%;height:48px;background:#1a6fd4;border:none;border-radius:6px;color:#fff;font-size:16px;font-weight:600;cursor:pointer;transition:all 0.3s;margin-top:16px;opacity:0.5;cursor:not-allowed;display:flex;align-items:center;justify-content:center;gap:8px} #fixwater-submit-btn.enabled{opacity:1;cursor:pointer}#fixwater-submit-btn:hover{background:#155cb0;transform:translateY(-2px);box-shadow:0 4px 12px rgba(26,111,212,0.4)} #fixwater-success-message{display:none;margin-top:14px;font-size:15px;font-weight:600;color:#4caf50;text-align:center;padding-top:10px} #fixwater-timing-line{display:none;margin-top:8px;font-size:13px;color:#fff;text-align:center;padding-top:10px} .fixwater-recaptcha-wrapper{background:rgba(255,255,255,0.08);border-radius:8px;margin:16px 0;padding:12px;display:flex;justify-content:center;align-items:center;min-height:80px} .fixwater-recaptcha-wrapper iframe,.fixwater-recaptcha-wrapper .g-recaptcha{width:304px;height:78px;transform:scale(0.95);transform-origin:center} .fixwater-popup-footer{color:#90a4ae;text-align:center;padding-bottom:10px;margin-top:20px}.fixwater-popup-footer p{font-size:14px} #fixwater-sticky-button{display:none;position:fixed;bottom:30px;right:30px;width:70px;height:70px;border-radius:50%;background:#d32f2f;color:#fff;border:3px solid #ff5252;box-shadow:0 0 30px rgba(211,47,47,0.8);cursor:pointer;z-index:9999;align-items:center;justify-content:center;font-size:32px;animation:fixwaterEmergencyPulse 2s ease-in-out infinite} #fixwater-sticky-button.show{display:flex}#fixwater-sticky-button:hover{transform:scale(1.1)} @keyframes fixwaterEmergencyPulse{0%,100%{box-shadow:0 0 30px rgba(211,47,47,0.8)}50%{box-shadow:0 0 50px rgba(211,47,47,1)}} @media(max-width:768px){.fixwater-popup-container{width:95%}#fixwater-sticky-button{bottom:20px;right:20px;width:60px;height:60px;font-size:28px}.fixwater-recaptcha-wrapper{zoom:0.85}} </style> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script> (function(){ var caZips=["90001","90002","90003","90004","90005","90006","90007","90008","90009","90010","90011","90012","90013","90014","90015","90016","90017","90018","90019","90020","90021","90022","90023","90024","90025","90026","90027","90028","90029","90030","90031","90032","90033","90034","90035","90036","90037","90038","90039","90040","90041","90042","90043","90044","90045","90046","90047","90048","90049","90050","90051","90052","90053","90054","90055","90056","90057","90058","90059","90060","90061","90062","90063","90064","90065","90066","90067","90068","90069","90070","90071","90072","90073","90074","90075","90076","90077","90078","90079","90080","90081","90082","90083","90084","90086","90087","90088","90089","90091","90093","90094","90095","90096","90099","90189","90201","90202","90209","90210","90211","90212","90213","90220","90221","90222","90223","90224","90230","90231","90232","90239","90240","90241","90242","90245","90247","90248","90249","90250","90251","90254","90255","90260","90261","90262","90263","90264","90265","90266","90267","90270","90272","90274","90275","90277","90278","90280","90290","90291","90292","90293","90294","90295","90296","90301","90302","90303","90304","90305","90306","90307","90308","90309","90310","90311","90312","90401","90402","90403","90404","90405","90406","90407","90408","90409","90410","90411","90501","90502","90503","90504","90505","90506","90507","90508","90509","90510","90601","90602","90603","90604","90605","90606","90607","90608","90609","90610","90620","90621","90622","90623","90624","90630","90631","90632","90633","90637","90638","90639","90640","90650","90651","90652","90660","90661","90662","90670","90671","90680","90701","90702","90703","90706","90707","90710","90711","90712","90713","90714","90715","90716","90717","90720","90721","90723","90731","90732","90733","90734","90740","90742","90743","90744","90745","90746","90747","90748","90749","90755","90801","90802","90803","90804","90805","90806","90807","90808","90809","90810","90813","90814","90815","90822","90831","90832","90833","90840","90842","90844","90846","90847","90848","90853","90895","91001","91003","91006","91007","91008","91009","91010","91011","91012","91016","91017","91020","91021","91023","91024","91025","91030","91031","91040","91041","91042","91043","91046","91066","91077","91101","91102","91103","91104","91105","91106","91107","91108","91109","91110","91114","91115","91116","91117","91118","91121","91123","91124","91125","91126","91129","91182","91184","91185","91188","91189","91199","91201","91202","91203","91204","91205","91206","91207","91208","91209","91210","91214","91221","91222","91224","91225","91226","91301","91302","91303","91304","91305","91306","91307","91308","91309","91310","91311","91313","91316","91319","91320","91321","91322","91324","91325","91326","91327","91328","91330","91331","91333","91334","91335","91337","91340","91341","91342","91343","91344","91345","91346","91350","91351","91352","91353","91354","91355","91356","91357","91358","91359","91360","91361","91362","91364","91365","91367","91371","91372","91376","91377","91380","91381","91382","91383","91384","91385","91386","91387","91390","91392","91393","91394","91395","91396","91401","91402","91403","91404","91405","91406","91407","91408","91409","91410","91411","91412","91413","91416","91423","91426","91436","91470","91482","91499","91501","91502","91503","91504","91505","91506","91507","91508","91510","91521","91522","91523","91526","91601","91602","91603","91604","91605","91606","91607","91608","91609","91610","91614","91615","91616","91617","91618","91701","91702","91706","91708","91709","91710","91711","91714","91715","91716","91722","91723","91724","91730","91731","91732","91733","91734","91735","91737","91739","91740","91741","91744","91745","91746","91747","91748","91749","91750","91754","91755","91756","91765","91766","91767","91768","91769","91770","91771","91772","91773","91775","91776","91778","91780","91784","91786","91788","91789","91790","91791","91792","91793","91801","91802","91803","91804","91896","91899","92602","92603","92604","92606","92612","92614","92618","92620","92626","92627","92646","92647","92648","92649","92655","92657","92660","92661","92662","92663","92683","92684","92685","92697","92701","92703","92704","92705","92706","92707","92708","92780","92782","92801","92802","92803","92804","92805","92806","92807","92808","92809","92812","92814","92815","92816","92817","92821","92822","92823","92825","92831","92832","92833","92834","92835","92836","92837","92838","92840","92841","92842","92843","92844","92845","92846","92850","92865","92866","92867","92868","92869","92870","92871","92879","92880","92881","92882","92883","92886","92887","92899","93010","93011","93012","93015","93016","93020","93021","93033","93040","93042","93061","93062","93063","93064","93065","93066","93094","93099","93510","93532","93534","93535","93536","93539","93543","93550","93551","93552","93553","93563","93584","93586","93591"]; var recaptchaVerified=false,recaptchaToken="",zipValid=false; function isValidCAZip(zip){return caZips.indexOf(zip)!==-1;} function updateButtonState(){var zipInput=document.getElementById("fixwater-zip-code-input");var submitBtn=document.getElementById("fixwater-submit-btn");if(!zipInput||!submitBtn)return;var zipValue=zipInput.value.trim();zipValid=/^\d{5}$/.test(zipValue)&&isValidCAZip(zipValue);if(zipValid&&recaptchaVerified){submitBtn.disabled=false;submitBtn.style.opacity="1";submitBtn.style.cursor="pointer";submitBtn.classList.add("enabled");}else{submitBtn.disabled=true;submitBtn.style.opacity="0.5";submitBtn.style.cursor="not-allowed";submitBtn.classList.remove("enabled");}} window.fixwater_onRecaptchaVerified=function(token){recaptchaVerified=true;recaptchaToken=token;var tokenInput=document.getElementById("fixwater-recaptcha-token");if(tokenInput)tokenInput.value=token;updateButtonState();}; window.fixwater_onRecaptchaExpired=function(){recaptchaVerified=false;recaptchaToken="";var tokenInput=document.getElementById("fixwater-recaptcha-token");if(tokenInput)tokenInput.value="";updateButtonState();}; var zipInput=document.getElementById("fixwater-zip-code-input");if(zipInput){zipInput.addEventListener("input",function(){this.value=this.value.replace(/[^0-9]/g,"");if(this.value.length>5)this.value=this.value.slice(0,5);updateButtonState();});} var form=document.getElementById("fixwater-zip-verification-form");if(form){form.addEventListener("submit",function(e){e.preventDefault();if(zipValid&&recaptchaVerified){var submitBtn=document.getElementById("fixwater-submit-btn");var successMsg=document.getElementById("fixwater-success-message");if(submitBtn)submitBtn.innerHTML="<span>✅ (888) 217-7044</span>";if(successMsg)successMsg.style.display="block";}});} var closeBtn=document.getElementById("fixwater-popup-close");var overlay=document.getElementById("fixwater-popup-overlay");if(closeBtn&&overlay){closeBtn.addEventListener("click",function(){overlay.classList.remove("active");var stickyBtn=document.getElementById("fixwater-sticky-button");if(stickyBtn)stickyBtn.classList.add("show");});} setTimeout(function(){var overlay=document.getElementById("fixwater-popup-overlay");if(overlay)overlay.classList.add("active");},1500); var stickyBtn=document.getElementById("fixwater-sticky-button");if(stickyBtn&&overlay){stickyBtn.addEventListener("click",function(){overlay.classList.add("active");this.classList.remove("show");});} })(); </script> </body> </html> HTML; } } https://fixwaterca.com/post-sitemap.xml 2026-04-17T09:38:11+00:00 https://fixwaterca.com/page-sitemap.xml 2026-04-17T05:54:02+00:00 https://fixwaterca.com/category-sitemap.xml 2026-04-17T09:38:11+00:00