<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" />
    <meta name="robots" content="noindex, nofollow" />
    <meta name="theme-color" content="#ffffff" />
    <!-- Local assets only ÃƒÆ’Ã†â€™Ãƒâ€š¢ÃƒÆ’¢ÃƒÂ¢Ã¢â€šÂ¬Ã…Â¡Ãƒâ€š¬ÃƒÆ’¢ÃƒÂ¢Ã¢â‚¬Å¡¬Ãƒâ€š Cloudflare Pages -->
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link rel="icon" href="/favicon.ico" sizes="any" />
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png" />
    <link rel="icon" type="image/png" sizes="192x192" href="/favicon-192.png" />
    <link rel="icon" type="image/png" sizes="512x512" href="/favicon-512.png" />
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
    <title>A1 Painters</title>
    <!-- A1 EMERGENCY CHROME v7 - scrub leftovers; a1-nuke-dash.js owns the one admin exit -->
    <meta name="a1-dash-fix" content="20260818v7-lock" />
    <style id="a1-emergency-chrome-css">
      #a1-plain-mode-banner{display:none!important;visibility:hidden!important;height:0!important;max-height:0!important;overflow:hidden!important;padding:0!important;margin:0!important;}
      /* Hide ALL leftover floating Dashboard injectors (header Dashboard stays) */
      #a1-emergency-dash,#a1-nuke-dash,#a1-admin-dash-btn,
      #a1-toolbar-dashboard,#a1-toolbar-dashboard-inline,#a1-toolbar-dashboard-nuke,
      #a1-emergency-exit,#a1-nuke-exit,#a1-back-to-estimate{display:none!important;visibility:hidden!important;pointer-events:none!important;}
      /* Real customers never see admin exit (admin preview sets html.a1-admin-preview) */
      html.a1-customer-link:not(.a1-admin-preview) #a1-admin-exit-customer{display:none!important;}
    </style>
    <script>
    (function(){
      if(window.__a1EmergencyChromeV7)return;window.__a1EmergencyChromeV7=1;
      function kill(el){try{if(el&&el.parentNode)el.parentNode.removeChild(el);}catch(e){}}
      function scrub(){
        try{document.querySelectorAll("#a1-plain-mode-banner").forEach(kill);}catch(e){}
        ["a1-emergency-dash","a1-nuke-dash","a1-admin-dash-btn","a1-toolbar-dashboard","a1-toolbar-dashboard-inline","a1-toolbar-dashboard-nuke","a1-emergency-exit","a1-nuke-exit","a1-back-to-estimate"].forEach(function(id){kill(document.getElementById(id));});
        /* If this is a real customer link (not admin preview), kill exit bar too */
        try{
          var preview=sessionStorage.getItem("a1_admin_customer_preview")==="1";
          if(document.documentElement.classList.contains("a1-customer-link")&&!preview){
            kill(document.getElementById("a1-admin-exit-customer"));
          }
        }catch(e2){}
      }
      if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",scrub);else scrub();
      setInterval(scrub,300);
    })();
    </script>
