<!doctype html>
<html lang="en-CA">
  <head>
    <!-- Google tag (gtag.js) — GA4 -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-39C1SZ25XH"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-39C1SZ25XH');
    </script>
    <!-- End Google tag -->

    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes, viewport-fit=cover" />
    <!-- Cache control: force revalidation of index.html so new deploys are picked up fast -->
    <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)" />
    <meta name="theme-color" content="#0f1419" media="(prefers-color-scheme: dark)" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
    <meta name="format-detection" content="telephone=no" />
    
    <!-- Sitewide title — per-route components override via useHelmet -->
    <title>Listings Alert — BC MLS Listings &amp; Instant Alerts</title>

    <!-- IMPORTANT: All per-page meta (description, canonical, og:*, twitter:*) is set by
         react-helmet-equivalent useHelmet in route components. Do NOT add static description,
         canonical, og:*, or twitter:* tags here — Google was deduping every route into the
         homepage because static tags shipped on every URL. -->

    
    <!-- Site-wide verification and bot directives -->
    <meta name="google-site-verification" content="9GNVX8D84c4XpBNkoor8Al3XXW88N_tyUhRkXXxQvD8" />
    <!-- Facebook Domain Verification — add via Meta Business Manager → Brand Safety → Domains when ready -->
    <meta name="googlebot" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
    <meta name="bingbot" content="index, follow" />
    
    <!-- Language and locale -->
    <meta http-equiv="content-language" content="en-CA" />
    <meta name="language" content="English" />

    <!-- AI Discovery Meta Tags - Site-wide -->
    <meta name="description" content="BC MLS listings & instant alerts — Fraser Valley & Lower Mainland. Search Surrey, Langley, Vancouver, Burnaby, Coquitlam and more on a HouseSigma-style map." />
    <meta name="ai:description" content="Listings Alert (listingsalert.ca) is a HouseSigma-style MLS listings and alerts web app for the Fraser Valley and Lower Mainland of British Columbia. Buyers search active MLS listings on a map and get instant alerts the moment a new home hits the market." />
    <meta name="ai:keywords" content="MLS listings BC, Fraser Valley real estate, Lower Mainland homes, Surrey listings, Langley listings, Vancouver MLS, instant home alerts, HouseSigma alternative" />
    <meta name="ai:site_type" content="MLS listings and alerts web app" />
    <meta name="ai:service_area" content="Metro Vancouver, Fraser Valley, British Columbia, Canada" />
    
    <!-- Geo Meta Tags - Site-wide default -->
    <meta name="geo.region" content="CA-BC" />
    <meta name="ICBM" content="49.0916, -122.7956" />
    <meta name="rating" content="general" />

    <!-- Structured Data - Organization (site-wide) -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": ["Organization", "RealEstateAgent"],
      "@id": "https://listingsalert.ca/#organization",
      "name": "Listings Alert",
      "alternateName": "Listings Alert BC",
      "url": "https://listingsalert.ca",
      "logo": "https://listingsalert.ca/favicon-512.png",
      "image": "https://listingsalert.ca/og-image.png",
      "description": "BC MLS listings and instant alerts for the Fraser Valley and Lower Mainland.",
      "founder": {
        "@type": "Person",
        "name": "Uzair Muhammad",
        "jobTitle": "BC Real Estate Specialist",
        "url": "https://listingsalert.ca/about"
      },
      "address": {
        "@type": "PostalAddress",
        "addressRegion": "BC",
        "addressCountry": "CA"
      },
      "knowsLanguage": ["en-CA", "English"],
      "knowsAbout": ["BC MLS", "Metro Vancouver real estate", "Fraser Valley real estate", "first-time home buyers"],
      "areaServed": [
        { "@type": "City", "name": "Vancouver" },
        { "@type": "City", "name": "Surrey" },
        { "@type": "City", "name": "Langley" },
        { "@type": "City", "name": "Burnaby" },
        { "@type": "City", "name": "Coquitlam" },
        { "@type": "City", "name": "Richmond" },
        { "@type": "City", "name": "North Vancouver" },
        { "@type": "City", "name": "Abbotsford" }
      ]
    }
    </script>

    <!-- Structured Data - WebSite with SearchAction -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "WebSite",
      "@id": "https://listingsalert.ca/#website",
      "name": "Listings Alert",
      "url": "https://listingsalert.ca",
      "description": "BC MLS listings & instant alerts — Fraser Valley & Lower Mainland.",
      "inLanguage": "en-CA",
      "potentialAction": [
        {
          "@type": "SearchAction",
          "target": { "@type": "EntryPoint", "urlTemplate": "https://listingsalert.ca/map-search?q={search_term_string}" },
          "query-input": "required name=search_term_string"
        }
      ]
    }
    </script>
    <link rel="icon" type="image/x-icon" href="/favicon.ico">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon.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="shortcut icon" href="/favicon.ico">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="167x167" href="/apple-touch-icon-167.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120.png">
    <link rel="manifest" href="/manifest.json">
    
    <!-- Preconnect for performance -->
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link rel="preconnect" href="https://iuflybgnbpcgtriyjsqd.supabase.co" crossorigin />
    <link rel="dns-prefetch" href="https://iuflybgnbpcgtriyjsqd.supabase.co" />
    <link rel="dns-prefetch" href="https://unpkg.com" />
    
    <!-- Splash now uses inline wordmark — no logo network request needed for first paint -->
    
    <!-- Fonts. We don't hard-preload a specific hashed woff2 URL — Google
         rotates them, which produces a 404 the moment the hash changes.
         The stylesheet below handles font-face + font-display:swap. -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@500;600;700&family=DM+Sans:wght@400;500;600&display=swap" />
    
    <!-- Critical CSS for above-the-fold content -->
    <style>
      html { scroll-behavior: smooth; background:#ffffff; }
      body { margin: 0; background:#ffffff; font-family: 'Inter', system-ui, -apple-system, sans-serif; -webkit-font-smoothing: antialiased; }
      @media (prefers-color-scheme: dark) {
        html, body { background:#0f1419; }
      }
      #root { min-height: 100vh; }
      .hero-skeleton {
        background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
        background-size: 200% 100%;
        animation: shimmer 1.5s infinite;
      }
      @media (prefers-color-scheme: dark) {
        .hero-skeleton {
          background: linear-gradient(90deg, #1f2937 25%, #374151 50%, #1f2937 75%);
          background-size: 200% 100%;
        }
      }
      @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
      img { max-width: 100%; height: auto; }
      .aspect-video { aspect-ratio: 16/9; }
      .aspect-square { aspect-ratio: 1/1; }
    </style>
    
  
  <!-- Security Headers (meta) -->
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.supabase.co https://iuflybgnbpcgtriyjsqd.supabase.co https://www.googletagmanager.com https://www.google-analytics.com https://static.reo.dev https://unpkg.com https://connect.facebook.net; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://unpkg.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: blob: https://*.supabase.co https://images.unsplash.com https://*.googleapis.com https://*.googleusercontent.com https://*.basemaps.cartocdn.com https://*.tile.openstreetmap.org https://server.arcgisonline.com https://*.arcgisonline.com https://ddfcdn.realtor.ca https://share.autoprop.ca https://my.matterport.com https://youtube.com https://*.youtube.com https://i.ytimg.com https://www.facebook.com; connect-src 'self' https://*.supabase.co https://www.google-analytics.com https://www.googletagmanager.com https://api.openai.com https://static.reo.dev https://overpass-api.de https://*.basemaps.cartocdn.com https://*.tile.openstreetmap.org https://server.arcgisonline.com https://*.arcgisonline.com https://ddfcdn.realtor.ca https://share.autoprop.ca https://my.matterport.com https://connect.facebook.net https://www.facebook.com; frame-src 'self' https://www.google.com https://www.youtube.com; base-uri 'self'; form-action 'self'">
  <!-- Note: frame-ancestors and X-Frame-Options must be sent as HTTP headers (configured at the hosting layer), not <meta>. Browsers ignore them here and log errors. -->
  <meta http-equiv="Permissions-Policy" content="camera=(), microphone=(), geolocation=(self), payment=(), usb=(), interest-cohort=()">

  <!-- og:site_name is the only OG tag safe to keep sitewide — never deduplicates content.
       All per-page og:*, twitter:*, description, and canonical tags are emitted by useHelmet. -->

    <!-- Meta (Facebook) Pixel — base snippet. SPA route PageViews fired from src/lib/tracking/metaPixel.ts -->
    <script>
      (function () {
        if (window.__fbqInitialized) return;
        window.__fbqInitialized = true;
        !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', '1340123130296866');
        fbq('track', 'PageView');
      })();
    </script>
    <!-- End Meta Pixel -->

  <script type="module" crossorigin src="/assets/index-Db92_pVD.js"></script>
  <link rel="stylesheet" crossorigin href="/assets/index-B4eoy7vF.css">
  <meta name="robots" content="noindex, follow" />
  </head>

  <body>
    <!-- Meta Pixel <noscript> fallback (must live in body per HTML5) -->
    <noscript><img height="1" width="1" style="display:none" alt=""
      src="https://www.facebook.com/tr?id=1340123130296866&ev=PageView&noscript=1"/></noscript>
    <!-- Minimal Listings Alert splash — inline wordmark, teal accent dot -->
    <div id="app-splash" style="position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:#ffffff;transition:opacity 0.35s ease,visibility 0.35s ease;">
      <style>
        @keyframes la-splash-in{0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:translateY(0)}}
        @keyframes la-dot-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.25);opacity:.55}}
        .la-splash-inner{display:flex;align-items:center;gap:10px;animation:la-splash-in .35s cubic-bezier(.16,1,.3,1) both;font-family:'Inter',system-ui,-apple-system,sans-serif;font-weight:700;font-size:22px;letter-spacing:-0.01em;color:#111827}
        .la-splash-dot{width:10px;height:10px;border-radius:9999px;background:#1AA17E;animation:la-dot-pulse 1.1s ease-in-out infinite}
      </style>
      <div class="la-splash-inner" role="img" aria-label="Listings Alert">
        <span class="la-splash-dot"></span>
        <span>Listings Alert</span>
      </div>
    </div>
    <script>
      (function(){
        var s=document.getElementById('app-splash');
        if(!s)return;
        if(sessionStorage.getItem('la_splash_shown')){
          s.remove();return;
        }
        sessionStorage.setItem('la_splash_shown','1');
        setTimeout(function(){
          if(!s.parentNode)return;
          s.style.opacity='0';s.style.visibility='hidden';
          setTimeout(function(){s.remove()},300);
        },900);
      })();
    </script>
    <div id="root"></div>
    <!-- Zara widget temporarily disabled – kept for reference
    <script>
      /* Conditionally load Zara widget only on public browsing pages */
      (function () {
        var BLOCKED = ['/admin', '/agent'];
        function isBlocked() {
          var p = window.location.pathname;
          for (var i = 0; i < BLOCKED.length; i++) {
            if (p === BLOCKED[i] || p.indexOf(BLOCKED[i] + '/') === 0) return true;
          }
          return false;
        }
        function toggleWidget(hide) {
          var el = document.getElementById('zcw');
          if (el) el.style.display = hide ? 'none' : '';
        }
        if (!isBlocked()) {
          var s = document.createElement('script');
          s.src = 'https://cplycyfgywxhlecazvra.supabase.co/functions/v1/zara-widget';
          document.body.appendChild(s);
        }
        var lastPath = location.pathname;
        setInterval(function () {
          if (location.pathname !== lastPath) {
            lastPath = location.pathname;
            toggleWidget(isBlocked());
          }
        }, 300);
      })();
    </script>
    <script>
      (function () {
        function init() {
          var dis = document.getElementById('zdis');
          if (!dis) { setTimeout(init, 200); return; }
          dis.textContent = 'AI assistant · ListingsAlert.ca';
        }
        if (document.readyState === 'loading') {
          document.addEventListener('DOMContentLoaded', function () { setTimeout(init, 400); });
        } else {
          setTimeout(init, 400);
        }
      })();
    </script>
    END Zara widget -->
</body>
</html>
