<!DOCTYPE html>
<html lang="nl">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <!-- Favicons -->
    <link rel="icon" type="image/x-icon" href="/favicon/favicon.ico" />
    <link rel="icon" type="image/svg+xml" href="/favicon/favicon.svg" />
    <link
      rel="icon"
      type="image/png"
      sizes="96x96"
      href="/favicon/favicon-96x96.png"
    />
    <link
      rel="apple-touch-icon"
      sizes="180x180"
      href="/favicon/apple-touch-icon.png"
    />
    <link rel="manifest" href="/favicon/site.webmanifest" />

    <!-- Analytics and Tag Manager deferred: scripts will be loaded after window.load to avoid blocking render -->

    <!-- Primary Meta Tags -->
    <title>
      Bariq Autocare Halfweg – Premium handwas & car detailing
    </title>
    <meta
      name="title"
      content="Bariq Autocare Halfweg – Premium handwas & car detailing"
    />
    <meta
      name="description"
      content="Professionele handwas, velgen, interieur & glas op onze vaste locatie in Halfweg. Bezoek ons op Dokter Baumannplein 13. Mobiele service op aanvraag. Bel/WhatsApp 06 8552 3584."
    />
    <meta
      name="keywords"
      content="autopoetsen Halfweg, car detailing Halfweg, handwas Halfweg, autowas Halfweg, autopoetsservice Halfweg, autopoetsen Amsterdam, interieurreiniging auto, handwas Amsterdam, velgen reinigen Amsterdam, auto schoonmaken Amsterdam, car detailing Amsterdam, autopoetsservice Amsterdam, premium handwas Amsterdam, interieur reinigen auto Amsterdam, auto detailen Amsterdam, professionele autowas Amsterdam"
    />
    <meta name="author" content="Bariq Autocare" />
    <meta name="geo.region" content="NL-NH" />
    <meta name="geo.placename" content="Halfweg" />
    <meta name="geo.position" content="52.384485;4.748303" />
    <meta name="ICBM" content="52.384485, 4.748303" />
    <meta name="language" content="Dutch" />
    <meta
      name="google-site-verification"
      content="AF5cPWlskYQoQGL24gwvH9Zt3CRn0WjdmgK_uOQ6md8"
    />

    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website" />
    <meta property="og:site_name" content="Bariq Autocare" />
    <meta property="og:url" content="https://bariqautocare.nl/" />
    <meta
      property="og:title"
      content="Bariq Autocare Halfweg – Premium handwas & car detailing"
    />
    <meta
      property="og:description"
      content="Professionele handwas, velgen, interieur & glas op onze locatie in Halfweg. Bezoek ons op Dokter Baumannplein 13. Di-Zo open. Check je prijs op kenteken."
    />
    <meta
      property="og:image"
      content="https://bariqautocare.nl/B_logo_bg.png"
    />

    <!-- Twitter -->
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:url" content="https://bariqautocare.nl/" />
    <meta
      name="twitter:title"
      content="Bariq Autocare Halfweg – Premium handwas & car detailing"
    />
    <meta
      name="twitter:description"
      content="Vaste locatie op Dokter Baumannplein 13, Halfweg. Professionele handwas, velgen, interieur & glas. Di-Zo open."
    />
    <meta
      name="twitter:image"
      content="https://bariqautocare.nl/B_logo_bg.png"
    />

    <!-- Canonical URL -->
    <link rel="canonical" href="https://bariqautocare.nl/" />
    <link rel="alternate" hreflang="nl" href="https://bariqautocare.nl/" />
    <link rel="alternate" hreflang="x-default" href="https://bariqautocare.nl/" />

    <!-- Critical resource hints -->
    <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link rel="preconnect" href="https://mkbcygfabffxhyotlcgj.supabase.co" />
    <link rel="dns-prefetch" href="https://www.instagram.com" />
    <link rel="dns-prefetch" href="https://www.tiktok.com" />

    <!-- Critical CSS - Loaded as external file to avoid Vite HTML proxy issues -->

    <!-- Preload critical resources -->
    <!-- Note: fetchpriority not supported in Firefox, but harmless -->
    <link rel="preload" as="image" href="/hero-image.webp" type="image/webp">
    
    <!-- Preload critical font files -->
    <link
      rel="preload"
      href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@500;600;700;800&display=swap"
      as="style"
      onload="this.onload=null;this.rel='stylesheet'"
    />
    <noscript>
      <link
        href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@500;600;700;800&display=swap"
        rel="stylesheet"
      />
    </noscript>

    <!-- Built assets (Vite) are included below; remove non-existent /styles/main.css preload/link -->
    <script type="module" crossorigin src="/assets/index-BHbvvyGg.js"></script>
    
    
    
    <link rel="stylesheet" crossorigin href="/assets/index-DX_BoFlG.css">
  
    <link rel="modulepreload" crossorigin href="/assets/animation-vendor-DrasxUUQ.js">
    <link rel="modulepreload" crossorigin href="/assets/charts-vendor-nkQqNBRp.js">
    <link rel="modulepreload" crossorigin href="/assets/react-query-vendor-eBC7LPuI.js">
    </head>
  <body>
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-56Z5Q78P"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->

    <div id="root">
      <!-- Loading spinner shown while React loads -->
      <div class="loading-spinner"></div>
    </div>
    <!-- Ensure preload for hero-image.webp is consumed early:
         add a tiny off-screen eager-loaded img that does not affect layout but uses the same URL -->
    <!-- Preload image (fetchpriority not supported in Firefox, but harmless) -->
    <img src="/hero-image.webp" alt="" aria-hidden="true" loading="eager"
      style="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;padding:0;margin:-1px;">
    <!-- Pre-module script: Set up error tracking BEFORE module loads -->
    <script>
      // Track if app has successfully loaded
      var appLoaded = false;
      var criticalError = null;
      
      // Mark app as loaded when React mounts (this will be set by main.tsx or when root changes)
      // We'll detect this by checking if root.innerHTML is no longer just the spinner
      var checkAppLoaded = setInterval(function() {
        var root = document.getElementById('root');
        if (root && root.children.length > 1 || (root.children.length === 1 && !root.querySelector('.loading-spinner'))) {
          appLoaded = true;
          clearInterval(checkAppLoaded);
        }
      }, 100);
      
      // Stop checking after 10 seconds
      setTimeout(function() {
        clearInterval(checkAppLoaded);
      }, 10000);
      
      // Add comprehensive error handler for critical script loading errors only
      window.addEventListener('error', function(event) {
        var filename = event.filename || event.target?.src || 'unknown';
        
        // Filter out non-critical errors
        // 1. CSP violations (no error/message/filename)
        if (!event.error && !event.message && !event.filename) {
          return;
        }
        
        // 2. Service worker errors (handled separately)
        if (filename.includes('sw.js')) {
          return;
        }
        
        // 3. Analytics/third-party script errors (non-critical)
        if (filename.includes('googletagmanager') || filename.includes('google-analytics') || 
            filename.includes('gtag') || filename.includes('analytics')) {
          console.warn('[HTML] Non-critical script error (analytics):', event.message);
          return;
        }
        
        // 4. Only catch critical main app script errors
        var isMainAppError = filename.includes('main') || 
                            filename.includes('index-') || 
                            (event.target && event.target.tagName === 'SCRIPT' && event.target.type === 'module');
        
        if (isMainAppError) {
          console.error('[HTML] 🚨 Critical script error detected:', {
            message: event.message,
            filename: filename,
            lineno: event.lineno,
            colno: event.colno,
            error: event.error
          });
          
          // Store the error
          criticalError = {
            message: event.message || 'Unknown error',
            filename: filename
          };
          
          // Only show error UI if app hasn't loaded and root still has spinner
          // Wait a bit to see if main.tsx error handler takes over
          setTimeout(function() {
            if (!appLoaded) {
              var root = document.getElementById('root');
              // Only show if root still has spinner (app didn't load)
              if (root && root.querySelector('.loading-spinner')) {
                root.innerHTML = '<div style="min-height:100vh;display:flex;align-items:center;justify-content:center;background:#000;color:#fff;font-family:system-ui;padding:20px;"><div style="text-align:center;max-width:500px;"><h1 style="color:#dc2626;margin-bottom:20px;">JavaScript Error</h1><p style="margin-bottom:20px;">A JavaScript error prevented the app from loading.</p><p style="margin-bottom:20px;font-size:12px;color:#999;">Error: ' + (criticalError.message || 'Unknown error') + '</p><button onclick="window.location.reload()" style="padding:10px 20px;background:#dc2626;color:white;border:none;border-radius:5px;cursor:pointer;">Refresh Page</button></div></div>';
              }
            }
          }, 2000); // Wait 2 seconds to let main.tsx handle it first
        }
      }, true);
      
      // Also catch unhandled rejections (log but don't block unless critical)
      window.addEventListener('unhandledrejection', function(event) {
        console.error('[HTML] 🚨 Unhandled promise rejection:', event.reason);
        // Don't show UI for promise rejections unless they prevent app load
        // Let React error boundaries handle these
      });
    </script>
    
    <!-- Main application module (Vite will replace /src/main.tsx with built file in production) -->
    <!-- Add onerror handler directly on script tag -->
    
    <!-- Post-load check: Verify module executed -->
    <script>
      // Check after a short delay if module executed (only in development)
      if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
        setTimeout(function() {
          console.log('[HTML] 🔍 Module check: If app didn\'t load, check console for errors');
        }, 500);
      }
    </script>
    
    <!-- Fallback: Check if React app loaded after 8 seconds (give more time for slow networks) -->
    <script>
      setTimeout(function() {
        // Don't show timeout error if app already loaded or error already shown
        if (window.appLoaded || document.querySelector('body > div[style*="min-height:100vh"]')) {
          return;
        }
        
        var root = document.getElementById('root');
        var spinner = root && root.querySelector('.loading-spinner');
        // If spinner is still visible and root hasn't been replaced by React, show error
        if (spinner && spinner.parentElement === root && root.children.length === 1) {
          console.error('[HTML] ⚠️ React app did not load after 8 seconds');
          console.error('[HTML] Root element:', root);
          console.error('[HTML] Root children:', root.children.length);
          console.error('[HTML] Check Console tab for JavaScript errors');
          console.error('[HTML] Check Network tab for failed script loads');
          
          // Show user-friendly error only if no other error UI exists
          root.innerHTML = '<div style="min-height:100vh;display:flex;align-items:center;justify-content:center;background:#000;color:#fff;font-family:system-ui;padding:20px;"><div style="text-align:center;max-width:500px;"><h1 style="color:#dc2626;margin-bottom:20px;">Loading Timeout</h1><p style="margin-bottom:20px;">The application is taking longer than expected to load. Please check your internet connection and try again.</p><button onclick="window.location.reload()" style="padding:10px 20px;background:#dc2626;color:white;border:none;border-radius:5px;cursor:pointer;margin-right:10px;">Refresh Page</button><button onclick="console.clear();console.log(\'Console cleared. Check for errors above.\');" style="padding:10px 20px;background:#333;color:white;border:none;border-radius:5px;cursor:pointer;">Clear Console</button></div></div>';
        }
      }, 8000); // Increased to 8 seconds for slow networks
    </script>

    <!-- Defer analytics and GTM until after page load to avoid blocking FCP/LCP -->
    <script>
      (function() {
        function loadAnalyticsAndGTM() {
          // Skip analytics entirely in development to avoid OS trigger warnings
          var isDevelopment = window.location.hostname === 'localhost' || 
                             window.location.hostname === '127.0.0.1' ||
                             window.location.hostname.includes('.local');
          
          if (isDevelopment) {
            // Create a no-op gtag function for development to prevent errors
            window.dataLayer = window.dataLayer || [];
            window.gtag = function() {
              // Silently ignore analytics calls in development
              if (arguments.length > 0 && arguments[0] !== 'config') {
                // Only log non-config calls for debugging if needed
                return;
              }
            };
            return; // Exit early, don't load analytics scripts
          }
          
          try {
            // Load gtag library
            var s = document.createElement('script');
            s.async = true;
            s.src = 'https://www.googletagmanager.com/gtag/js?id=G-MEVNB1FY39';
            document.head.appendChild(s);

            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            window.gtag = gtag;
            
            // Default consent (preserve existing behavior; can be updated by CMP)
            // Use modern API: pass single object instead of deprecated parameters
            gtag('consent', 'default', {
              'ad_storage': 'denied',
              'ad_user_data': 'denied',
              'ad_personalization': 'denied',
              'analytics_storage': 'denied',
              'wait_for_update': 500
            });
            
            // Set configuration options using modern API
            gtag('set', {
              'url_passthrough': true,
              'ads_data_redaction': true
            });
            
            // Initialize GA4 with modern API (single config object)
            var gaConfig = {
              'attribution_reporting_enabled': true,
              'send_page_view': true
            };
            
            // Use modern config API - pass single object with all settings
            gtag('config', 'G-MEVNB1FY39', gaConfig);
            gtag('config', 'AW-17265969255', gaConfig);

            // Load GTM script (moved from head to deferred loader)
            var g = document.createElement('script');
            g.async = true;
            g.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-56Z5Q78P';
            document.head.appendChild(g);
          } catch (e) {
            // Analytics errors should never block the app
            console.warn('[Analytics] Failed to load (non-critical):', e);
          }
        }

        if (document.readyState === 'complete') {
          loadAnalyticsAndGTM();
        } else {
          window.addEventListener('load', loadAnalyticsAndGTM, { once: true });
        }
      })();
    </script>
  </body>
</html>