<!-- signfix2 printgate-off --><!-- logo-hover-land-1 boot-no-scare-1 saveas-showsvc-1 signfix-5k-v5 print-before-sign-1 -->
    <script>
      /* Legacy shape kept so old callers don't crash - sends go to /api/send-email (Resend) */
      window.A1_EMAILJS_CONFIG = {
        publicKey: "resend-via-cloudflare",
        serviceId: "resend",
        provider: "resend",
        endpoint: "/api/send-email"
      };
      /* Catch ANY leftover EmailJS fetch from the bundle and route to Resend */
      (function a1ResendBridge() {
        if (window.__A1_RESEND_BRIDGE__) return;
        window.__A1_RESEND_BRIDGE__ = 1;
        var nativeFetch = window.fetch;
        if (typeof nativeFetch !== "function") return;
        window.fetch = function (input, init) {
          try {
            var url = typeof input === "string" ? input : input && input.url;
            if (
              url &&
              /api\.emailjs\.com\/api\/v1\.0\/email\/send/i.test(String(url))
            ) {
              var body = init && init.body;
              var payload = {};
              if (typeof body === "string") {
                try {
                  payload = JSON.parse(body);
                } catch (_e) {
                  payload = {};
                }
              }
              return nativeFetch.call(this, "/api/send-email", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify(payload),
              });
            }
          } catch (_b) {}
          return nativeFetch.apply(this, arguments);
        };
      })();
    </script>
    <script src="/assets/a1-customer-route-boot.js?v=cust-land-3"></script>
    <script src="/assets/a1-login-guard.js?v=20260728-emailjs"></script>
    <script src="/assets/a1-emailjs-bodies.js?v=dual-all-tpl-20260819-key"></script>
    <script type="module" crossorigin src="/assets/index-preview-name-v2.js?v=print-before-sign-2"></script>
    <script src="/assets/a1-quote-sources.js?v=angi-call-1" defer></script>
    <link rel="stylesheet" crossorigin href="/assets/index-ebd7b6e6.css">
    <link rel="stylesheet" href="/assets/a1-estimate-form-mobile.css">
    <link rel="stylesheet" href="/assets/a1-admin-save-buttons.css?v=red-hover-3">
    <link rel="stylesheet" href="/assets/a1-admin-mobile-ux.css?v=restore-css-20">
    <script src="/assets/a1-admin-mobile-ux.js?v=empty-vault-btn-5" defer></script>
    <link rel="stylesheet" href="/assets/a1-customer-mobile-fit.css?v=phone-email-perfect-17">
    <link rel="stylesheet" href="/assets/a1-logo-hang-center.css?v=header-restore-1">
    <link rel="stylesheet" href="/assets/eq-btns.css?v=desk-btn-clear-1">
    <link rel="stylesheet" href="/assets/a1-print-clean.css?v=kill-btns-2">
    <link rel="stylesheet" href="/assets/a1-btn-feel-save.css?v=phone-email-perfect-17">
    <!-- shortwide-2b-mark -->
    <script src="/assets/a1-eq-btns-signfix-5k.js?v=print-before-sign-2" defer></script>
    <script src="/assets/a1-customer-view-fix-bte.js?v=paper-5" defer></script>
    <script src="/assets/a1-nuke-dash.js?v=nuke-4-lock"></script>
    <script src="/assets/a1-admin-chrome.js?v=chrome-v5-nodup" defer></script>
    <script src="/assets/a1-estimate-ara.js?v=zip-1" defer></script>
    <script src="/assets/a1-estimate-plain-mode.js?v=saveas-escape-fix-1" defer></script>
    <script src="/assets/a1-zip-autofill.js?v=zip-1" defer></script>
    <script src="/assets/a1-auth-fix.js?v=4" defer></script>
    <script src="/assets/a1-save-fix.js?v=format-toggle-1" defer></script>
    <script src="/assets/a1-paid-stamps.js?v=invoice-only-1" defer></script>
    <script src="/assets/a1-invoice-system.js?v=no-freeze-2" defer></script>
    <script src="/assets/a1-dash-fix.js?v=no-scare-1" defer></script>
    <!-- LAST: ZOOM-V8 unique filename so CDN/browser cache cannot serve old print code -->
    <!-- Phone: blob print (not iframe parent) + collapse + compact + max-1 -->
    <!-- MAX1-7 phone; iPad: wide capture + same one-page bake (fill width, no page-2 spill) -->
    <script src="/assets/a1-print-onepage.js?v=phone-max1-7-restore-1"></script>
    <!-- html deploy banner removed — was appearing in print -->
    <script>
      (function () {
        function pin() {
          try {
            if (typeof window.A1PrintContractOnePage !== "function") return;
            /* Capture the REAL printer once (never store our own wrapper) */
            if (
              !window.__a1OrigPrintContract ||
              (window.__a1OrigPrintContract &&
                window.__a1OrigPrintContract.__a1PrintGated)
            ) {
              if (
                window.A1PrintContractOnePage &&
                !window.A1PrintContractOnePage.__a1PrintGated
              ) {
                window.__a1OrigPrintContract = window.A1PrintContractOnePage;
              }
            }
            if (
              !window.__a1OrigPrintContract ||
              window.__a1OrigPrintContract.__a1PrintGated
            ) {
              return;
            }
            /* Print allowed before sign — pass through to one-page printer only.
               Do not change print bake / phone-desktop quality here. */
            function passPrint() {
              try {
                window.__a1BlockPrintUntil = 0;
              } catch (_b) {}
              return window.__a1OrigPrintContract.apply(window, arguments);
            }
            /* Keep flag so other wrappers don't double-wrap incorrectly */
            passPrint.__a1PrintGated = true;
            window.print = passPrint;
            window.A1PrintContractOnePage = passPrint;
          } catch (_e) {}
        }
        pin();
        [200, 800, 2000, 5000, 12000].forEach(function (ms) {
          setTimeout(pin, ms);
        });
      })();
    </script>
    <!-- INLINE: hero = exact homepage .hero box under header. Logo locked. NO Ãƒâ€š±px. -->
    <style id="a1-layout-lock-11">
