1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta name="google-site-verification" content="GaNFJ6b4R7hcCLPSa0CWcbfEdKvayUwodyGNV3osEtY"> 6 <!-- 7 If you are serving your web app in a path other than the root, change the 8 href value below to reflect the base path you are serving from. 9 10 The path provided below has to start and end with a slash "/" in order for 11 it to work correctly. 12 13 For more details: 14 * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base 15 16 This is a placeholder for base href that will be replaced by the value of 17 the `--base-href` argument provided to `flutter build`. 18 --> 19 <base href="/"> 20 21 <meta charset="UTF-8"> 22 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 23 <title>DharmikVibes | NRI, Spiritual Yatra, VIP Darshan & Puja, Flights, Retreat, Events</title> 24 <meta name="description" 25 content="Sacred spiritual yatra & pilgrimage packages with VIP darshan, puja, flights included. Spiritual retreats, events, and vibrant devotee communities for NRI & all seekers."> 26 <meta name="keywords" 27 content="spiritual yatra, NRI pilgrimage, VIP darshan, sacred puja, flight packages, spiritual retreat, devotee events"> 28 <meta name="robots" content="index, follow, max-image-preview:large"> 29 <link rel="canonical" href="https://dharmikvibes.com/"> 30 <link rel="manifest" href="manifest.json"> 31 32 <!-- Open Graph (social sharing + AI/link previews) --> 33 <meta property="og:title" 34 content="DharmikVibes | NRI, Spiritual Yatra, VIP Darshan & Puja, Flights, Retreat, Events"> 35 <meta property="og:description" 36 content="Complete spiritual journey. VIP darshan, sacred puja, pilgrimage flights, retreats & events for NRI and devotees worldwide."> 37 <meta property="og:type" content="website"> 38 <meta property="og:url" content="https://dharmikvibes.com/"> 39 <meta property="og:site_name" content="DharmikVibes"> 40 <meta property="og:locale" content="en_IN"> 41 <meta property="og:image" content="https://dharmikvibes.com/og-dharmikvibes.png"> 42 <meta property="og:image:width" content="1200"> 43 <meta property="og:image:height" content="630"> 44 <meta property="og:image:type" content="image/png"> 45 <meta property="og:image:alt" content="DharmikVibes â Sacred Journeys, Divine Blessings"> 46 47 <!-- Twitter card --> 48 <meta name="twitter:card" content="summary_large_image"> 49 <meta name="twitter:site" content="@DharmikVibes12"> 50 <meta name="twitter:title" 51 content="DharmikVibes | NRI, Spiritual Yatra, VIP Darshan & Puja, Flights, Retreat, Events"> 52 <meta name="twitter:description" 53 content="Complete spiritual journey. VIP darshan, sacred puja, pilgrimage flights, retreats & events for NRI and devotees worldwide."> 54 <meta name="twitter:image" content="https://dharmikvibes.com/og-dharmikvibes.png"> 55 56 <!-- Structured data for Google + AI understanding --> 57
57<script type="application/ld+json"> 58 { 59 "@context": "https://schema.org", 60 "@type": "Organization", 61 "name": "DharmikVibes", 62 "url": "https://dharmikvibes.com/", 63 "logo": "https://dharmikvibes.com/og-dharmikvibes.png", 64 "description": "Spiritual yatra & pilgrimage packages with VIP darshan, puja, flights, retreats and events for NRI and devotees worldwide.", 65 "sameAs": [ 66 "https://www.facebook.com/dharmikvibes12", 67 "https://www.instagram.com/dharmikvibes12/", 68 "https://www.youtube.com/@DharmikVibes12" 69 ], 70 "contactPoint": { 71 "@type": "ContactPoint", 72 "telephone": "+91-9220352244", 73 "contactType": "customer service", 74 "email": "[email protected]", 75 "areaServed": "IN", 76 "availableLanguage": ["en", "hi"] 77 } 78 } 79 </script>
79 80 81 <!-- iOS meta tags & icons --> 82 <meta name="apple-mobile-web-app-capable" content="yes"> 83 <meta name="apple-mobile-web-app-status-bar-style" content="black"> 84 <meta name="apple-mobile-web-app-title" content="DharmikVibes"> 85 <link rel="apple-touch-icon" href="/icons/Icon-512.png"> 86 87 <!-- Favicon --> 88 <link rel="icon" href="/favicon.ico" sizes="any" /> 89 <link rel="icon" type="image/png" sizes="48x48" href="/favicondharmikvibes.png" /> 90 <link rel="icon" type="image/png" sizes="192x192" href="/icons/Icon-192.png" /> 91 92 <!-- Google Maps (async â used by in-app map widgets) --> 93
93<script async defer 94 src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAzjwO_KjdeLFVnRLIRl6XGkNkbqtZyrkQ"></script>
94 95</head> 96 97<body> 98 <noscript> 99 <div style="max-width:720px;margin:2rem auto;padding:0 1.5rem;font-family:system-ui,sans-serif;line-height:1.6;color:#1a1a1a;"> 100 <h1>DharmikVibes</h1> 101 <p>Sacred spiritual yatra and pilgrimage packages with VIP darshan, puja, flights, retreats, and events for NRI and devotees worldwide.</p> 102 <p><strong>Explore:</strong></p> 103 <ul> 104 <li><a href="/home">Home</a></li> 105 <li><a href="/yatras">Yatras</a></li> 106 <li><a href="/pujas">Pujas</a></li> 107 <li><a href="/chadhava">Chadhava</a></li> 108 <li><a href="/flight">Flights</a></li> 109 <li><a href="/event">Events</a></li> 110 <li><a href="/contact-us">Contact Us</a></li> 111 <li><a href="/terms-conditions">Terms & Conditions</a></li> 112 <li><a href="/terms-and-conditions">Terms & Conditions (legacy link)</a></li> 113 <li><a href="/privacy-policy">Privacy Policy</a></li> 114 <li><a href="/partnership">Partnership</a></li> 115 </ul> 116 <p>Contact: <a href="mailto:[email protected]">[email protected]</a> · +91 9220352244</p> 117 </div> 118 </noscript> 119 <!-- 120 F1 deploy cache-bust: @BUILD_ID@ is replaced after `flutter build web` 121 by `dart run tool/stamp_web_build.dart`. Use ?build= (not ?v=) â Flutter's 122 service worker strips ?v= and would keep serving a stale bootstrap. 123 --> 124
124<script> 125 (function () { 126 // F3: inject bootstrap once â a second tag would re-init the engine / CanvasKit. 127 if (globalThis.__dvBootstrapScriptInjected) return; 128 globalThis.__dvBootstrapScriptInjected = true; 129 130 var buildId = '@BUILD_ID@'; 131 // Unstamped template (flutter run / forgot post-build) starts with '@' 132 if (buildId.charAt(0) === '@') { 133 buildId = String(Date.now()); 134 } 135 var s = document.createElement('script'); 136 s.src = 'flutter_bootstrap.js?build=' + encodeURIComponent(buildId); 137 s.async = true; 138 document.body.appendChild(s); 139 })(); 140 </script>
140 141 <!-- F6: defer â checkout is only used on user action, so it must not block first paint --> 142
142<script src="https://checkout.razorpay.com/v1/checkout.js" defer></script>
142 143
143<script> 144 // F1: when a newer service worker is ready, offer reload (guard against loops) 145 (function () { 146 if (!('serviceWorker' in navigator)) return; 147 148 var reloaded = false; 149 // true only if a worker already controlled this page â skip reload on first install 150 var hadControllerOnLoad = Boolean(navigator.serviceWorker.controller); 151 function reloadOnce() { 152 if (reloaded) return; 153 reloaded = true; 154 window.location.reload(); 155 } 156 157 function showUpdateBanner(onReload) { 158 if (document.getElementById('dv-sw-update-banner')) return; 159 var bar = document.createElement('div'); 160 bar.id = 'dv-sw-update-banner'; 161 bar.setAttribute('role', 'status'); 162 bar.style.cssText = [ 163 'position:fixed', 'z-index:2147483647', 'left:0', 'right:0', 'bottom:0', 164 'display:flex', 'align-items:center', 'justify-content:center', 'gap:12px', 165 'flex-wrap:wrap', 'padding:12px 16px', 166 'background:#1B1208', 'color:#F7F0E6', 167 'font:500 14px/1.4 Georgia,"Times New Roman",serif', 168 'box-shadow:0 -4px 24px rgba(0,0,0,.25)' 169 ].join(';'); 170 var msg = document.createElement('span'); 171 msg.textContent = 'A newer version of DharmikVibes is ready.'; 172 var btn = document.createElement('button'); 173 btn.type = 'button'; 174 btn.textContent = 'Refresh'; 175 btn.style.cssText = [ 176 'cursor:pointer', 'border:0', 'border-radius:4px', 177 'padding:8px 14px', 'background:#C45C26', 'color:#fff', 178 'font:600 13px/1.2 system-ui,sans-serif' 179 ].join(';'); 180 btn.addEventListener('click', onReload); 181 bar.appendChild(msg); 182 bar.appendChild(btn); 183 document.body.appendChild(bar); 184 } 185 186 navigator.serviceWorker.ready.then(function (reg) { 187 reg.addEventListener('updatefound', function () { 188 var fresh = reg.installing; 189 if (!fresh) return; 190 fresh.addEventListener('statechange', function () { 191 if (fresh.state === 'installed' && navigator.serviceWorker.controller) { 192 showUpdateBanner(reloadOnce); 193 } 194 }); 195 }); 196 // Proactively check for updates on load and when tab becomes visible 197 try { reg.update(); } catch (e) { } 198 }); 199 200 document.addEventListener('visibilitychange', function () { 201 if (document.visibilityState !== 'visible') return; 202 navigator.serviceWorker.getRegistration().then(function (reg) { 203 if (reg) try { reg.update(); } catch (e) { } 204 }); 205 }); 206 207 navigator.serviceWorker.addEventListener('controllerchange', function () { 208 if (!hadControllerOnLoad) return; 209 reloadOnce(); 210 }); 211 })(); 212 </script>
212 213
213<script> 214 // SEO: per-route canonical + homepage title guard (history hooks, no polling) 215 (function () { 216 var origin = 'https://dharmikvibes.com'; 217 var homeTitle = 'DharmikVibes | NRI, Spiritual Yatra, VIP Darshan & Puja, Flights, Retreat, Events'; 218 219 function normalizePath(pathname) { 220 var p = (pathname || '/').replace(/\/+$/, ''); 221 return p === '' ? '/' : p; 222 } 223 224 function isHomePath(path) { 225 return path === '/' || path === '/home'; 226 } 227 228 function updateCanonical() { 229 var path = normalizePath(window.location.pathname); 230 var href = path === '/' ? origin + '/' : origin + path; 231 var link = document.querySelector('link[rel="canonical"]'); 232 if (!link) { 233 link = document.createElement('link'); 234 link.rel = 'canonical'; 235 document.head.appendChild(link); 236 } 237 link.href = href; 238 var ogUrl = document.querySelector('meta[property="og:url"]'); 239 if (ogUrl) ogUrl.setAttribute('content', href); 240 } 241 242 function forceHomeTitle() { 243 if (isHomePath(normalizePath(window.location.pathname)) && document.title !== homeTitle) { 244 document.title = homeTitle; 245 } 246 } 247 248 function onRouteChange() { 249 updateCanonical(); 250 forceHomeTitle(); 251 } 252 253 updateCanonical(); 254 forceHomeTitle(); 255 256 window.addEventListener('popstate', onRouteChange); 257 258 var _pushState = history.pushState; 259 var _replaceState = history.replaceState; 260 history.pushState = function () { 261 var ret = _pushState.apply(this, arguments); 262 onRouteChange(); 263 return ret; 264 }; 265 history.replaceState = function () { 266 var ret = _replaceState.apply(this, arguments); 267 onRouteChange(); 268 return ret; 269 }; 270 271 try { 272 var t = document.querySelector('title'); 273 if (t) new MutationObserver(forceHomeTitle).observe(t, { childList: true, characterData: true, subtree: true }); 274 } catch (e) { } 275 })(); 276 </script>
276 277 278 <!-- LinkedIn Insight Tag (partner 9648404) --> 279
279<script type="text/javascript"> 280 _linkedin_partner_id = "9648404"; 281 window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || []; 282 window._linkedin_data_partner_ids.push(_linkedin_partner_id); 283 </script>
283 284
284<script type="text/javascript"> 285 (function(l) { 286 if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])}; 287 window.lintrk.q=[]} 288 var s = document.getElementsByTagName("script")[0]; 289 var b = document.createElement("script"); 290 b.type = "text/javascript";b.async = true; 291 b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; 292 s.parentNode.insertBefore(b, s);})(window.lintrk); 293 </script>
293 294 <noscript> 295 <img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=9648404&fmt=gif" /> 296 </noscript> 297<!-- WATI-WIDGET-START --> 298
298<script> 299 var watiUrl = 'https://wati-integration-prod-service.clare.ai/v2/watiWidget.js?27241'; 300 var watiScript = document.createElement('script'); 301 watiScript.type = 'text/javascript'; 302 watiScript.async = true; 303 watiScript.src = watiUrl; 304 var watiOptions = { 305 "enabled": true, 306 "chatButtonSetting": { 307 "backgroundColor": "#e68600", 308 "ctaText": "", 309 "borderRadius": "25", 310 "marginLeft": "0", 311 "marginRight": "20", 312 "marginBottom": "20", 313 "ctaIconWATI": false, 314 "position": "right" 315 }, 316 "brandSetting": { 317 "brandName": "DharmikVibes", 318 "brandSubTitle": "", 319 "brandImg": "https://dharmikvibes.com/wati-brand.jpg", 320 "welcomeText": "Hello Devotee!\nHow can we help you?", 321 "messageText": "Hello, %0AI am looking for help {{page_link}}", 322 "backgroundColor": "#e68600", 323 "ctaText": "Connect With Us", 324 "borderRadius": "25", 325 "autoShow": false, 326 "phoneNumber": "919220352244" 327 } 328 }; 329 watiScript.onload = function () { 330 CreateWhatsappChatWidget(watiOptions); 331 }; 332 var watiFirst = document.getElementsByTagName('script')[0]; 333 watiFirst.parentNode.insertBefore(watiScript, watiFirst); 334 </script>
334 335<!-- WATI-WIDGET-END --> 336 337<!-- GA4-START -->
vendor: 66 bytes, lines 337-338
337 338 <script async src="https://www.googletagmanager.com/gtag/js?id=
338G-RXP2EVYJYB
vendor: 14 bytes, lines 338-339
338"></script> 339
339<script> 340 window.dataLayer = window.dataLayer || []; 341 function gtag() { dataLayer.push(arguments); } 342 gtag('js', new Date()); 343 // send_page_view stays FALSE, but not for the reason originally recorded. 344 // 345 // The old note claimed "the Flutter app's built-in Firebase Analytics SDK 346 // already reports to this same stream". That was verified false on 347 // 2026-07-28: window.firebase is undefined on the web build and no 348 // app-measurement script loads â only fbevents.js and gtag/js. GA4 was 349 // therefore recording ZERO page_views for this site, which is precisely why 350 // every GA4-imported conversion in Google Ads 458-245-2992 read "No recent 351 // conversions". 352 // 353 // It remains false here because dv-tracking.html now sends page_view 354 // explicitly, on load AND on every SPA route change, with the correct 355 // per-route title and location. Letting gtag also auto-send would duplicate 356 // the initial hit and would still miss every in-app navigation. 357 gtag('config', 'G-RXP2EVYJYB', { send_page_view: false }); 358 // WhatsApp (WATI widget) click tracking 359 document.addEventListener('click', function (e) { 360 var t = e.target; 361 if (!t || !t.closest) return; 362 var el = t.closest('[class*="wa-widget"], [class*="wa-chat"], [id*="wati"], [id*="whatsapp-chat"]'); 363 if (el) { 364 gtag('event', 'whatsapp_click', { 365 event_category: 'engagement', 366 page_path: window.location.pathname 367 }); 368 } 369 }, true); 370 </script>
370 371<!-- GA4-END --> 372 373<!-- META-PIXEL-START 374 2026-07-28 â Meta Pixel for dharmikvibes.com. 375 376 Until now this site carried GA4 and nothing else: no Meta pixel and no 377 Google Ads conversion tag, so every rupee spent driving traffic here was 378 unattributable and unoptimisable on both platforms. 379 380 Pixel 3604943802982913 ("DharmikVibes") is the PageView-only pixel on 381 business 1044471472623812. Pixel 1159103103060127 is deliberately NOT used 382 here â that one carries the Shopify funnel (ViewContent/AddToCart/ 383 InitiateCheckout) for dharmikvibes.store, and mixing the two would corrupt 384 both attribution models. 385 386 Scope: base pixel + a single PageView on load. This is a Flutter SPA, so 387 in-app route changes do NOT fire further PageViews â deeper events 388 (ViewContent / InitiateCheckout / Purchase off the Razorpay success 389 handler) need Dart-side JS interop and a rebuild, tracked separately. 390 391 Injected by /opt/dv-brand-icons/restore.sh (dv-favicon-guard, every 10 min) 392 because a dev deploy does `rm -rf /var/www/flutter_web_2/*` and would 393 otherwise wipe this. Marker-guarded: never double-injects. -->
394<script>
vendor: 483 bytes, lines 394-403
394 395 !function (f, b, e, v, n, t, s) { 396 if (f.fbq) return; n = f.fbq = function () { 397 n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) 398 }; 399 if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; 400 n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; 401 s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s) 402 }(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js'); 403 fbq('init', '
4033604943802982913
vendor: 32 bytes, lines 403-404
403'); 404 fbq('track', 'PageView');
405</script>
405 406<noscript><img height="1" width="1" style="display:none" alt="" 407 src="https://www.facebook.com/tr?id=3604943802982913&ev=PageView&noscript=1" /></noscript> 408<!-- META-PIXEL-END --> 409 410<!-- DV-TRACKING-START 411 Generated by /opt/dv-brand-icons/build_tracking.py from ssr/manifest.json â 412 do not hand-edit; regenerate instead. 413 414 Injected AFTER the GA4 and Meta Pixel snippets so gtag/fbq already exist. 415 Fixes three measured problems (2026-07-28): 416 * GA4 had send_page_view:false citing a Firebase SDK that is NOT on the 417 web build (window.firebase undefined) â so GA4 recorded no page_views 418 at all, and every GA4-imported Google Ads conversion read "No recent 419 conversions". 420 * Meta Pixel fired one PageView per visit; SPA route changes fired none. 421 * Flutter overwrites document.title with "DharmikVibes Web" after boot, 422 so post-boot events carried the wrong title. 423 No Purchase/AddToCart here â those need Razorpay hooks and real prices from 424 Dart, and inventing them would corrupt attribution. -->
425<script> 426 (function () { 427 var ROUTES = {"/about-us":{"t":"About DharmikVibes","c":"about-us","x":1},"/cancellation-refund-policy":{"t":"Cancellation & Refund Policy | DharmikVibes","c":"cancellation-refund-policy","x":1},"/careers":{"t":"Careers at DharmikVibes","c":"careers","x":1},"/chadhavaPage":{"t":"Chadhava & Temple Offerings Online | DharmikVibes","c":"chadhava","x":0},"/contact-us":{"t":"Contact DharmikVibes","c":"contact-us","x":1},"/cookie-policy":{"t":"Cookie Policy | DharmikVibes","c":"cookie-policy","x":1},"/dharmik-special/genz":{"t":"Spiritual Journeys for Young Seekers | DharmikVibes","c":"segment","x":0},"/dharmik-special/nri":{"t":"Pilgrimage for NRI Devotees | DharmikVibes","c":"segment","x":0},"/dharmik-special/senior":{"t":"Pilgrimage for Senior Devotees | DharmikVibes","c":"segment","x":0},"/dharmik-special/women":{"t":"Pilgrimage for Women Devotees | DharmikVibes","c":"segment","x":0},"/divine-elite":{"t":"Divine Elite â Premium Spiritual Concierge | DharmikVibes","c":"concierge","x":0},"/event":{"t":"Spiritual Events & Gatherings | DharmikVibes","c":"event","x":0},"/flight":{"t":"Pilgrimage Flights & Air Travel | DharmikVibes","c":"flight","x":0},"/healing":{"t":"Traditional Healing & Wellbeing | DharmikVibes","c":"wellness","x":0},"/investors":{"t":"Investors | DharmikVibes","c":"investors","x":1},"/live-darshan":{"t":"Live Darshan from Sacred Temples | DharmikVibes","c":"darshan","x":0},"/media":{"t":"Media & Press | DharmikVibes","c":"media","x":1},"/meditation":{"t":"Guided Meditation Programs | DharmikVibes","c":"wellness","x":0},"/meet-greet":{"t":"Meet & Greet Services for Devotees | DharmikVibes","c":"concierge","x":0},"/our-teams":{"t":"Our Team | DharmikVibes","c":"our-teams","x":1},"/partnership":{"t":"Partner with DharmikVibes","c":"partnership","x":0},"/payment-security":{"t":"Payment Security | DharmikVibes","c":"payment-security","x":1},"/privacy-policy":{"t":"Privacy Policy | DharmikVibes","c":"privacy-policy","x":1},"/pujas":{"t":"Online Puja Booking & Sacred Rituals | DharmikVibes","c":"puja","x":0},"/retreats":{"t":"Spiritual Retreats & Sadhana Programs | DharmikVibes","c":"retreat","x":0},"/staysHomePage":{"t":"Pilgrimage Stays & Accommodation | DharmikVibes","c":"stay","x":0},"/support-centre":{"t":"Support Centre | DharmikVibes","c":"support-centre","x":1},"/terms-conditions":{"t":"Terms & Conditions | DharmikVibes","c":"terms-conditions","x":1},"/yatras":{"t":"Spiritual Yatras & Pilgrimage Journeys | DharmikVibes","c":"yatra","x":0},"/yatras/temple-discovery":{"t":"Temple Discovery â Explore Sacred Sites | DharmikVibes","c":"yatra","x":0},"/yoga":{"t":"Yoga Programs & Practice | DharmikVibes","c":"wellness","x":0},"/":{"t":"DharmikVibes","c":"home","x":1},"/home":{"t":"DharmikVibes","c":"home","x":1}}; 428 var ORIGIN = 'https://dharmikvibes.com'; 429 430 function norm(p) { 431 p = (p || '/').replace(/\/+$/, ''); 432 return p === '' ? '/' : p; 433 } 434 function metaFor(path) { 435 return ROUTES[path] || { t: document.title || 'DharmikVibes', c: 'other', x: 1 }; 436 } 437 438 // Flutter replaces document.title with "DharmikVibes Web" once it boots. 439 // Restore the real per-route title: it is what the devotee sees in the tab, 440 // and what GA4 reports as page_title on every later event. Extends the 441 // homepage-only guard that already ships in index.html. 442 function fixTitle(m) { 443 if (m && m.t && document.title !== m.t) { 444 try { document.title = m.t; } catch (e) { } 445 } 446 } 447 448 function track(path, initial) { 449 var m = metaFor(path); 450 fixTitle(m); 451 var url = ORIGIN + (path === '/' ? '/' : path); 452 453 if (typeof gtag === 'function') { 454 gtag('event', 'page_view', { 455 page_location: url, 456 page_path: path, 457 page_title: m.t 458 }); 459 if (!m.x) { 460 // Custom rather than GA4's `view_item`: that expects an items[] array 461 // with a price, which this site cannot supply yet (no catalog API). 462 gtag('event', 'service_view', { 463 service_category: m.c, 464 service_name: m.t, 465 page_path: path 466 }); 467 } 468 } 469 470 if (typeof fbq === 'function') { 471 // The base pixel already fired one PageView on load â don't duplicate it. 472 if (!initial) fbq('track', 'PageView'); 473 if (!m.x) { 474 fbq('track', 'ViewContent', { 475 content_name: m.t, 476 content_category: m.c, 477 content_type: 'product' 478 }); 479 } 480 } 481 } 482 483 var last = norm(location.pathname); 484 track(last, true); 485 486 // Flutter routes without firing popstate reliably, so poll â the same 487 // approach the canonical guard in index.html already uses. 400ms matches it. 488 setInterval(function () { 489 var p = norm(location.pathname); 490 if (p !== last) { last = p; track(p, false); } 491 else { fixTitle(metaFor(p)); } 492 }, 400); 493 494 // Lead signals. These are the real conversion actions on this site â there 495 // is no checkout to measure yet â so they are what Google Ads should 496 // optimise toward once campaigns resume. Mark generate_lead as a conversion 497 // in GA4 for it to reach Ads through the existing import. 498 document.addEventListener('click', function (e) { 499 var t = e.target; 500 if (!t || !t.closest) return; 501 502 var wa = t.closest('[class*="wa-widget"], [class*="wa-chat"], [id*="wati"], [id*="whatsapp-chat"]'); 503 var tel = t.closest('a[href^="tel:"]'); 504 var mail = t.closest('a[href^="mailto:"]'); 505 if (!wa && !tel && !mail) return; 506 507 var method = wa ? 'whatsapp' : (tel ? 'phone' : 'email'); 508 var path = norm(location.pathname); 509 if (typeof gtag === 'function') { 510 gtag('event', 'generate_lead', { 511 lead_method: method, 512 service_category: metaFor(path).c, 513 page_path: path 514 }); 515 } 516 if (typeof fbq === 'function') { 517 fbq('track', 'Contact', { 518 content_category: metaFor(path).c, 519 contact_method: method 520 }); 521 } 522 }, true); 523 })(); 524</script>
524 525<!-- DV-TRACKING-END --> 526 527<!-- DV-SPLASH-START --> 528 <div id="dv-splash" aria-hidden="true"> 529 <div class="dv-splash-inner"> 530 <img src="/wati-brand.jpg" alt="" width="88" height="88" class="dv-splash-logo"> 531 <div class="dv-splash-name">Dharmik<span>Vibes</span></div> 532 <div class="dv-splash-tag">Sacred journeys, divine blessings</div> 533 <div class="dv-splash-bar"><i></i></div> 534 </div> 535 </div> 536 <style> 537 #dv-splash { 538 position: fixed; inset: 0; z-index: 2147483000; 539 display: flex; align-items: center; justify-content: center; 540 background: linear-gradient(180deg, #fffdf9 0%, #fdf3e3 100%); 541 opacity: 1; transition: opacity .45s ease; 542 } 543 .dv-splash-inner { text-align: center; font-family: system-ui, -apple-system, "Segoe UI", sans-serif; } 544 .dv-splash-logo { 545 border-radius: 22px; box-shadow: 0 6px 24px rgba(230, 134, 0, .22); 546 animation: dvPulse 1.8s ease-in-out infinite; 547 } 548 .dv-splash-name { 549 margin-top: 16px; font-size: 26px; font-weight: 700; color: #b35f00; letter-spacing: .2px; 550 } 551 .dv-splash-name span { color: #2b2b2b; } 552 .dv-splash-tag { margin-top: 4px; font-size: 13px; color: #8a7a63; } 553 .dv-splash-bar { 554 margin: 22px auto 0; width: 140px; height: 3px; border-radius: 3px; 555 background: rgba(230, 134, 0, .18); overflow: hidden; position: relative; 556 } 557 .dv-splash-bar i { 558 position: absolute; left: -40%; top: 0; height: 100%; width: 40%; 559 border-radius: 3px; background: #e68600; 560 animation: dvSlide 1.15s cubic-bezier(.4, 0, .6, 1) infinite; 561 } 562 @keyframes dvPulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.045); } } 563 @keyframes dvSlide { 0% { left: -40%; } 100% { left: 100%; } } 564 @media (prefers-reduced-motion: reduce) { 565 .dv-splash-logo, .dv-splash-bar i { animation: none; } 566 } 567 </style> 568
568<script> 569 (function () { 570 var hidden = false; 571 function dvHideSplash() { 572 if (hidden) return; 573 hidden = true; 574 var s = document.getElementById('dv-splash'); 575 if (!s) return; 576 s.style.opacity = '0'; 577 setTimeout(function () { if (s.parentNode) s.parentNode.removeChild(s); }, 500); 578 } 579 window.addEventListener('flutter-first-frame', dvHideSplash); 580 // Fallbacks: flutter-view appearing in DOM, or hard 12s cap 581 var mo = new MutationObserver(function () { 582 if (document.querySelector('flutter-view, flt-glass-pane')) { 583 setTimeout(dvHideSplash, 300); 584 mo.disconnect(); 585 } 586 }); 587 mo.observe(document.body, { childList: true, subtree: true }); 588 setTimeout(dvHideSplash, 12000); 589 })(); 590 </script>
590 591<!-- DV-SPLASH-END --> 592 593</body> 594 595</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.