/* Homepage .hero is under sticky header, height min(88vh,780px), .hero-bg cover + center right.
   Estimate #a1-cust-bg must use that SAME box ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â not full viewport (that changes cover crop). */
html:has(.a1-est-landing) body,html:has(.a1-est-embed) body{
  background-color:#e8eef5!important;
  background-image:none!important; /* image ONLY on #a1-cust-bg ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â body image was fighting and offset wrong */
}
html:has(.a1-est-landing) #root,html:has(.a1-est-landing) #root>div,html:has(.a1-est-landing) .a1-est-landing,html:has(.a1-est-landing) .min-h-screen{
  background:transparent!important;background-color:transparent!important;background-image:none!important;
}
html:has(.a1-est-landing) body #a1-cust-bg,html:has(.a1-est-embed) body #a1-cust-bg{
  display:block!important;visibility:visible!important;opacity:1!important;
  position:fixed!important;
  top:4.25rem!important; /* measured from TOP OF HEADER ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â same edge as homepage hero start */
  left:0!important;right:0!important;bottom:auto!important;
  height:min(88vh,780px)!important; /* EXACT homepage .hero min-height */
  width:auto!important;z-index:0!important;pointer-events:none!important;
  background-color:#e8eef5!important;
  background-image:linear-gradient(100deg,rgba(255,255,255,.72) 0%,rgba(255,255,255,.45) 32%,rgba(255,255,255,.08) 55%,rgba(255,255,255,0) 72%),url("https://a1painters.com/images/live_846df441d539bd4760f47167deec302a.jpg?v=paper-stable-1")!important;
  background-size:cover!important;
  background-position:center right!important; /* EXACT homepage .hero-bg ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â no Ãƒâ€š±px */
  background-repeat:no-repeat!important;
  background-attachment:scroll!important;
}
html:not(:has(.a1-est-landing)):not(:has(.a1-est-embed)) body #a1-cust-bg{
  display:none!important;visibility:hidden!important;opacity:0!important;background:none!important;background-image:none!important;width:0!important;height:0!important;
}
html:not(:has(.a1-est-landing)):not(:has(.a1-est-embed)) body,
html:not(:has(.a1-est-landing)):not(:has(.a1-est-embed)) #root{
  background:#f8fafc!important;background-color:#f8fafc!important;background-image:none!important;
}
/* LOGO LOCKED ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â do not change */
html .a1-logo{align-self:flex-start!important;height:4.25rem!important;position:relative!important;overflow:visible!important}html body .a1-logo img{top:3px!important;left:0!important;height:calc(4.25rem * 1.6)!important;position:absolute!important;width:auto!important;max-height:none!important;object-fit:contain!important;margin:0!important;transform:none!important}
@media(min-width:768px){html body .a1-logo img{top:3px!important;height:calc(4.25rem * 1.85)!important}}
html:has(.a1-est-landing) .a1-est-landing{padding-top:1.5rem!important}
@media(min-width:1024px){
  html:has(.a1-est-landing) .a1-est-sidebar,html:has(.a1-est-landing) [data-a1-est-sidebar="1"]{
    position:fixed!important;top:6.5rem!important;right:1.25rem!important;left:auto!important;z-index:80!important;
    display:block!important;width:clamp(148px,12.5vw,190px)!important;transform:none!important;
  }
}
</style>
<style id="toast-position-fix">
[data-sonner-toaster],[data-sonner-toaster][data-x-position],[data-sonner-toaster][data-y-position]{position:fixed!important;top:auto!important;bottom:1.5rem!important;left:0!important;right:0!important;width:100%!important;transform:none!important;display:flex!important;flex-direction:column!important;align-items:center!important;padding:0 1rem!important;box-sizing:border-box!important}
[data-sonner-toast]{width:min(356px,calc(100vw - 2rem))!important;margin:0 auto!important;height:auto!important;text-align:center!important;display:flex!important;align-items:center!important;justify-content:center!important}
[data-sonner-toast] [data-title],[data-sonner-toast] [data-content],[data-sonner-toast] [data-description]{text-align:center!important}
    </style>
  <style id="a1-reviews-overlay-z">
.a1-reviews-overlay{position:fixed!important;inset:0!important;z-index:2147483000!important;isolation:isolate!important}
</style>
  

<style id="a1-btn-hover">
/* Red buttons: solid #d02127 ÃƒÂ¢Ã¢â‚¬Â ' darker #a0181e on hover (Get a quote feel) */
.a1-send-to-a1-btn,
.a1-send-btn,
.a1-q-cancel-btn {
  opacity: 1 !important;
  filter: none !important;
  transition: background-color .15s, border-color .15s, box-shadow .15s, transform .1s !important;
}
.a1-send-to-a1-btn,
.a1-send-btn {
  background-color: #d02127 !important;
  border: 1px solid #d02127 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}
.a1-send-to-a1-btn span,
.a1-send-btn span {
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  opacity: 1 !important;
}
.a1-q-cancel-btn {
  background-color: #ffffff !important;
  color: #334155 !important;
  -webkit-text-fill-color: #334155 !important;
  border: 1px solid #cbd5e1 !important;
}
.a1-send-to-a1-btn:hover:not(:disabled),
.a1-send-btn:hover:not(:disabled) {
  background-color: #a0181e !important;
  border-color: #a0181e !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  opacity: 1 !important;
  filter: none !important;
  transform: translateY(-1px);
  box-shadow: 0 3px 8px rgba(0,0,0,0.14) !important;
}
.a1-send-to-a1-btn:active:not(:disabled),
.a1-send-btn:active:not(:disabled) {
  transform: translateY(0);
  box-shadow: none !important;
  background-color: #a0181e !important;
  color: #ffffff !important;
  opacity: 1 !important;
}
.a1-q-cancel-btn:hover:not(:disabled) {
  background-color: #f1f5f9 !important;
  border-color: #94a3b8 !important;
  color: #0f172a !important;
  -webkit-text-fill-color: #0f172a !important;
  opacity: 1 !important;
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(0,0,0,0.08) !important;
}
.a1-q-cancel-btn:active:not(:disabled) {
  transform: translateY(0);
  box-shadow: none !important;
}
.a1-send-to-a1-btn:disabled,
.a1-send-btn:disabled,
.a1-q-cancel-btn:disabled {
  opacity: 0.7 !important;
  cursor: not-allowed !important;
  transform: none !important;
  box-shadow: none !important;
}
</style>



<style id="a1-saveas-dialog-btns">button.a1-saveas-confirm,button.a1-saveas-confirm:disabled,button.a1-btn-save-as,button.a1-btn-save-as:disabled{background:#d02127!important;background-color:#d02127!important;color:#fff!important;-webkit-text-fill-color:#fff!important;border:2px solid #d02127!important}button.a1-saveas-confirm:hover:not(:disabled),button.a1-btn-save-as:hover:not(:disabled){background:#a0181e!important;background-color:#a0181e!important;border-color:#a0181e!important;color:#fff!important}button.a1-saveas-confirm:disabled,button.a1-btn-save-as:disabled{opacity:.45!important;background:#d02127!important}button.a1-saveas-cancel{background:#fff!important;color:#0f172a!important;border:2px solid #64748b!important}button.a1-saveas-cancel:hover{background:#f1f5f9!important;border-color:#94a3b8!important}</style>
<style id="a1-no-dialog-blur">
/* NO outer blur on any dialog */
[data-radix-dialog-overlay],.a1-dialog-overlay-no-blur,.fixed.inset-0.z-50,[class*="bg-black/"]{
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;filter:none!important
}
[data-radix-dialog-overlay],.a1-dialog-overlay-no-blur{background:rgba(0,0,0,.35)!important;background-image:none!important}
[role="dialog"],[data-radix-dialog-content]{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;background:#fff!important}
</style>
<style id="a1-boot-fallback" data-v="no-load-words-1">html,body{background:#f8fafc;margin:0}/* no LoadingÃƒÂ¢Ã¢â€šÂ¬¦ text ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â blank until app mounts */</style>
<script>
/**
 * Boot UI: no "Loading estimate" words (user request).
 * Soft hang message only after a very long empty wait.
 */
(function () {
  try {
    var path = String(location.pathname || "") + String(location.search || "");
    var isEst =
      /estimate-customer-view|view-estimate|estimate-view/i.test(path) ||
      /[?&]token=/.test(path);
    document.title = isEst ? "A1 Painters - Your Estimate" : document.title;
  } catch (_e) {}

  function rootReady(r) {
    try {
      if (!r) return false;
      if (r.children && r.children.length) return true;
      if (r.childNodes && r.childNodes.length) return true;
      /* React often mounts without :empty once text/nodes exist */
      if (String(r.innerHTML || "").replace(/\s+/g, "").length > 0) return true;
    } catch (_r) {}
    return false;
  }

  function showSlowMessage() {
    try {
      if (window.__a1BootAppReady) return;
      var r = document.getElementById("root");
      if (!r || rootReady(r)) return;
      /* Only if still truly empty after a long wait */
      var path = String(location.pathname || "");
      var isEst = /estimate-customer-view|view-estimate/i.test(path);
      var box = document.createElement("div");
      box.id = "a1-boot-slow";
      box.setAttribute(
        "style",
        "max-width:420px;margin:3rem auto;padding:1.5rem;font-family:system-ui,sans-serif;background:#fff;border:1px solid #e2e8f0;border-radius:12px"
      );
      if (isEst) {
        box.innerHTML =
          '<h1 style="color:#d02127;margin:0 0 .75rem;font-size:1.25rem">Your Estimate</h1>' +
          '<p style="color:#334155;margin:0;line-height:1.5">Still loading on a slow connection ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â hang tight a few more seconds. If nothing appears, reopen the link from your email or call <a href="tel:5083620100" style="color:#d02127;font-weight:700">(508) 362-0100</a>.</p>';
      } else {
        box.innerHTML =
          '<h1 style="color:#d02127;margin:0 0 .75rem;font-size:1.25rem">A1 Admin</h1>' +
          '<p style="color:#334155;margin:0;line-height:1.5">Still loading ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â this can take a bit on slow phones. Leave this page open. If it never appears, try <a href="/admin-login" style="color:#d02127;font-weight:700">Login</a>.</p>';
      }
      /* Do not wipe #root if React already started */
      if (!rootReady(r) && !document.getElementById("a1-boot-slow")) {
        r.appendChild(box);
      }
    } catch (_s) {}
  }

  /* Mark ready as soon as React puts anything in #root ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â cancel scare UI */
  try {
    var rootEl = document.getElementById("root");
    if (rootEl && typeof MutationObserver !== "undefined") {
      var mo = new MutationObserver(function () {
        if (rootReady(rootEl)) {
          window.__a1BootAppReady = 1;
          try {
            var slow = document.getElementById("a1-boot-slow");
            if (slow && slow.parentNode) slow.parentNode.removeChild(slow);
          } catch (_rm) {}
          try {
            mo.disconnect();
          } catch (_d) {}
        }
      });
      mo.observe(rootEl, { childList: true, subtree: true });
    }
  } catch (_mo) {}

  /* Random script errors must NOT say "failed" ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â app often still loading */
  window.addEventListener("error", function () {
    try {
      /* intentionally no #root wipe */
      if (typeof console !== "undefined" && console.warn) {
        console.warn("[A1 boot] script error during load (app may still start)");
      }
    } catch (_e) {}
  });

  /* Soft hang tip only after 25s of truly empty root (slow network) */
  setTimeout(function () {
    if (!window.__a1BootAppReady) showSlowMessage();
  }, 25000);
})();
</script>
<style id="a1-logo-hover-no-bright">
/* Landing logo: never greyscale whites with brightness; JS swaps to logo-hover.png */
html .a1-logo:hover img,
html body .a1-logo:hover img,
html .a1-logo img {
  filter: drop-shadow(0 2px 6px rgba(0,0,0,.15)) !important;
}
</style>
<style id="a1-equal-action-btns">
/* Equal top action tiles ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â fixed width, no text-length pyramid */
html:has(.a1-est-landing) #a1-your-estimate{
  display:flex!important;flex-wrap:wrap!important;justify-content:center!important;
  align-items:stretch!important;gap:1rem 1.15rem!important;
  margin-left:auto!important;margin-right:auto!important;
}
html:has(.a1-est-landing) #a1-your-estimate>* ,
html:has(.a1-est-landing) #a1-your-estimate>button,
html:has(.a1-est-landing) #a1-your-estimate>.a1-have-q-wrap{
  flex:0 0 180px!important;width:180px!important;min-width:180px!important;max-width:180px!important;
  box-sizing:border-box!important;margin:0!important;
}
html:has(.a1-est-landing) #a1-your-estimate>*>button,
html:has(.a1-est-landing) #a1-your-estimate button.a1-have-q-btn,
html:has(.a1-est-landing) #a1-your-estimate button{
  width:100%!important;min-width:0!important;max-width:100%!important;box-sizing:border-box!important;
}
@media(max-width:639px){
  html:has(.a1-est-landing) #a1-your-estimate>*,
  html:has(.a1-est-landing) #a1-your-estimate>button,
  html:has(.a1-est-landing) #a1-your-estimate>.a1-have-q-wrap{
    flex:0 0 calc(50% - .5rem)!important;width:calc(50% - .5rem)!important;
    min-width:0!important;max-width:calc(50% - .5rem)!important;
  }
}
</style>
<style id="a1-print-layout-kill">
@media print {
  html:has(.a1-est-landing) body #a1-cust-bg,
  html:has(.a1-est-embed) body #a1-cust-bg,
  html body #a1-cust-bg,
  #a1-cust-bg {
    display: none !important;
    visibility: hidden !important;
    height: 0 !important;
    max-height: 0 !important;
    min-height: 0 !important;
    width: 0 !important;
    background: none !important;
    background-image: none !important;
    position: absolute !important;
    left: -99999px !important;
  }
  html:has(.a1-est-landing) body,
  html:has(.a1-est-embed) body,
  html body {
    background: #fff !important;
    background-image: none !important;
  }
  #a1-your-estimate,
  #a1-float-sign-accept {
    display: none !important;
  }
  #estimate-document {
    width: 100% !important;
    max-width: 100% !important;
    transform: none !important;
    margin: 0 !important;
    box-shadow: none !important;
  }
}
</style>
<style id="a1-customer-link-hide-admin">
/* Customer private link: never show admin dashboard chrome */
html.a1-customer-link a[href="/admin-dashboard"],
html.a1-customer-link a[href*="admin-dashboard"],
html.a1-customer-link a[href="/admin-login"],
html.a1-customer-link nav a[href="/admin"],
html.a1-customer-link [data-a1-admin-only]{display:none!important}
</style>
  </head>
  <body><a href="https://admin.a1painters.com/cdn-cgi/content?id=zPouSjwtDKK66NRRYCijI.llFz9wG33N3s1ESgjsMb8-1786563112.677509-1.2.1.1-60uCLbb6DjBv0iPMNKwoLgd1YL5ZJ.0adKy3o7dblq8maY2x_1XyJvsj1l4T5YOK" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=CLGf62.snlIbO4mcfFycJYr5jcDDRVjTUkowrlYfmdM-1786562933.0293007-1.2.1.1-Udwcgr9BMjt4yGA9q4o0HIdVKjzVAeI6vlz5ID3ALYJMtRG8SeHms9x7mDK1KxsJ" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=Xtd9Lnd6hUX0C3rXZBCq3UH7QMgHV6VFHgmHtZ0usug-1786561971.45251-1.2.1.1-JcHZ8_nMnyQc7VGiPfuo5_jZDFF842XQpqO7EH1tWaxsvCObRDzu3en3utI6wYZx" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=0Lh9wjvsxKnci.JkUX0JVDBgKRQw25Nr4sHz.DAwTvY-1786382436.6313858-1.2.1.1-yVjDjNy5onZFfefXPArH3pLgl46QvaK62x488BI87CqHu4aF_g_sHrY65eH0XQ8b" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=bE5QcO3mLqKdAQLVe2jpwPiY9D5BJTi0vdM6IqjY0go-1786382228.3617303-1.2.1.1-dci3QA8C1zKh28.Y8lMtZDwlnsLOgMMMn7kiWt6vuECWqCQT7dcdr3dn2fyEcbp8" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=upXJZsxHlfkzBNtHXK0AXDpYmq7zrJZ5VWAHQvUWxYw-1786381515.8541286-1.2.1.1-URnmsV4jwVDeTLRV2A1uEoUydT7Kj1VzkapgHCRYwZB9_wXpCiDBO4ckKsP_t0wA" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=TUUlEWUPGmxDw5rLxRf_NtC6b3Omko49wKoxxoJdIqg-1786380846.2509856-1.2.1.1-m9KFU5USAnsMVnz1aTJ44WQoUSgtvZgIox46XJieL_wgCvky6Csj_9e_bHVMDG2x" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=5_DAaTYj8zbL1tvsePi32iD_RtY7vdL2XFEWP5Z3GeY-1786380010.9017186-1.2.1.1-l9.fV2o9MyyjJA0_586LH9korvnuc6AwAX7WxQoW8h2jy50t3iqWIQYjTU6NRGdB" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=CgwIkZirOKW.WSCboVHxfdfNoZMzihmlPp.Jhuz3SQE-1786379948.4557228-1.2.1.1-u2a6l903E7.Gdj8d06Y.POcV5WYknqAwDi3G_HLydTWKrVnaDJW_Wd5WL_TyGUhs" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=4KY7.2YUwEhexQhiprPUHnf8A84Oqd5q_oAk1wh7fyY-1786379515.5278375-1.2.1.1-qFMtGqemi2mIcsD057iIbaMWKUti0cZLWFtMtLjsn7.XCnw3iKIc0VzAXVxEHEfC" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=V3wYMuekD3BUuL2JtOxfVJR7pJ1vUecdLA1NJZZIIbw-1786377736.2626858-1.2.1.1-gsHrfqYVNFQzTa.8serIgi2euY1X.5IoC.99xT38cyBz1f0ml4NyYIqHuR4clDFa" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a><a href="https://admin.a1painters.com/cdn-cgi/content?id=0HlKUoJPIIn9Ag5wwD0Hi77T.AFy9feIM33pCD7NxpY-1786375331.5916138-1.2.1.1-7XZkNCUB.9mlvrcP2jG0Bc2MvWe537y0JaFLOl3olSLw5IOoa.lHJJPBKXbq5aBI" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>
    <div id="root"></div>
<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"adc6453c0632486ba1f97f3abaa2e2d7","r":1}' crossorigin="anonymous"></script>
<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"adc6453c0632486ba1f97f3abaa2e2d7","r":1}' crossorigin="anonymous"></script>
</body>
</html>





