1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8"> 6 7 <!-- SEO Meta Tags --> 8 <meta name="description" content="Affordable monthly and annual health plans designed to support mobility, wellness, and preventive care with simple, accessible movement programs."> 9 <meta name="author" content="Fun and Moving"> 10 <meta name="robots" content="index, follow"> <meta name="language" content="English"> 11 <meta name="revisit-after" content="7 days"> 12 <!-- Open Graph Meta Tags --> 13 <meta property="og:image" content="https://www.funandmoving.com/assets/og-default.png?v=1305"> 14 <meta property="og:image:width" content="1200"> 15 <meta property="og:image:height" content="630"> 16 <meta property="og:title" content="Fun And Moving | Pricing"> 17 <meta property="og:description" content="Affordable monthly and annual health plans designed to support mobility, wellness, and preventive care with simple, accessible movement programs."> 18 <meta property="og:type" content="website"> 19 <meta property="og:url" content="https://www.funandmoving.com/about/pricing"> 20 <meta property="og:site_name" content="Fun and Moving"> 21 <!-- Twitter Card Meta Tags --> 22 <meta name="twitter:card" content="summary_large_image"> 23 <meta name="twitter:title" content="Fun And Moving | Pricing"> 24 <meta name="twitter:description" content="Affordable monthly and annual health plans designed to support mobility, wellness, and preventive care with simple, accessible movement programs."> 25 <meta name="twitter:image" content="https://www.funandmoving.com/assets/og-default.png?v=1305"> 26 27 <!-- i-phone and safari meta --> 28 <meta name="apple-mobile-web-app-capable" content="yes"> 29 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> 30 31 <!-- Canonical URL --> 32 <!-- <link rel="canonical" href="https://funandmoving.com"> --> 33 <link rel="canonical" href="https://www.funandmoving.com/about/pricing"> 34 <link rel="alternate" hreflang="en" href="https://www.funandmoving.com/about/pricing"> 35 <link rel="alternate" hreflang="x-default" href="https://www.funandmoving.com/about/pricing"> 36 37 <!-- To manage seo notes schema --> 38
38<script type="application/ld+json"> 39 { 40 "@context": "https://schema.org", 41 "@graph": [ 42 { 43 "@type": "Organization", 44 "@id": "https://www.funandmoving.com#organization", 45 "name": "Fun and Moving", 46 "url": "https://www.funandmoving.com", 47 "logo": "https://www.funandmoving.com/admin_assets/images/landing_page_icons/website_logo_1684327944_FAM_Logo_White_Circle_(2).png", 48 "description": "Affordable monthly and annual health plans designed to support mobility, wellness, and preventive care with simple, accessible movement programs.", 49 "address": { 50 "@type": "PostalAddress", 51 "streetAddress": "4221 Manzanita Avenue", 52 "addressLocality": "Carmichael", 53 "addressRegion": "CA", 54 "postalCode": "95608", 55 "addressCountry": "US" 56 }, 57 "contactPoint": [ 58 { 59 "@type": "ContactPoint", 60 "contactType": "customer support", 61 "areaServed": [ 62 { 63 "@type": "Place", 64 "name": "Worldwide" 65 } 66 ], 67 "availableLanguage": [ 68 "en", 69 "es", 70 "zh-cn", 71 "ko", 72 "fr", 73 "vi", 74 "hi", 75 "ru", 76 "de", 77 "am", 78 "pt", 79 "eu", 80 "bn" 81 ], 82 "telephone": "916.342.1044", 83 "email": "[email protected]" 84 } 85 ], 86 "sameAs": [ 87 "https://www.youtube.com/@funandmovingFAM", 88 "https://www.tiktok.com/@funandmoving?lang=en-GB", 89 "https://www.facebook.com/funandmovingFAM/", 90 "https://instagram.com/funandmoving?utm_medium=copy_link", 91 "https://www.linkedin.com/company/fun-and-moving/mycompany/?viewAsMember=true" 92 ] 93 }, 94 { 95 "@type": "WebSite", 96 "@id": "https://www.funandmoving.com#website", 97 "name": "Fun and Moving", 98 "url": "https://www.funandmoving.com", 99 "publisher": { 100 "@id": "https://www.funandmoving.com#organization" 101 } 102 }, 103 { 104 "@type": "WebPage", 105 "@id": "https://www.funandmoving.com/about/pricing#webpage", 106 "url": "https://www.funandmoving.com/about/pricing", 107 "name": "Pricing", 108 "description": "Affordable monthly and annual health plans designed to support mobility, wellness, and preventive care with simple, accessible movement programs.", 109 "datePublished": "2026-01-23 03:04:23", 110 "dateModified": "2026-01-23 03:04:23", 111 "isPartOf": { 112 "@id": "https://www.funandmoving.com#website" 113 }, 114 "publisher": { 115 "@id": "https://www.funandmoving.com#organization" 116 } 117 }, 118 { 119 "@type": "Service", 120 "@id": "https://www.funandmoving.com#service", 121 "name": "Pricing", 122 "provider": { 123 "@type": "Organization", 124 "@id": "https://www.funandmoving.com#organization" 125 }, 126 "description": "Affordable monthly and annual health plans designed to support mobility, wellness, and preventive care with simple, accessible movement programs.", 127 "serviceType": [ 128 "Digital Therapeutic Movement Programs", 129 "Accessible Wellness and Rehabilitation Routines", 130 "Doctor-Approved Exercise Guidance" 131 ], 132 "areaServed": [ 133 { 134 "@type": "Place", 135 "name": "Worldwide" 136 } 137 ] 138 } 139 ] 140} </script>
140 141 142 <title>Fun And Moving | Pricing</title> 143 <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 144 <META HTTP-EQUIV="Expires" CONTENT="-1"> 145 <!-- <meta name="description" content=""> --> 146 <meta name="keywords" content="HTML,CSS,XML,JavaScript"> 147 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 148 <!-- <meta name="viewport" content="width=device-width, initial-scale=1"> --> 149 <link type="image/x-icon" rel="shortcut icon" href="https://www.funandmoving.com/assets/images/favicon/favicon.ico" /> 150 151 <!-- Add By Trainer --> 152 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/font-awesome.min.css"> 153 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/firasans-font.css"> 154 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/custom-fonts.css?v=1.2"> 155 <!-- Add By Trainer --> 156 157 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/bootstrap.min.css"> 158 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/style.css"> 159 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/responsive.css"> 160 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/amit-chauhan-custom.css"> 161 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/amit-chauhan-custom_v2.css"> 162 163 <!-- Added By Sahejad --> 164 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/amit-chauhan-custom.css"> 165 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/amit-chauhan-custom_v2.css"> 166 <!-- Added By Sahejad --> 167 168 <link rel="stylesheet" href="https://www.funandmoving.com/loginassets/css/smita_style.css"> 169 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/jquery.bxslider.css"> 170 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/owl.carousel.css"> 171 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/owl.theme.default.css"> 172 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/progressbar.css"> 173 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/animate.css"> 174 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/flatpickr.min.css"> 175 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/lobibox.min.css" /> 176 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/jquery-ui.css"> 177 178 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/homepage_slider.css"> 179 180 <!-----------Bootstrap Date Picker------------------> 181 <link rel="stylesheet" href="https://www.funandmoving.com/admin_assets/vendor/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"> 182 <!-----------Bootstrap Date Range Picker------------------> 183 <link rel="stylesheet" type="text/css" href="https://www.funandmoving.com/admin_assets/js/daterangepicker/daterangepicker.css" /> 184 185 <!-------Google Fit----------> 186 <link rel="stylesheet" href="https://www.funandmoving.com/assets/google_fit/css/all.css"> 187 <link rel="stylesheet" href="https://www.funandmoving.com/assets/google_fit/css/style.css"> 188 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/google_fit_custom_responsive.css"> 189 190 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/kirti-custom.css"> 191 192 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/trainer-bio.css"> 193 194 <!-- Change version number on each update --> 195 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/fam-child_v2.css?v=5.3.3" type="text/css"> 196 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/fam-child_sec_v2.css?v=5.3.3" type="text/css"> 197 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/fam-child_sec_redesign.css?v=5.3.3" type="text/css"> 198 199 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/language.css?v=5.3.3" type="text/css"> 200 201 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/fam-c
201hild.css?v=5.3.3" type="text/css"> 202 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/fam-child_sec.css?v=5.3.3" type="text/css"> 203 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/fam-child_v2.css?v=5.3.3" type="text/css"> 204 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/fam-child_sec_v2.css?v=5.3.3" type="text/css"> 205 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/fam-child_sec_redesign_v2.css?v=5.3.3" type="text/css"> 206 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/header-redesign.css?v=5.3.3" type="text/css"> 207 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/header-redesign-responsive.css?v=5.3.3" type="text/css"> 208 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/login.css?v=5.3.3" type="text/css"> 209 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/routinelist-new-design.css?v=5.3.3" type="text/css"> 210 211 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-fam-child.css?v=5.3.3" type="text/css"> 212 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-fam-child-responsive.css?v=5.3.3" type="text/css"> 213 214 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-pages-css/new-profile.css?v=5.3.3" type="text/css"> 215 216 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/language.css?v=5.3.3" type="text/css"> 217 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-landing-page-css/language_v2.css?v=5.3.3" type="text/css"> 218 219 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/new-language_v2.css?v=5.3.3" type="text/css"> 220 221 <!----------> 222 223 <!-- Driver.js CSS --> 224 <link rel="stylesheet" href="https://www.funandmoving.com/assets/js/driverjs/css/driver.css"/> 225 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/tour-guide.css?v=5.3.3" type="text/css"> 226 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/cookiesconsent.css?v=5.3.3" type="text/css"> 227 <style> 228 .tabs_admin_one .tabs_admin_one_dropdown.profile-dropdown-redesign { 229 /* --profile-surface: rgba(255, 255, 255, 0.95); */ 230 --profile-surface: rgba(255, 255, 255, 1); 231 --profile-surface-soft: rgba(247, 249, 251, 0.6); 232 --profile-surface-muted: rgba(242, 244, 246, 0.5); 233 --profile-surface-header: rgba(244, 243, 255, 0.65); 234 --profile-surface-footer: rgba(245, 247, 251, 0.7); 235 --profile-outline: rgba(231, 233, 240, 0.5); 236 --profile-outline-strong: rgba(223, 227, 237, 0.6); 237 --profile-primary: #3525cd; 238 --profile-primary-soft: #4f46e5; 239 --profile-text: #191c1e; 240 --profile-text-soft: #505f76; 241 width: 440px; 242 max-width: calc(100vw - 24px); 243 max-height: calc(100vh - 120px); 244 right: 0; 245 left: auto; 246 /* border-radius: 20px; */ 247 /* border-radius: 20px 4px 4px 20px; */ 248 border-radius: 4px; 249 padding: 16px 18px; 250 border: 1px solid var(--profile-outline); 251 box-shadow: 0 22px 48px rgba(23, 31, 56, 0.12), 0 6px 16px rgba(53, 37, 205, 0.06); 252 background: var(--profile-surface); 253 backdrop-filter: blur(20px) saturate(180%); 254 -webkit-backdrop-filter: blur(20px) saturate(180%); 255 overflow: hidden; 256 overflow-y: auto; 257 overscroll-behavior: contain; 258 } 259 260 .profile-dropdown-redesign__handle { 261 display: none; 262 } 263 264 .profile-dropdown-redesign * { 265 box-sizing: border-box; 266 } 267 268 .profile-dropdown-redesign a::after { 269 content: none !important; 270 } 271 272 .tabs_admin_one .tabs_admin_one_dropdown.profile-dropdown-redesign::-webkit-scrollbar { 273 width: 6px; 274 } 275 276 .tabs_admin_one .tabs_admin_one_dropdown.profile-dropdown-redesign::-webkit-scrollbar-thumb {
277 background: #d7dbe6; 278 border-radius: 999px; 279 } 280 281 .profile-dropdown-redesign__top { 282 display: flex; 283 align-items: center; 284 gap: 14px; 285 margin: -16px -18px 14px; 286 padding: 22px 24px 22px; 287 background: linear-gradient(135deg, rgba(246, 245, 255, 0.4) 0%, rgba(247, 248, 255, 0.2) 100%); 288 /* border-radius: 20px 20px 0 0; */ 289 /* border-radius: 20px 0 0 0; */ 290 border-radius: 4px 0 0 0; 291 border-bottom: 1px solid rgba(236, 236, 245, 0.3); 292 position: relative; 293 overflow: hidden; 294 } 295 296 .profile-dropdown-redesign__top::before { 297 content: ''; 298 position: absolute; 299 top: -40%; 300 right: -15%; 301 width: 80%; 302 height: 180%; 303 background: radial-gradient(circle at center, rgba(255, 0, 128, 0.12) 0%, rgba(124, 58, 237, 0.08) 40%, transparent 70%); 304 filter: blur(35px); 305 z-index: 0; 306 pointer-events: none; 307 transform: rotate(-15deg); 308 } 309 310 .profile-dropdown-redesign__top-avatar, 311 .profile-dropdown-redesign__top-name { 312 position: relative; 313 z-index: 1; 314 } 315 316 .profile-dropdown-redesign__top-avatar { 317 width: 54px; 318 height: 54px; 319 border-radius: 12px; 320 overflow: hidden; 321 flex: 0 0 54px; 322 display: flex; 323 align-items: center; 324 justify-content: center; 325 font-weight: 700; 326 font-size: 21px; 327 color: var(--profile-text); 328 box-shadow: 0 8px 20px rgba(17, 24, 39, 0.12); 329 border: 1px solid rgba(255, 255, 255, 0.4); 330 } 331 332 .profile-dropdown-redesign__top-avatar img { 333 width: 100%; 334 height: 100%; 335 object-fit: cover; 336 } 337 338 .profile-dropdown-redesign__top-name { 339 font-size: 22px; 340 line-height: 1.15; 341 font-weight: 700; 342 color: #252b3d; 343 margin: 0; 344 letter-spacing: -0.01em; 345 word-break: break-word; 346 } 347 348 .profile-dropdown-redesign__label { 349 font-size: 11px; 350 letter-spacing: 2.8px; 351 text-transform: uppercase; 352 font-weight: 700; 353 color: #586884; 354 /* margin-bottom: 10px; */ 355 } 356 357 .profile-dropdown-redesign__profiles-section { 358 margin-bottom: 10px; 359 } 360 361 .profile-dropdown-redesign__profiles { 362 display: flex; 363 align-items: stretch; 364 gap: 10px; 365 overflow: hidden; 366 padding: 2px 1px 0; 367 margin-bottom: 0; 368 } 369 370 .profile-dropdown-redesign__profiles-pagination { 371 display: none; 372 align-items: center; 373 justify-content: center; 374 gap: 8px; 375 margin-top: 10px; 376 } 377 378 .profile-dropdown-redesign__profiles-pagination.is-visible { 379 display: flex; 380 } 381 382 .profile-dropdown-redesign__profiles.is-animating .profile-dropdown-redesign__profile-card[style*="display: flex"], 383 .profile-dropdown-redesign__profiles.is-animating .profile-dropdown-redesign__profile-card[style=""], 384 .profile-dropdown-redesign__profiles.is-animating .profile-dropdown-redesign__profile-card:not([style]) { 385 animation: profileDropdownSlideIn 0.28s ease; 386 } 387 388 @keyframes profileDropdownSlideIn { 389 from { 390 opacity: 0; 391 transform: translateX(14px); 392 } 393 394 to { 395 opacity: 1; 396 transform: translateX(0); 397 } 398 } 399 400 .profile-dropdown-redesign__profiles-dots { 401 display: flex; 402 align-items: center; 403 justify-content: center; 404 gap: 8px; 405 } 406 407 .profile-dropdown-redesign__profiles-dot { 408 /* width: 10px; 409 height: 10px; */ 410 width: 8px; 411 height: 8px; 412 border: 0; 413 border-radius: 999px; 414 background: rgba(80, 95, 118, 0.28); 415 display: inline-flex; 416 align-items: center; 417 justify-content: center; 418 padding: 0; 419 transition: all 0.2s ease; 420 } 421 422 .profile-dropdown-redesign__profiles-dot:hover { 423 /* background: rgba(79, 70, 229, 0.45); */ 424 transform: scale(1.1); 425 } 426 427 .profile-dropdown-redesign__profiles-dot.is-active { 428 /* width: 26px; */ 429 width: 12px; 430 height: 12px; 431 /* background: var(--profile-primary); */ 432 background: #b1b1b1; 433 } 434 435 .profile-dropdown-redesign__profiles-dot:focus { 436 outline: none; 437 box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.18); 438 } 439 440 .profile-dropdown-redesign__profile-card { 441 min-width: 86px; 442 border-radius: 16px; 443 background: transparent; 444 border: 1px solid transparent; 445 text-decoration: none !important; 446 color: #31384b !important; 447 padding: 6px 4px 2px; 448 text-align: center; 449 display: flex; 450 flex-direction: column; 451 align-items: center; 452 gap: 5px; 453 transition: all 0.2s ease; 454 } 455 456 .profile-dropdown-redesign__profile-card:not(.is-active) { 457 opacity: 1;
458 /* filter: grayscale(100%); */ 459 } 460 461 .profile-dropdown-redesign__profile-card:hover { 462 background: rgba(17, 24, 39, 0.1) !important; 463 opacity: 1; 464 transform: translateY(-2px) !important; 465 } 466 467 .profile-dropdown-redesign__profile-card.is-active { 468 background: transparent; 469 box-shadow: none; 470 opacity: 1; 471 display: flex; 472 width: auto; 473 padding: 6px 4px 2px; 474 /* border-bottom: 1px solid var(--text-black); 475 font-weight: 500; 476 transition: all 0.3s ease; 477 font-size: 16px; */ 478 } 479 480 /** Added By Sahejad 24/04/2026 Add Profile Menu **/ 481 .profile-dropdown-redesign__profiles .add_profile-button { 482 /* padding: 6px 4px 2px; 483 min-width: 86px; 484 display: flex; 485 align-items: center; 486 justify-content: center; */ 487 488 489 /* padding: 8px 16px; 490 min-width: 86px; 491 filter: grayscale(0%); 492 gap: 0; */ 493 } 494 495 /* .profile-dropdown-redesign__profiles .add_profile-button .add_profile-button_inner { 496 position: relative; 497 width: 46px; 498 height: 46px; 499 border-radius: 14px; 500 color: #0f172a; 501 background-color: #8bc34a; 502 border: 2px solid rgba(255, 255, 255, 0.95); 503 box-shadow: 0 8px 20px rgba(17, 24, 39, 0.12); 504 transition: all 0.2s ease; 505 display: flex; 506 align-items: center; 507 justify-content: center; 508 text-decoration: none !important; 509 flex: 0 0 auto; 510 } */ 511 512 /* .profile-dropdown-redesign__profiles .add_profile-button .add_profile-button_inner:hover { 513 color: #0f172a; 514 background-color: #ffffff; 515 transform: translateY(-2px); 516 } 517 518 .profile-dropdown-redesign__profiles .add_profile-button .add_profile-button_inner .add_profile-button_text { 519 display: none; 520 position: absolute; 521 bottom: -42px; 522 left: 50%; 523 transform: translateX(-50%); 524 color: #fff; 525 background-color: #111827; 526 padding: 5px 10px; 527 border-radius: 6px; 528 white-space: nowrap; 529 font-weight: 500; 530 z-index: 5; 531 } 532 533 .profile-dropdown-redesign__profiles .add_profile-button .add_profile-button_inner:hover .add_profile-button_text { 534 display: block; 535 } */ 536 537 .add_profile-button_inner_header { 538 min-width: 86px; 539 border-radius: 16px; 540 text-align: center; 541 filter: grayscale(0%) !important; 542 } 543 544 .add_profile-button_inner_header:hover {
545 background: rgba(17, 24, 39, 0.1) !important; 546 } 547 548 .add_profile-button_inner_header .profile-dropdown-redesign__profile-avatar { 549 /* background-color: #8bc34a; 550 border: 2px solid rgba(255, 255, 255, 0.95); 551 box-shadow: 0 8px 20px rgba(17, 24, 39, 0.12); */ 552 553 background-color: #f2f4f6 !important; 554 border: 2px dashed #c7c4d8; 555 box-shadow: none; 556 } 557 558 .add_profile-button_inner_header .profile-dropdown-redesign__profile-avatar .fa-plus { 559 color: #505f76; 560 } 561 /** Added By Sahejad 24/04/2026 Add Profile Menu **/ 562 563 .profile-dropdown-redesign__profile-avatar { 564 width: 46px; 565 height: 46px; 566 border-radius: 14px; 567 margin: 0 auto; 568 display: flex; 569 align-items: center; 570 justify-content: center; 571 font-weight: 700; 572 font-size: 16px; 573 color: #0f172a; 574 position: relative; 575 box-shadow: inset 0 0 0 1px rgba(199, 196, 216, 0.4); 576 background-color: #b1b1b1 !important; 577 } 578 579 .profile-dropdown-redesign__profile-card.is-active .profile-dropdown-redesign__profile-avatar::after { 580 content: ''; 581 width: 12px; 582 height: 12px; 583 border-radius: 50%; 584 background: var(--profile-primary-soft); 585 border: 2px solid #ffffff; 586 position: absolute; 587 right: -3px; 588 bottom: -3px; 589 box-shadow: 0 0 0 1px rgba(79, 70, 229, 0.22); 590 } 591 592 .profile-dropdown-redesign__profile-card.is-active .profile-dropdown-redesign__profile-avatar { 593 box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px var(--profile-primary), inset 0 0 0 1px rgba(15, 23, 42, 0.08); 594 } 595 596 .profile-dropdown-redesign__profile-name { 597 display: block; 598 width: 100%; 599 max-width: 100%; 600 font-size: 12px; 601 font-weight: 500; 602 text-transform: none; 603 letter-spacing: 0; 604 color: #727888; 605 white-space: nowrap; 606 overflow: hidden; 607 text-overflow: ellipsis; 608 } 609 610 .profile-dropdown-redesign__profile-card.is-active .profile-dropdown-redesign__profile-name { 611 font-weight: 700; 612 color: var(--profile-primary); 613 } 614 615 .profile-dropdown-redesign__divider { 616 border-top: 1px solid #eef0f5; 617 margin: 8px -18px 12px; 618 } 619 620 .profile-dropdown-redesign__settings { 621 list-style: none; 622 padding: 0; 623 margin: 0; 624 } 625 626 .profile-dropdown-redesign__settings li { 627 margin: 0; 628 padding: 4px 0; 629 } 630 631 .profile-dropdown-redesign__settings li + li { 632 border-top: 0; 633 } 634 635 .profile-dropdown-redesign__settings-link { 636 display: flex; 637 align-items: center; 638 justify-content: flex-start; 639 gap: 12px; 640 border-radius: 12px; 641 padding: 8px 6px; 642 text-decoration: none !important; 643 color: #171c2f !important; 644 transition: background-color 0.2s ease; 645 } 646 647 .profile-dropdown-redesign__settings-link:hover { 648 background: rgba(17, 24, 39, 0.08) !important; 649 transform: none !important; 650 } 651 652 .profile-dropdown-redesign__settings-link:hover .profile-dropdown-redesign__settings-icon { 653 background: #ffffff; 654 box-shadow: 0 4px 10px rgba(0,0,0,0.05); 655 color: var(--profile-primary); 656 } 657 658 .profile-dropdown-redesign__settings-left { 659 display: flex; 660 align-items: center; 661 gap: 10px; 662 min-width: 0; 663 width: 100%; 664 } 665 666 .profile-dropdown-redesign__settings-icon { 667 width: 38px; 668 height: 38px; 669 border-radius: 10px; 670 background: rgba(246, 247, 251, 0.7); 671 display: inline-flex; 672 align-items: center; 673 justify-content: center; 674 color: #5f708b; 675 font-size: 15px; 676 flex: 0 0 38px; 677 } 678 679 .profile-dropdown-redesign__settings-icon i { 680 font-size: 15px; 681 } 682 683 .profile-dropdown-redesign__settings-text { 684 display: block; 685 font-size: 14px; 686 font-weight: 700; 687 line-height: 1.15; 688 color: #232938; 689 white-space: nowrap; 690 overflow: hidden; 691 text-overflow: ellipsis; 692 max-width: 100%; 693 } 694 695 .profile-dropdown-redesign__settings-text[data-desc]:not
695([data-desc=""])::after { 696 content: attr(data-desc); 697 display: block; 698 margin-top: 2px; 699 font-size: 11px; 700 font-weight: 500; 701 line-height: 1.18; 702 color: #2f3547; 703 text-transform: none; 704 letter-spacing: 0; 705 white-space: nowrap; 706 overflow: hidden; 707 text-overflow: ellipsis; 708 } 709 710 .profile-dropdown-redesign__logout { 711 margin: 12px -18px -16px; 712 border-top: 1px solid rgba(238, 240, 245, 0.4); 713 background: rgba(244, 247, 251, 0.7); 714 padding: 12px 24px; 715 border-radius: 0 0 20px 20px; 716 } 717 718 .profile-dropdown-redesign__logout a { 719 display: inline-flex; 720 align-items: center; 721 justify-content: flex-start; 722 gap: 10px; 723 padding: 6px 0; 724 width: auto; 725 font-size: 14px; 726 color: #e32b20 !important; 727 text-decoration: none !important; 728 font-weight: 700; 729 transform: none !important; 730 background: transparent !important; 731 } 732 733 .profile-dropdown-redesign__logout-icon { 734 width: 24px; 735 height: 24px; 736 border-radius: 6px; 737 background: transparent; 738 display: inline-flex; 739 align-items: center; 740 justify-content: center; 741 color: #e32b20; 742 font-size: 18px; 743 flex: 0 0 24px; 744 } 745 746 .profile-dropdown-redesign__logout a:hover { 747 transform: none !important; 748 color: #c72118 !important; 749 background: rgba(227, 43, 32, 0.05) !important; 750 padding-left: 12px; 751 padding-right: 12px; 752 margin-left: -12px; 753 border-radius: 8px; 754 } 755 756 .switch-manage-profile { 757 display: flex; 758 align-items: center; 759 justify-content: space-between; 760 flex-wrap: wrap; 761 margin-bottom: 10px; 762 } 763 764 .switch-manage-profile .switch-manage-profile_link { 765 width: auto; 766 display: inline-block; 767 padding: 0; 768 color: #0000ee; 769 font-size: 11px; 770 letter-spacing: 2.8px; 771 text-transform: uppercase; 772 font-weight: 700; 773 } 774 775 .switch-manage-profile .switch-manage-profile_link:hover { 776 background-color: transparent; 777 transform: translateY(0px); 778 } 779 780 @media (max-width: 567px) { 781 .profile-dropdown-redesign__handle { 782 display: none; 783 } 784 785 .tabs_admin_one .tabs_admin_one_dropdown.profile-dropdown-redesign { 786 position: absolute !important; 787 top: 54px !important; 788 /* right: -45px !important; */ 789 right: -35px !important; 790 left: auto !important; 791 bottom: auto !important; 792 width: calc(100vw - 32px) !important; 793 max-width: 420px !important; 794 min-width: 280px !important; 795 max-height: 80vh !important; 796 /* border-radius: 20px !important; */ 797 padding: 18px 20px !important; 798 border: 1px solid var(--profile-outline) !important; 799 box-shadow: 0 10px 40px rgba(0,0,0,0.15) !important; 800 background: var(--profile-surface) !important; 801 backdrop-filter: blur(20px) saturate(180%) !important; 802 -webkit-backdrop-filter: blur(20px) saturate(180%) !important; 803 margin: 0 !important; 804 z-index: 10001 !important; 805 /* display: block !important; */ 806 } 807 808 .profile-dropdown-redesign__top { 809 margin: -18px -20px 14px; 810 padding: 20px 24px 18px; 811 } 812 813 .profile-dropdown-redesign__top-name { 814 font-size: 18px; 815 } 816 817 .profile-dropdown-redesign__divider { 818 margin: 10px -20px 12px; 819 } 820 821 .profile-dropdown-redesign__logout { 822 margin: 16px -20px -18px; 823 padding: 14px 24px 20px; 824 } 825 826 .profile-dropdown-redesign__profile-card, 827 .add_profile-button_inner_header { 828 /* min-width: 70px; 829 width: 70px; 830 flex: 0 0 70px; */ 831 832 min-width: 31.5%; 833 width: 31.5%; 834 flex: 0 0 31.5%; 835 } 836 837 .profile-dropdown-redesign__profile-card.is-active { 838 /* width: 70px; 839 flex: 0 0 70px; */ 840 841 width: 31.5%; 842 flex: 0 0 31.5%; 843 } 844 845 .profile-dropdown-redesign__profile-card { 846 padding: 8px 4px !important; 847 } 848 849 .profile-dropdown-redesign__settings-text { 850 font-size: 14px; 851 } 852 853 .profile-dropdown-redesign__settings-text[data-desc]:not
853([data-desc=""])::after { 854 font-size: 12px; 855 } 856 857 .profile-dropdown-redesign__logout a, 858 .profile-dropdown-redesign__logout-text { 859 font-size: 14px; 860 } 861 862 .header-lower_redesign .tabs_admin_one .tabs_admin_one_dropdown.profile-dropdown-redesign { 863 right: -45px !important; 864 } 865 866 867 } 868 </style> 869 870 <!-- P W A sections start -- > 871 <!- Manifest --> 872 <link rel="manifest" href="https://www.funandmoving.com/manifest_live.json" /> 873 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 874 <meta name="mobile-web-app-capable" content="yes"> 875 <link rel="apple-touch-icon" href="https://www.funandmoving.com/assets/images/pwa_icon/icon-512x512.png"> 876 <link rel="apple-touch-icon" sizes="57x57" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-57x57.png"> 877 <link rel="apple-touch-icon" sizes="60x60" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-60x60.png"> 878 <link rel="apple-touch-icon" sizes="72x72" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-72x72.png"> 879 <link rel="apple-touch-icon" sizes="76x76" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-76x76.png"> 880 <link rel="apple-touch-icon" sizes="114x114" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-114x114.png"> 881 <link rel="apple-touch-icon" sizes="120x120" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-120x120.png"> 882 <link rel="apple-touch-icon" sizes="144x144" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-144x144.png"> 883 <link rel="apple-touch-icon" sizes="152x152" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-152x152.png"> 884 <link rel="apple-touch-icon" sizes="180x180" href="https://www.funandmoving.com/assets/images/pwa_icon/apple-icon-180x180.png"> 885 <link rel="icon" type="image/png" sizes="192x192" href="https://www.funandmoving.com/assets/images/pwa_icon/android-icon-192x192.png"> 886 <link rel="icon" type="image/png" sizes="32x32" href="https://www.funandmoving.com/assets/images/pwa_icon/favicon-32x32.png"> 887 <link rel="icon" type="image/png" sizes="96x96" href="https://www.funandmoving.com/assets/images/pwa_icon/favicon-96x96.png"> 888 <link rel="icon" type="image/png" sizes="16x16" href="https://www.funandmoving.com/assets/images/pwa_icon/favicon-16x16.png"> 889 890 <meta name="apple-mobile-web-app-status-bar" content="#3367D6"> 891 <meta name="apple-mobile-web-app-capable" content="yes"> 892 893 <meta name="msapplication-TileColor" content="#ffffff"> 894 <meta name="msapplication-TileImage" content="https://www.funandmoving.com/assets/images/favicon/ms-icon-144x144.png"> 895 <meta name="theme-color" content="#3367D6"> 896 <meta name="background-color" content="#3367D6"> 897 <!-- P W A sections end --> 898
898<script src="https://www.funandmoving.com/assets/js/jquery.min.js"></script>
898 899
899<script src="https://www.funandmoving.com/assets/js/us-map/lib/raphael.js"> </script>
899 900 <!--
900<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.js"></script>
900 --> 901 <!--
901<script src="https://www.funandmoving.com/assets/js/jquery_1.6.2/jquery.js"></script>
901 --> 902
902<script src="https://www.funandmoving.com/assets/js/us-map/example/color.jquery.js"></script>
902 903
903<script src="https://www.funandmoving.com/assets/js/us-map/jquery.usmap.js"></script>
903 904 905 <!-----------Chart--------------------> 906 <!--
906<script src="assets/js/chart/highcharts.js"></script>
906 907
907<script src="assets/js/chart/custom_chart.js"></script>
907 908
908<script src="assets/js/chart/no-data-to-display.js"></script>
908 --> 909
909<script src="https://www.funandmoving.com/assets/js/modernizr.custom.js"></script>
909 910
910<script src="https://www.funandmoving.com/assets/js/classie.js"></script>
910 911
911<script src="https://www.funandmoving.com/assets/js/uisearch.js"></script>
911 912
912<script src="https://www.funandmoving.com/assets/js/cropper_resize_image.js"></script>
912 913 914 <!-- Cropper js --> 915 <link rel="stylesheet" href="https://www.funandmoving.com/assets/css/cropper.min.css" type="text/css"> 916
916<script src="https://www.funandmoving.com/assets/js/cropper.min.js"></script>
916 917 918 <style type="text/css"> 919 </style> 920 921 922 <style> 923 /* Partner Portal Highlight */ 924 .partner-portal-item-highlight { 925 background: #E0E3FF !important; /* Periwinkle background */ 926 border: 1px solid #B2B7FF !important; 927 grid-column: 3 !important; 928 grid-row: 2 !important; 929 } 930 .partner-portal-item-highlight .who-serve-icon { 931 background: #CCFF00 !important; /* Fluorescent green icon background */ 932 box-shadow: 0 0 12px rgba(204, 255, 0, 0.6); 933 } 934 .partner-portal-item-highlight .who-serve-title { 935 color: #1a1a1a !important; 936 font-weight: 800 !important; 937 } 938 .partner-portal-item-highlight:hover { 939 background: #D0D4FF !important; 940 } 941 942 @media (max-width: 991px) { 943 .partner-portal-item-highlight { 944 grid-column: auto !important; 945 grid-row: auto !important; 946 } 947 } 948 </style> 949 950</head> 951 952<body class="home-banner body_area"> 953 <div id="cookie-consent-banner" class="cookie-consent-banner is-visible" role="dialog" aria-labelledby="cookie-consent-title" aria-modal="true" > 954 <div class="cookie-consent-banner__inner"> 955 <div class="cookie-consent-banner__main"> 956 <div class="cookie-consent-banner__art" aria-hidden="true"> 957 <svg class="cookie-consent-banner__art-svg" viewBox="0 0 72 72" width="64" height="64" focusable="false"> 958 <circle cx="36" cy="36" r="36" fill="#EEF0FF"/> 959 <path d="M36 12.5c10.2 0 18.5 7.7 18.5 17.2 0 12.4-10.2 22.3-18.5 29.3-8.3-7-18.5-16.9-18.5-29.3C17.5 20.2 25.8 12.5 36 12.5z" fill="#C5C9FF"/> 960 <path d="M36 16.2c8.4 0 15.2 6.3 15.2 14.1 0 10.6-8.6 19.3-15.2 25.4-6.6-6.1-15.2-14.8-15.2-25.4 0-7.8 6.8-14.1 15.2-14.1z" fill="#B2B7FF"/> 961 <path d="M36 28.2c-3.4 0-5.6 2.4-5.4 5.7.2 2.2 1.5 4 3.4 5.1v3.4c0 .7.6 1.3 1.3 1.3h1.4c.7 0 1.3-.6 1.3-1.3v-3.4c1.9-1.1 3.2-2.9 3.4-5.1.2-3.3-2-5.7-5.4-5.7z" fill="#F28C28"/> 962 <circle cx="50.2" cy="44.8" r="12.4" fill="#E7C9A0"/> 963 <path d="M50.2 34.8c5.5 0 10 4.5 10 10 0 .6 0 1.1-.1 1.6-1.7-.7-3.2.4-3.2 2.1 0 1.4-1.2 2.2-2.5 2.2-1.2 0-1.9.9-1.9 1.9 0 1.5-1.4 2.6-3 2.6-5.1-.3-9.3-4.6-9.3-10.4 0-5.5 4.5-10 10-10z" fill="#D9B48A"/> 964 <circle cx="46.6" cy="42.1" r="1.7" fill="#8A5A32"/> 965 <circle cx="53.8" cy="41.4" r="1.3" fill="#8A5A32"/> 966 <circle cx="50.8" cy="47.6" r="1.5" fill="#8A5A32"/> 967 <circle cx="45.8" cy="47.2" r="1.1" fill="#8A5A32"/> 968 </svg> 969 </div> 970 <div class="cookie-consent-banner__copy"> 971 <h2 id="cookie-consent-title" class="cookie-consent-banner__title">We use cookies to improve your experience</h2> 972 <p class="cookie-consent-banner__text">We use cookies to run this site. Optional analytics and marketing cookies are used only if you allow them. Strictly necessary cookies stay on so the site works properly.</p> 973 </div> 974 <div class="cookie-consent-banner__actions"> 975 <button type="button" class="cookie-consent-banner__btn cookie-consent-banner__btn--primary" id="cookie-consent-accept-all">Accept All</button> 976 <button type="button" class="cookie-consent-banner__btn cookie-consent-banner__btn--primary" id="cookie-consent-reject">Reject Non-Essential</button> <!-- cookie-consent-banner__btn--secondary --> 977 <button type="button" class="cookie-consent-banner__btn cookie-consent-banner__btn--secondary" id="cookie-consent-manage">Manage Preferences</button> <!-- cookie-consent-banner__btn--link --> 978 </div> 979 </div> 980 <div class="cookie-consent-banner__prefs" id="cookie-consent-prefs" hidden> 981 <label class="cookie-consent-banner__pref"> 982 <input type="checkbox" checked disabled> 983 <span>Strictly Necessary (always on)</span> 984 </label> 985 <label class="cookie-consent-banner__pref"> 986 <input type="checkbox" id="cookie-consent-analytics" > 987 <span>Analytics cookies</span> 988 </label> 989 <label class="cookie-consent-banner__pref"> 990 <input type="checkbox" id="cookie-consent-targeting" > 991 <span>Targeting / marketing cookies</span> 992 </label> 993 <button type="button" class="cookie-consent-banner__btn cookie-consent-banner__btn--primary" id="cookie-consent-save-prefs">Confirm My Choices</button> 994 </div> 995 </div> 996</div>
997<script> 998window.FAM_COOKIE_CONSENT = { 999 decided: false, 1000 analytics: 0, 1001 targeting: 0, 1002 saveUrl: "https:\/\/www.funandmoving.com\/Home\/ajax_save_cookie_consent", 1003 csrfName: "csrf_token", 1004 csrfHash: "382c49c05713ec02be9b9ec130d2e3b9"}; 1005</script>
1005 1006 <!-- add and update viditor data --> 1007 <!-- add and update viditor data --> 1008 <div class="page-wrapper"> 1009 <!-- Header Start --> 1010 <header class="main-header index-header jj_position_absolute"> 1011 1012 1013 <div class="header-lower logout-header"> 1014 <div class="container-fluid p-relative clearfix"> 1015 1016 <div class="header_logo-menu-btn"> 1017 <div class="logo"> 1018 <a href="https://www.funandmoving.com/" class="pull-left_logo"> 1019 <h2 class="logo_name fam_logo_box"> 1020 <span class="white_text tablethide"><img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/website_logo_1684327944_FAM_Logo_White_Circle_(2).png" alt="fam_header_logo.png" class="fam_header_logo" /></span> 1021 <span class="white_text tabletshow"><img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/website_logo_1684327944_FAM_Logo_White_Circle_(2).png" alt="fam_header_logo.png" class="fam_header_logo" /></span> 1022 </h2> 1023 <span class="header-logo-domain">FunAndMoving</span> 1024 </a> 1025 <!-- <span class="fam_word_title"> 1026 <span class="fam_word_title_responsive_sapn-first">Fun And Moving</span> 1027 </span> --> 1028 </div> 1029 1030 1031 <!-- <a href="javascript:void(0)" class="take-tour_btn" id="take-tour-btn"> 1032 <span class="destop-view">See What's New</span> 1033 <span class="mobile-view">What's New</span> 1034 </a> --> 1035 1036 <div class="clearfix"> 1037 <nav class="main-menu clearfix"> 1038 1039 <div class="navbar-collapse collapse navbar-right clearfix animated navigator main_dropdown_menu" data-wow-delay="0ms" data-wow-duration="800ms"> <!-- Remove By Sahejad landing-pade_new-design --> <!-- collapse --> <!-- Remove By Sahejad landing-pade_new-design --> 1040 <ul class="nav navbar-nav ml-auto loggedout" id="onenav"> 1041 <li class="nav-link nav-about" style="position: inherit;"> 1042 </li> 1043 <li class="nav-link nav-about" style="position: inherit;"> 1044 <a href="https://www.funandmoving.com/Routine/routine_list" class="nav-link" id="all_routines_lnk">Our Routines</a> 1045 </li> 1046 <li class="nav-link nav-about" style="position: inherit;"> 1047 1048 <!-- Add By Sahejad landing-pade_new-design --> 1049 <div class="dropdown about-menu_redesign" id="about-menu"> 1050 <a href="javascript:void(0);" id="about-button" class="nav-link about-menu" aria-haspopup="true" aria-expanded="false" type="button" aria-controls="about-dropdown"> 1051 About <svg class="caret" viewBox="0 0 20 20" aria-hidden="true" focusable="false"> 1052 <path d="M5 8l5 5 5-5H5z" /> 1053 </svg> 1054 </a> 1055 1056 <ul id="about-dropdown" class="dropdown-menu about_us_li" role="menu" aria-label="About submenu"> <!-- absolute about_us_li_hide top-full left-0 mt-2 w-64 bg-white text-gray-900 font-semibold rounded-lg shadow-lg ring-1 ring-black ring-opacity-10 opacity-0 pointer-events-none transform scale-95 transition-all duration-300 origin-top-left max-h-72 overflow-y-auto dropdown-scroll --> 1057 <!-- Old code here. --> 1058 1059 <li> 1060 <a href="https://www.funandmoving.com/about/about-us" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1061 About Us </a> 1062 </li> 1063 <li> 1064 <a href="https://www.funandmoving.com/about/why-us" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1065 Why Us? </a> 1066 </li> 1067 <li> 1068 <a href="https://www.funandmoving.com/about/who-benefits" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1069 Who Benefits? </a> 1070 </li> 1071 <li> 1072 <a href="https://www.funandmoving.com/about/faq" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1073 Frequently Asked Questions (FAQs) </a> 1074 </li> 1075 <li> 1076 <a href="https://www.funandmoving.com/about/founder-thoughts" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1077 Founder Thoughts </a> 1078 </li> 1079 <li> 1080 <a href="https://www.funandmoving.com/about/specific-science-articles" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1081 Articles on Health </a> 1082 </li> 1083 <li> 1084 <a href="https://www.funandmoving.com/about/charity" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1085 Our Giving </a> 1086 </li> 1087 <li> 1088 <a href="https://meetings.hubspot.com/chris3626" target="_blank" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1089 Request Demo </a> 1090 </li> 1091 <li> 1092 <a href="https://www.funandmoving.com/about/our-partners" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1093 Our Partners </a> 1094 </li> 1095 <li> 1096 <a href="https://www.funandmoving.com/about/pricing" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1097 Pricing </a> 1098 </li> 1099 <li> 1100 <a href="https://www.funandmoving.com/about/dr-now-prescriptions" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1101 Dr Now Prescriptions </a> 1102 </li> 1103 <li> 1104 <a href="https://www.funandmoving.com/about/quick-link" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1105 Quick Link </a> 1106 </li> 1107 <li> 1108 <a href="https://www.funandmoving.com/about/kpi-roi-studies" class="block px-5 py-3 hover:bg-blue-50 rounded transition-colors duration-150"> 1109 KPI & ROI Studies </a> 1110 </li> 1111 1112 </ul> 1113 </div> 1114 <!-- Add By Sahejad landing-pade_new-design --> 1115 1116 </li> 1117 <li class="nav-link nav-about nav-who-serve" style="position: inherit;"> 1118 <div class="dropdown nav-who-serve"> 1119 <a href="javascript:void(0)" class="nav-link who-serve-link" aria-haspopup="true" aria-expanded="false"> 1120 Who We Serve <svg class="caret" viewBox="0 0 20 20" aria-hidden="true" focusable="false"> 1121 <path d="M5 8l5 5 5-5H5z" /> 1122 </svg> 1123 </a> 1124 <div class="who-serve-panel" role="menu" aria-label="Who we serve"> 1125 <div class="who-serve-panel-inner"> 1126 <div class="who-serve-panel-inner_content"> 1127 <a href="https://www.funandmoving.com/Home/who_we_serve/governments" class="who-serve-item "> 1128 <div class="who-serve-icon"> 1129
1129 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1776429820_who_we_serve_icon_1776058714_who_we_serve_icon_1775730980_government.png" alt="Who Serve Item Img"> 1130 </div> 1131 <div class="who-serve-text"> 1132 <span class="who-serve-title">Governments, States, and Cities</span> 1133 <p class="who-serve-text">An affordable population health solution centered on prevention over treatment.</p> 1134 </div> 1135 </a> 1136 <a href="https://www.funandmoving.com/Home/who_we_serve/health-plans" class="who-serve-item "> 1137 <div class="who-serve-icon"> 1138 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1776429830_who_we_serve_icon_1776058785_treatment-plan.png" alt="Who Serve Item Img"> 1139 </div> 1140 <div class="who-serve-text"> 1141 <span class="who-serve-title">Health Plans</span> 1142 <p class="who-serve-text">A chronic disease solution designed to improve outcomes and reduce costs for your highest-risk members.</p> 1143 </div> 1144 </a> 1145 <a href="https://www.funandmoving.com/Home/who_we_serve/benefit-brokers" class="who-serve-item "> 1146 <div class="who-serve-icon"> 1147 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1776430001_who_we_serve_icon_1776058854_personal-data.png" alt="Who Serve Item Img"> 1148 </div> 1149 <div class="who-serve-text"> 1150 <span class="who-serve-title">Benefit Brokers</span> 1151 <p class="who-serve-text">A high-ROI benefit that drives engagement, strengthens retention, and extends to employeesâ families at no extra cost.</p> 1152 </div> 1153 </a> 1154 <a href="https://www.funandmoving.com/Home/who_we_serve/employers" class="who-serve-item "> 1155 <div class="who-serve-icon"> 1156 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1776429971_who_we_serve_icon_1776058915_who_we_serve_icon_1775731280_team.png" alt="Who Serve Item Img"> 1157 </div> 1158 <div class="who-serve-text"> 1159 <sp
1159an class="who-serve-title">Employers and Unions</span> 1160 <p class="who-serve-text">Easy to implement, built for daily workplace routines, and delivers preventative health benefits to employees and their families.</p> 1161 </div> 1162 </a> 1163 <a href="https://www.funandmoving.com/Home/reviews" class="who-serve-item "> 1164 <div class="who-serve-icon"> 1165 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1777724225_review.png" alt="Who Serve Item Img"> 1166 </div> 1167 <div class="who-serve-text"> 1168 <span class="who-serve-title">Reviews</span> 1169 <p class="who-serve-text">Testimonials by those who have incorporated FunAndMoving into their programs.</p> 1170 </div> 1171 </a> 1172 <a href="https://www.funandmoving.com/campaign_admin" class="who-serve-item partner-portal-item-highlight"> 1173 <div class="who-serve-icon"> 1174 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1776749292_partners.png" alt="Who Serve Item Img"> 1175 </div> 1176 <div class="who-serve-text"> 1177 <span class="who-serve-title">Partner Portal</span> 1178 <p class="who-serve-text">Analytics Dashboard for at a glance ROI, send invites, monitor progress, send specific routines to individuals.</p> 1179 </div> 1180 </a> 1181 <a href="https://www.funandmoving.com/Home/individual" class="who-serve-item "> 1182 <div class="who-serve-icon"> 1183 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1776429980_who_we_serve_icon_1776058980_user.png" alt="Who Serve Item Img"> 1184 </div> 1185 <div class="who-serve-text"> 1186 <sp
1186an class="who-serve-title">For Individuals</span> 1187 <p class="who-serve-text">Your most valuable long-term health investmentâdesigned to extend healthspan and help you live healthier, longer.</p> 1188 </div> 1189 </a> 1190 <a href="https://www.funandmoving.com/Home/healthcare_providers" class="who-serve-item "> 1191 <div class="who-serve-icon"> 1192 <img src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/who_we_serve_icon_1784284482_Untitled-1.png" alt="Who Serve Item Img"> 1193 </div> 1194 <div class="who-serve-text"> 1195 <span class="who-serve-title">Doctors, Physical Therapists, Occupational Therapists And Caregivers</span> 1196 <p class="who-serve-text"></p> 1197 </div> 1198 </a> 1199 </div> 1200 </div> 1201 </div> 1202 </div> 1203 </li> 1204 1205 <li class="nav-link nav-about"> 1206 <a href="javascript:void(0)" class="take-tour_btn" id="take-tour-btn" style="border: 0; color: rgba(0, 0, 0, 0.8);"> 1207 <span class="destop-view">Platform Features</span> 1208 <!-- <span class="mobile-view">What's New</span> --> 1209 </a> 1210 </li> 1211 <!-- <li class="nav-link"> 1212 <a href="https://www.funandmoving.com/quick-link" class="nav-link">Quick Link</a> 1213 </li> --> 1214 </ul> 1215 </div> 1216 </nav> 1217 </div> 1218 1219 1220 1221 1222 <div class="searchmainbar_customjoinbtn"> 1223 1224 <a href="https://meetings.hubspot.com/chris3626?uuid=a762c682-b25d-40ea-9e59-ae9a2ada3689" class="contact-sales_button contact-sales_button-desktop"> 1225 Contact Sales 1226 </a> 1227 1228 <div class="gtranslate_wrapper translate_language gtranslate_wrapper_redesign"></div> 1229 1230 <!-------------Profile----------------------> 1231 <!-----------------------------------------> 1232 1233 <div class="customJoinBtn clearfix"> 1234 <a href="https://www.funandmoving.com/sign_in" class="custom-login_btn">Login</a> 1235 <a href="https://www.funandmoving.com/register_user" class="text-black_imp custom-join_btn">Join</a> 1236 </div> 1237 1238 <div class="clearfix"></div> 1239 1240 <div class="navbar-header clearfix"> 1241 <button type="button" class="navbar-toggle" aria-label="nav-collaps" data-toggle="collapse" data-target=".navbar-collapse">
1242 <span class="icon-bar"></span> 1243 <span class="icon-bar"></span> 1244 <span class="icon-bar"></span> 1245 </button> 1246 </div> 1247 1248 <div id="sb-search" class="sb-search"> 1249 <form name="search_workout" class="search_workout_form" id="search_workout" action="https://www.funandmoving.com/home/search_video_list" method="post"> 1250 <input type="hidden" name="csrf_token" id="csrf_token_0" value="382c49c05713ec02be9b9ec130d2e3b9"> 1251 <input class="sb-search-input" placeholder="Enter your search term..." type="search" name="search" id="search"> 1252 <input class="sb-search-submit" type="submit" name="" value="submit-button"> <!-- name="submit" value="submit" --> 1253 <span class="sb-icon-search"> 1254 <i class="fa fa-search"></i> 1255 </span> 1256 </form> 1257 </div> 1258 1259 </div> 1260 </div> 1261 1262 </div> 1263 </div> 1264 </header> 1265 1266 <!-- Added By Sahejad 04/08/2026 For Hamburger Menu --> 1267
1267<script> 1268 (function () { 1269 1270 /** Added By Sahejad 24/04/2026 Add Profile Menu **/ 1271 window.getOrCreateAddUpdateProfilePopup = function () { 1272 var existingModal = document.getElementById('addUpdateProfilePopup'); 1273 if (existingModal) { 1274 return existingModal; 1275 } 1276 1277 var modal = document.createElement('div'); 1278 modal.id = 'addUpdateProfilePopup'; 1279 modal.className = 'modal fade px-3'; 1280 modal.style.zIndex = '999999'; 1281 modal.tabIndex = -1; 1282 modal.setAttribute('role', 'dialog'); 1283 modal.setAttribute('aria-labelledby', 'myModalLabel1'); 1284 modal.setAttribute('aria-hidden', 'true'); 1285 document.body.appendChild(modal); 1286 1287 return modal; 1288 }; 1289 1290 if (typeof window.addNewProfilePopup !== 'function') { 1291 window.addNewProfilePopup = function (profile_action, profile_id) { 1292 profile_action = profile_action || ''; 1293 profile_id = profile_id || ''; 1294 1295 var $preloader = $('.preloader-redesign'); 1296 if ($preloader.length) { 1297 $preloader.css('display', 'flex'); 1298 } 1299 1300 $.ajax({
1301 url: 'https://www.funandmoving.com/Profile/addUpdateProfilePopup', 1302 type: 'POST', 1303 dataType: 'html', 1304 data: { 1305 'csrf_token': '382c49c05713ec02be9b9ec130d2e3b9', 1306 profile_action: profile_action, 1307 profile_id: profile_id 1308 }, 1309 cache: false, 1310 success: function (response) { 1311 if ($preloader.length) { 1312 $preloader.css('display', 'none'); 1313 } 1314 1315 var modal = window.getOrCreateAddUpdateProfilePopup(); 1316 $(modal).html(response); 1317 $(modal).modal({ 1318 backdrop: 'static', 1319 keyboard: false 1320 }).modal('show'); 1321 }, 1322 error: function () { 1323 if ($preloader.length) { 1324 $preloader.css('display', 'none'); 1325 } 1326 } 1327 }); 1328 }; 1329 } 1330 1331 window.openAddProfileFromHeader = function (event) { 1332 if (event) { 1333 event.preventDefault(); 1334 } 1335 1336 window.addNewProfilePopup('add_profile'); 1337 return false; 1338 }; 1339 1340 function getProfilePageSize(container) { 1341 if (window.innerWidth <= 567) { 1342 return 3; 1343 } 1344 1345 var explicitPageSize = parseInt(container.getAttribute('data-page-size'), 10); 1346 return explicitPageSize > 0 ? explicitPageSize : 4; 1347 } 1348 1349 function setupProfilePagination() { 1350 var sections = document.querySelectorAll('.profile-dropdown-redesign__profiles-section'); 1351 if (!sections.length) { 1352 return; 1353 } 1354 1355 sections.forEach(function (section) { 1356 var container = section.querySelector('.profile-dropdown-redesign__profiles'); 1357 var pagination = section.querySelector('.profile-dropdown-redesign__profiles-pagination'); 1358 var dotsContainer = section.querySelector('.profile-dropdown-redesign__profiles-dots'); 1359 1360 if (!container || !pagination || !dotsContainer) { 1361 return; 1362 } 1363 1364 var items = Array.prototype.slice.call(container.querySelectorAll('.profile-dropdown-redesign__profile-card')); 1365 if (!items.length) { 1366 pagination.classList.remove('is-visible'); 1367 return; 1368 } 1369 1370 var state = section._profilePaginationState || { page: 0 }; 1371 var pageSize = getProfilePageSize(container); 1372 var pageCount = Math.max(1, Math.ceil(items.length / pageSize)); 1373 1374 if (state.page > pageCount - 1) { 1375 state.page = pageCount - 1; 1376 } 1377 1378 items.forEach(function (item, index) { 1379 var startIndex = state.page * pageSize; 1380 var endIndex = startIndex + pageSize; 1381 item.style.display = (index >= startIndex && index < endIndex) ? '' : 'none'; 1382 }); 1383 1384 pagination.classList.toggle('is-visible', pageCount > 1); 1385 dotsContainer.innerHTML = ''; 1386 1387 for (var pageIndex = 0; pageIndex < pageCount; pageIndex++) { 1388 var dotBtn = document.createElement('button'); 1389 dotBtn.type = 'button'; 1390 dotBtn.className = 'profile-dropdown-redesign__profiles-dot' + (pageIndex === state.page ? ' is-active' : ''); 1391 dotBtn.setAttribute('aria-label', 'Go to profile page ' + (pageIndex + 1)); 1392 dotBtn.setAttribute('aria-pressed', pageIndex === state.page ? 'true' : 'false'); 1393 dotBtn.setAttribute('data-page-index', pageIndex); 1394 dotsContainer.appendChild(dotBtn); 1395 } 1396 1397 if (!section._profilePaginationBound) { 1398 dotsContainer.addEventListener('click', function (event) { 1399 var targetDot = event.target.closest('.profile-dropdown-redesign__profiles-dot'); 1400 if (!targetDot) { 1401 return; 1402 } 1403 1404 var nextPage = parseInt(targetDot.getAttribute('data-page-index'), 10); 1405 if (isNaN(nextPage) || nextPage === state.page) { 1406 return; 1407 } 1408 1409 state.page = nextPage; 1410 container.classList.remove('is-animating'); 1411 void container.offsetWidth; 1412 container.classList.add('is-animating'); 1413 clearTimeout(section._profilePaginationAnimationTimer); 1414 section._profilePaginationAnimationTimer = setTimeout(function () { 1415 container.classList.remove('is-animating'); 1416 }, 320); 1417 1418 setupProfilePagination(); 1419 }); 1420 1421 section._profilePaginationBound = true; 1422 } 1423 1424 if (!section._profilePaginationKeyboardBound) { 1425 dotsContainer.addEventListener('keydown', function (event) { 1426 if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') { 1427 return; 1428 } 1429 1430 event.preventDefault(); 1431 var direction = event.key === 'ArrowRight' ? 1 : -1; 1432 var nextPage = state.page + direction; 1433 if (nextPage >
1433= 0 && nextPage < pageCount) { 1434 state.page = nextPage; 1435 container.classList.remove('is-animating'); 1436 void container.offsetWidth; 1437 container.classList.add('is-animating'); 1438 clearTimeout(section._profilePaginationAnimationTimer); 1439 section._profilePaginationAnimationTimer = setTimeout(function () { 1440 container.classList.remove('is-animating'); 1441 }, 320); 1442 setupProfilePagination(); 1443 } 1444 }); 1445 section._profilePaginationKeyboardBound = true; 1446 } 1447 1448 section._profilePaginationState = state; 1449 }); 1450 } 1451 /** Added By Sahejad 24/04/2026 Add Profile Menu **/ 1452 1453 function isDesktopWidth() { 1454 return window.innerWidth >= 993; 1455 } 1456 1457 function closeMenuCollapse(headerLower) { 1458 var navCollapse = headerLower.querySelector('.navbar-collapse'); 1459 var toggleBtn = headerLower.querySelector('.navbar-toggle'); 1460 if (navCollapse) { 1461 navCollapse.classList.remove('in'); 1462 } 1463 if (toggleBtn) { 1464 toggleBtn.setAttribute('aria-expanded', 'false'); 1465 } 1466 } 1467 1468 function clearHeaderWrapClasses(headerLower) { 1469 var headerLogoMenu = headerLower.querySelector('.header_logo-menu-btn'); 1470 headerLower.classList.remove('nav-wrap-active'); 1471 headerLower.classList.remove('header-overflow-menu-active'); 1472 if (headerLogoMenu) { 1473 headerLogoMenu.classList.remove('header_logo-menu-btn_res'); 1474 headerLogoMenu.classList.remove('header_logo-menu-btn_wrap_menu'); 1475 } 1476 closeMenuCollapse(headerLower); 1477 } 1478 1479 function hasWrappedMenu(navList) { 1480 var firstItem = navList.querySelector('li'); 1481 if (!firstItem) { 1482 return false; 1483 } 1484 1485 var firstTop = firstItem.offsetTop; 1486 var items = navList.children; 1487 1488 for (var i = 0; i < items.length; i++) { 1489 if (items[i].offsetTop > firstTop + 1) { 1490 return true; 1491 } 1492 } 1493 1494 return false; 1495 } 1496 1497 function hasHeaderOverflow(headerLower) { 1498 var headerLogoMenu = headerLower.querySelector('.header_logo-menu-btn'); 1499 var navList = headerLower.querySelector('.navbar-nav'); 1500 var mainMenu = headerLower.querySelector('.main-menu'); 1501 var actionArea = headerLower.querySelector('.searchmainbar_customjoinbtn'); 1502 if (!headerLogoMenu || !navList || !mainMenu || !actionArea) { 1503 return false; 1504 } 1505 1506 var wrapped = hasWrappedMenu(navList); 1507 var navOverflow = navList.scrollWidth > (navList.clientWidth + 1); 1508 var headerOverflow = headerLogoMenu.scrollWidth > (headerLogoMenu.clientWidth + 1); 1509 1510 var mainMenuRect = mainMenu.getBoundingClientRect(); 1511 var actionAreaRect = actionArea.getBoundingClientRect(); 1512 var sectionsOverlap = mainMenuRect.right > (actionAreaRect.left - 12); 1513 1514 return wrapped || navOverflow || headerOverflow || sectionsOverlap; 1515 } 1516 1517 function updateHeaderWrapState() { 1518 var headers = document.querySelectorAll('.main-header .header-lower'); 1519 if (!headers.length) { 1520 return; 1521 } 1522 1523 for (var i = 0; i < headers.length; i++) { 1524 var headerLower = headers[i];
1525 var headerLogoMenu = headerLower.querySelector('.header_logo-menu-btn'); 1526 var toggleBtn = headerLower.querySelector('.navbar-toggle'); 1527 if (!headerLogoMenu || !toggleBtn) { 1528 continue; 1529 } 1530 1531 clearHeaderWrapClasses(headerLower); 1532 1533 if (!isDesktopWidth()) { 1534 continue; 1535 } 1536 1537 var wrapped = hasHeaderOverflow(headerLower); 1538 headerLower.classList.toggle('nav-wrap-active', wrapped); 1539 headerLower.classList.toggle('header-overflow-menu-active', wrapped); 1540 headerLogoMenu.classList.toggle('header_logo-menu-btn_res', wrapped); 1541 headerLogoMenu.classList.toggle('header_logo-menu-btn_wrap_menu', wrapped); 1542 1543 if (!wrapped) { 1544 closeMenuCollapse(headerLower); 1545 } 1546 } 1547 } 1548 1549 function bindOverflowHamburgerToggle() { 1550 document.addEventListener('click', function (event) { 1551 var toggleBtn = event.target.closest('.navbar-toggle'); 1552 if (!toggleBtn) { 1553 return; 1554 } 1555 1556 var headerLogoMenu = toggleBtn.closest('.header_logo-menu-btn'); 1557 if (!headerLogoMenu || !headerLogoMenu.classList.contains('header_logo-menu-btn_wrap_menu')) { 1558 return; 1559 } 1560 1561 var headerLower = toggleBtn.closest('.header-lower'); 1562 var navCollapse = headerLower ? headerLower.querySelector('.navbar-collapse') : null; 1563 if (!navCollapse) { 1564 return; 1565 } 1566 1567 event.preventDefault(); 1568 event.stopImmediatePropagation(); 1569 1570 var willOpen = !navCollapse.classList.contains('in'); 1571 navCollapse.classList.remove('collapsing'); 1572 navCollapse.style.height = ''; 1573 navCollapse.classList.toggle('in', willOpen); 1574 toggleBtn.setAttribute('aria-expanded', willOpen ? 'true' : 'false'); 1575 1576 if (document.body) { 1577 document.body.classList.toggle('open-navbar-toggle', willOpen); 1578 } 1579 }, true); 1580 } 1581 1582 function setupHeaderWrapToggle() { 1583 var rafId = null; 1584 1585 function queueUpdate() { 1586 if (rafId) { 1587 cancelAnimationFrame(rafId); 1588 } 1589 1590 rafId = requestAnimationFrame(function () { 1591 updateHeaderWrapState(); 1592 }); 1593 } 1594 1595 window.updateResponsiveHeaderMenuState = queueUpdate; 1596 1597 window.addEventListener('resize', queueUpdate); 1598 window.addEventListener('resize', setupProfilePagination); 1599 window.addEventListener('orientationchange', queueUpdate); 1600 window.addEventListener('orientationchange', setupProfilePagination); 1601 window.addEventListener('load', queueUpdate); 1602 window.addEventListener('load', setupProfilePagination); 1603 1604 if (document.fonts && document.fonts.ready) { 1605 document.fonts.ready.then(function () { 1606 queueUpdate(); 1607 setupProfilePagination(); 1608 }); 1609 } 1610 1611 bindOverflowHamburgerToggle(); 1612 setupProfilePagination(); 1613 setTimeout(queueUpdate, 0); 1614 setTimeout(setupProfilePagination, 0); 1615 setTimeout(queueUpdate, 300); 1616 setTimeout(setupProfilePagination, 300); 1617 setTimeout(queueUpdate, 1200); 1618 setTimeout(setupProfilePagination, 1200); 1619 } 1620 1621 if (document.readyState === 'loading') { 1622 document.addEventListener('DOMContentLoaded', setupHeaderWrapToggle); 1623 } else { 1624 setupHeaderWrapToggle(); 1625 } 1626 })(); 1627 </script>
1627 1628 <!-- Added By Sahejad 04/08/2026 For Hamburger Menu --> 1629 1630 <!-- Added By Sahejad 04/10/2026 For Who We Serve Menu --> 1631
1631<script> 1632 (function () { 1633 function setupHeaderClickToggles() { 1634 var headerLower = document.querySelector('.header-lower'); 1635 if (!headerLower) return; 1636 1637 var whoServe = headerLower.querySelector('.dropdown.nav-who-serve'); 1638 var whoServeLink = whoServe ? whoServe.querySelector('.who-serve-link') : null; 1639 1640 function closeAll(exceptEl) { 1641 if (whoServe && whoServe !== exceptEl) { 1642 whoServe.classList.remove('open'); 1643 if (whoServeLink) whoServeLink.setAttribute('aria-expanded', 'false'); 1644 } 1645 } 1646 1647 function toggleMenu(targetEl, triggerEl) { 1648 if (!targetEl) return; 1649 var isOpen = targetEl.classList.toggle('open'); 1650 if (triggerEl) triggerEl.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); 1651 if (isOpen) { 1652 closeAll(targetEl); 1653 } 1654 } 1655 1656 if (whoServeLink) { 1657 whoServeLink.addEventListener('click', function (e) { 1658 e.preventDefault(); 1659 toggleMenu(whoServe, whoServeLink); 1660 }); 1661 } 1662 1663 document.addEventListener('click', function (e) { 1664 var target = e.target; 1665 if (whoServe && whoServe.contains(target)) return; 1666 closeAll(null); 1667 }); 1668 1669 document.addEventListener('keydown', function (e) { 1670 if (e.key === 'Escape') { 1671 closeAll(null); 1672 } 1673 }); 1674 } 1675 1676 if (document.readyState === 'loading') { 1677 document.addEventListener('DOMContentLoaded', setupHeaderClickToggles); 1678 } else { 1679 setupHeaderClickToggles(); 1680 } 1681 })(); 1682 </script>
1682 1683 <!-- Added By Sahejad 04/10/2026 For Who We Serve Menu --> 1684 1685 <main class="main"> 1686
1686<script> 1687 new UISearch(document.getElementById('sb-search')); 1688 </script>
1688 1689 1690 1691 <section class="sec-pricing mt-60 "> 1692 1693 <div class="pricing_title"> 1694 <h4>Pricing</h4> 1695 <h1 class="p-0 pricing-title_h1"><p>Ready To Get Healthy</p> 1696</h1> <!-- Ready to Get Started? --> 1697 </div> 1698 1699 <div class="container"> 1700 <div class="pricing"> 1701 <div class="row"> 1702 1703 <div class="col-sm-12 col-lg-8 pr-0 pl-0 margin-r"> 1704 <div class="pricing_inner"> 1705 <div class="pricing_inner_header"> 1706 <div class="pricing_inner_monthly-plan"> 1707 <h2>$10.00 PER MONTH Or $110.00 PER YEAR</h2> 1708 <!-- <h2 class="pricing_inner_monthly-plan_m">$10</h2> --> 1709 </div> 1710 <!-- <div class="pricing_inner_healthy"> 1711 <h5>Ready to Get Healthy</h5> 1712 </div> --> 1713 <div class="pricing_inner_program-includes"> 1714 <h6>program includes:</h6> 1715 <!-- <h6>program includes:</h6> --> 1716 <!-- <h6>month</h6> --> 1717 </div> 1718 </div> 1719 <div class="pricing_inner_content"> 1720 <div class="pricing_inner_content_icon-dec"> 1721 <div class="pricing_inner_content_icon"> 1722 <i class="fa fa-check"></i> 1723 </div> 1724 <div class="pricing_inner_content_dec"> 1725 <h6><p>1500 DR., PT AND OT APPROVED BASIC MOVEMENT, REHABILITATION, AND AGINIG IN PLACE ROUTINES </p> 1726</h6> 1727 </div> 1728 </div> 1729 1730 <!-- <div class="pricing_inner_content_icon-dec"> 1731 <div class="pricing_inner_content_icon"> 1732 <i class="fa fa-check"></i> 1733 </div> 1734 <div class="pricing_inner_content_dec"> 1735 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 1736 </div> 1737 </div> 1738 1739 <div class="pricing_inner_content_icon-dec"> 1740 <div class="pricing_inner_content_icon"> 1741 <i class="fa fa-check"></i> 1742 </div> 1743 <div class="pricing_inner_content_dec"> 1744 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 1745 </div> 1746 </div> 1747 1748 <div class="pricing_inner_content_icon-dec"> 1749 <div class="pricing_inner_content_icon"> 1750 <i class="fa fa-check"></i> 1751 </div> 1752 <div class="pricing_inner_content_dec"> 1753 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 1754 </div> 1755 </div> 1756 1757 <div class="pricing_inner_content_icon-dec"> 1758 <div class="pricing_inner_content_icon"> 1759 <i class="fa fa-check"></i> 1760 </div> 1761 <div class="pricing_inner_content_dec"> 1762 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 1763 </div> 1764 </div> 1765 1766 <div class="pricing_inner_content_icon-dec"> 1767 <div class="pricing_inner_content_icon"> 1768 <i class="fa fa-check"></i> 1769 </div> 1770 <div class="pricing_inner_content_dec"> 1771 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 1772 </div> 1773 </div> 1774 1775 <div class="pricing_inner_content_icon-dec"> 1776 <div class="pricing_inner_content_icon"> 1777 <i class="fa fa-check"></i> 1778 </div> 1779 <div class="pricing_inner_content_dec"> 1780 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 1781 </div> 1782 </div> 1783 1784 <div class="pricing_inner_content_icon-dec"> 1785 <div class="pricing_inner_content_icon"> 1786 <i class="fa fa-check"></i> 1787 </div> 1788 <div class="pricing_inner_content_dec"> 1789 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 1790 </div> 1791 </div> 1792 1793 <div class="pricing_inner_content_icon-dec"> 1794 <div class="pricing_inner_content_icon"> 1795 <i class="fa fa-check"></i> 1796 </div> 1797 <div class="pricing_inner_content_dec"> 1798 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 1799 </div> 1800 </div> 1801 1802 <div class="pricing_inner_content_icon-dec"> 1803 <div class="pricing_inner_content_icon"> 1804 <i class="fa fa-check"></i> 1805 </div> 1806 <div class="pricing_inner_content_dec"> 1807 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 1808 </div> 1809 </div> 1810 1811 <div class="pricing_inner_content_icon-dec"> 1812 <div class="pricing_inner_content_icon"> 1813 <i class="fa fa-check"></i> 1814 </div> 1815 <div class="pricing_inner_content_dec"> 1816 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 1817 </div> 1818 </div> 1819 1820 <div class="pricing_inner_content_icon-dec"> 1821 <div class="pricing_inner_content_icon"> 1822 <i class="fa fa-check"></i> 1823 </div> 1824 <div class="pricing_inner_content_dec"> 1825 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 1826 </div> 1827 </div> --><!-- (OR YOUR LOVED) --> 1828 <div class="pricing_inner_content_icon-dec"> 1829 <div class="pricing_inner_content_icon"> 1830 <i class="fa fa-check"></i> 1831 </div> 1832 <div class="pricing_inner_content_dec"> 1833 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 1834 </div> 1835 </div> 1836 1837 <!-- <div class="pricing_inner_content_icon-dec"> 1838 <div class="pricing_inner_content_icon"> 1839 <i class="fa fa-check"></i> 1840 </div> 1841 <div class="pricing_inner_content_dec"> 1842 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 1843 </div> 1844 </div> 1845 1846 <div class="pricing_inner_content_icon-dec"> 1847 <div class="pricing_inner_content_icon"> 1848 <i class="fa fa-check"></i> 1849 </div> 1850 <div class="pricing_inner_content_dec"> 1851 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 1852 </div> 1853 </div> 1854 1855 <div class="pricing_inner_content_icon-dec"> 1856 <div class="pricing_inner_content_icon"> 1857 <i class="fa fa-check"></i> 1858 </div> 1859 <div class="pricing_inner_content_dec"> 1860 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 1861 </div> 1862 </div> 1863 1864 <div class="pricing_inner_content_icon-dec"> 1865 <div class="pricing_inner_content_icon"> 1866 <i class="fa fa-check"></i> 1867 </div> 1868 <div class="pricing_inner_content_dec"> 1869 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 1870 </div> 1871 </div> 1872 1873 <div class="pricing_inner_content_icon-dec"> 1874 <div class="pricing_inner_content_icon"> 1875 <i class="fa fa-check"></i> 1876 </div> 1877 <div class="pricing_inner_content_dec"> 1878 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 1879 </div> 1880 </div> 1881 1882 <div class="pricing_inner_content_icon-dec"> 1883 <div class="pricing_inner_content_icon"> 1884 <i class="fa fa-check"></i> 1885 </div> 1886 <div class="pricing_inner_content_dec"> 1887 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 1888 </div> 1889 </div> 1890 1891 <div class="pricing_inner_content_icon-dec"> 1892 <div class="pricing_inner_content_icon"> 1893 <i class="fa fa-check"></i> 1894 </div> 1895 <div class="pricing_inner_content_dec"> 1896 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 1897 </div> 1898 </div> 1899 1900 <div class="pricing_inner_content_icon-dec"> 1901 <div class="pricing_inner_content_icon"> 1902 <i class="fa fa-check"></i> 1903 </div> 1904 <div class="pricing_inner_content_dec"> 1905 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 1906 </div> 1907 </div> 1908 1909 <div class="pricing_inner_content_icon-dec"> 1910 <div class="pricing_inner_content_icon"> 1911 <i class="fa fa-check"></i> 1912 </div> 1913 <div class="pricing_inner_content_dec"> 1914 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 1915 </div> 1916 </div> 1917 1918 <div class="pricing_inner_content_icon-dec"> 1919 <div class="pricing_inner_content_icon"> 1920 <i class="fa fa-check"></i> 1921 </div> 1922 <div class="pricing_inner_content_dec"> 1923 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 1924 </div> 1925 </div> 1926 1927 <div class="pricing_inner_content_icon-dec"> 1928 <div class="pricing_inner_content_icon"> 1929 <i class="fa fa-check"></i> 1930 </div> 1931 <div class="pricing_inner_content_dec"> 1932 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 1933 </div> 1934 </div> --><!-- (OR YOUR LOVED) --> 1935 <div class="pricing_inner_content_icon-dec"> 1936 <div class="pricing_inner_content_icon"> 1937 <i class="fa fa-check"></i> 1938 </div> 1939 <div class="pricing_inner_content_dec"> 1940 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 1941 </div> 1942 </div> 1943 1944 <!-- <div class="pricing_inner_content_icon-dec"> 1945 <div class="pricing_inner_content_icon"> 1946 <i class="fa fa-check"></i> 1947 </div> 1948 <div class="pricing_inner_content_dec"> 1949 <h6>R
1949OUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 1950 </div> 1951 </div> 1952 1953 <div class="pricing_inner_content_icon-dec"> 1954 <div class="pricing_inner_content_icon"> 1955 <i class="fa fa-check"></i> 1956 </div> 1957 <div class="pricing_inner_content_dec"> 1958 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 1959 </div> 1960 </div> 1961 1962 <div class="pricing_inner_content_icon-dec"> 1963 <div class="pricing_inner_content_icon"> 1964 <i class="fa fa-check"></i> 1965 </div> 1966 <div class="pricing_inner_content_dec"> 1967 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 1968 </div> 1969 </div> 1970 1971 <div class="pricing_inner_content_icon-dec"> 1972 <div class="pricing_inner_content_icon"> 1973 <i class="fa fa-check"></i> 1974 </div> 1975 <div class="pricing_inner_content_dec"> 1976 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 1977 </div> 1978 </div> 1979 1980 <div class="pricing_inner_content_icon-dec"> 1981 <div class="pricing_inner_content_icon"> 1982 <i class="fa fa-check"></i> 1983 </div> 1984 <div class="pricing_inner_content_dec"> 1985 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 1986 </div> 1987 </div> 1988 1989 <div class="pricing_inner_content_icon-dec"> 1990 <div class="pricing_inner_content_icon"> 1991 <i class="fa fa-check"></i> 1992 </div> 1993 <div class="pricing_inner_content_dec"> 1994 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 1995 </div> 1996 </div> 1997 1998 <div class="pricing_inner_content_icon-dec"> 1999 <div class="pricing_inner_content_icon"> 2000 <i class="fa fa-check"></i> 2001 </div> 2002 <div class="pricing_inner_content_dec"> 2003 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2004 </div> 2005 </div> 2006 2007 <div class="pricing_inner_content_icon-dec"> 2008 <div class="pricing_inner_content_icon"> 2009 <i class="fa fa-check"></i> 2010 </div> 2011 <div class="pricing_inner_content_dec"> 2012 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2013 </div> 2014 </div> 2015 2016 <div class="pricing_inner_content_icon-dec"> 2017 <div class="pricing_inner_content_icon"> 2018 <i class="fa fa-check"></i> 2019 </div> 2020 <div class="pricing_inner_content_dec"> 2021 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2022 </div> 2023 </div> 2024 2025 <div class="pricing_inner_content_icon-dec"> 2026 <div class="pricing_inner_content_icon"> 2027 <i class="fa fa-check"></i> 2028 </div> 2029 <div class="pricing_inner_content_dec"> 2030 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2031 </div> 2032 </div> 2033 2034 <div class="pricing_inner_content_icon-dec"> 2035 <div class="pricing_inner_content_icon"> 2036 <i class="fa fa-check"></i> 2037 </div> 2038 <div class="pricing_inner_content_dec"> 2039 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2040 </div> 2041 </div> --><!-- (OR YOUR LOVED) --> 2042 <div class="pricing_inner_content_icon-dec"> 2043 <div class="pricing_inner_content_icon"> 2044 <i class="fa fa-check"></i> 2045 </div> 2046 <div class="pricing_inner_content_dec"> 2047 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2048 </div> 2049 </div> 2050 2051 <!-- <div class="pricing_inner_content_icon-dec"> 2052 <div class="pricing_inner_content_icon"> 2053 <i class="fa fa-check"></i> 2054 </div> 2055 <div class="pricing_inner_content_dec"> 2056 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2057 </div> 2058 </div> 2059 2060 <div class="pricing_inner_content_icon-dec"> 2061 <div class="pricing_inner_content_icon"> 2062 <i class="fa fa-check"></i> 2063 </div> 2064 <div class="pricing_inner_content_dec"> 2065 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2066 </div> 2067 </div> 2068 2069 <div class="pricing_inner_content_icon-dec"> 2070 <div class="pricing_inner_content_icon"> 2071 <i class="fa fa-check"></i> 2072 </div> 2073 <div class="pricing_inner_content_dec"> 2074 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2075 </div> 2076 </div> 2077 2078 <div class="pricing_inner_content_icon-dec"> 2079 <div class="pricing_inner_content_icon"> 2080 <i class="fa fa-check"></i> 2081 </div> 2082 <div class="pricing_inner_content_dec"> 2083 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2084 </div> 2085 </div> 2086 2087 <div class="pricing_inner_content_icon-dec"> 2088 <div class="pricing_inner_content_icon"> 2089 <i class="fa fa-check"></i> 2090 </div> 2091 <div class="pricing_inner_content_dec"> 2092 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2093 </div> 2094 </div> 2095 2096 <div class="pricing_inner_content_icon-dec"> 2097 <div class="pricing_inner_content_icon"> 2098 <i class="fa fa-check"></i> 2099 </div> 2100 <div class="pricing_inner_content_dec"> 2101 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2102 </div> 2103 </div> 2104 2105 <div class="pricing_inner_content_icon-dec"> 2106 <div class="pricing_inner_content_icon"> 2107 <i class="fa fa-check"></i> 2108 </div> 2109 <div class="pricing_inner_content_dec"> 2110 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2111 </div> 2112 </div> 2113 2114 <div class="pricing_inner_content_icon-dec"> 2115 <div class="pricing_inner_content_icon"> 2116 <i class="fa fa-check"></i> 2117 </div> 2118 <div class="pricing_inner_content_dec"> 2119 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2120 </div> 2121 </div> 2122 2123 <div class="pricing_inner_content_icon-dec"> 2124 <div class="pricing_inner_content_icon"> 2125 <i class="fa fa-check"></i> 2126 </div> 2127 <div class="pricing_inner_content_dec"> 2128 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2129 </div> 2130 </div> 2131 2132 <div class="pricing_inner_content_icon-dec"> 2133 <div class="pricing_inner_content_icon"> 2134 <i class="fa fa-check"></i> 2135 </div> 2136 <div class="pricing_inner_content_dec"> 2137 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2138 </div> 2139 </div> 2140 2141 <div class="pricing_inner_content_icon-dec"> 2142 <div class="pricing_inner_content_icon"> 2143 <i class="fa fa-check"></i> 2144 </div> 2145 <div class="pricing_inner_content_dec"> 2146 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2147 </div> 2148 </div> --><!-- (OR YOUR LOVED) --> 2149 <div class="pricing_inner_content_icon-dec"> 2150 <div class="pricing_inner_content_icon"> 2151 <i class="fa fa-check"></i> 2152 </div> 2153 <div class="pricing_inner_content_dec"> 2154 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2155 </div> 2156 </div> 2157 2158 <!-- <div class="pricing_inner_content_icon-dec"> 2159 <div class="pricing_inner_content_icon"> 2160 <i class="fa fa-check"></i> 2161 </div> 2162 <div class="pricing_inner_content_dec"> 2163 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2164 </div> 2165 </div> 2166 2167 <div class="pricing_inner_content_icon-dec"> 2168 <div class="pricing_inner_content_icon"> 2169 <i class="fa fa-check"></i> 2170 </div> 2171 <div class="pricing_inner_content_dec"> 2172 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2173 </div> 2174 </div> 2175 2176 <div class="pricing_inner_content_icon-dec"> 2177 <div class="pricing_inner_content_icon"> 2178 <i class="fa fa-check"></i> 2179 </div> 2180 <div class="pricing_inner_content_dec"> 2181 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2182 </div> 2183 </div> 2184 2185 <div class="pricing_inner_content_icon-dec"> 2186 <div class="pricing_inner_content_icon"> 2187 <i class="fa fa-check"></i> 2188 </div> 2189 <div class="pricing_inner_content_dec"> 2190 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2191 </div> 2192 </div> 2193 2194 <div class="pricing_inner_content_icon-dec"> 2195 <div class="pricing_inner_content_icon"> 2196 <i class="fa fa-check"></i> 2197 </div> 2198 <div class="pricing_inner_content_dec"> 2199 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2200 </div> 2201 </div> 2202 2203 <div class="pricing_inner_content_icon-dec"> 2204 <div class="pricing_inner_content_icon"> 2205
2205 <i class="fa fa-check"></i> 2206 </div> 2207 <div class="pricing_inner_content_dec"> 2208 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2209 </div> 2210 </div> 2211 2212 <div class="pricing_inner_content_icon-dec"> 2213 <div class="pricing_inner_content_icon"> 2214 <i class="fa fa-check"></i> 2215 </div> 2216 <div class="pricing_inner_content_dec"> 2217 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2218 </div> 2219 </div> 2220 2221 <div class="pricing_inner_content_icon-dec"> 2222 <div class="pricing_inner_content_icon"> 2223 <i class="fa fa-check"></i> 2224 </div> 2225 <div class="pricing_inner_content_dec"> 2226 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2227 </div> 2228 </div> 2229 2230 <div class="pricing_inner_content_icon-dec"> 2231 <div class="pricing_inner_content_icon"> 2232 <i class="fa fa-check"></i> 2233 </div> 2234 <div class="pricing_inner_content_dec"> 2235 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2236 </div> 2237 </div> 2238 2239 <div class="pricing_inner_content_icon-dec"> 2240 <div class="pricing_inner_content_icon"> 2241 <i class="fa fa-check"></i> 2242 </div> 2243 <div class="pricing_inner_content_dec"> 2244 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2245 </div> 2246 </div> 2247 2248 <div class="pricing_inner_content_icon-dec"> 2249 <div class="pricing_inner_content_icon"> 2250 <i class="fa fa-check"></i> 2251 </div> 2252 <div class="pricing_inner_content_dec"> 2253 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2254 </div> 2255 </div> --><!-- (OR YOUR LOVED) --> 2256 <div class="pricing_inner_content_icon-dec"> 2257 <div class="pricing_inner_content_icon"> 2258 <i class="fa fa-check"></i> 2259 </div> 2260 <div class="pricing_inner_content_dec"> 2261 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2262 </div> 2263 </div> 2264 2265 <!-- <div class="pricing_inner_content_icon-dec"> 2266 <div class="pricing_inner_content_icon"> 2267 <i class="fa fa-check"></i> 2268 </div> 2269 <div class="pricing_inner_content_dec"> 2270 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2271 </div> 2272 </div> 2273 2274 <div class="pricing_inner_content_icon-dec"> 2275 <div class="pricing_inner_content_icon"> 2276 <i class="fa fa-check"></i> 2277 </div> 2278 <div class="pricing_inner_content_dec"> 2279 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2280 </div> 2281 </div> 2282 2283 <div class="pricing_inner_content_icon-dec"> 2284 <div class="pricing_inner_content_icon"> 2285 <i class="fa fa-check"></i> 2286 </div> 2287 <div class="pricing_inner_content_dec"> 2288 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2289 </div> 2290 </div> 2291 2292 <div class="pricing_inner_content_icon-dec"> 2293 <div class="pricing_inner_content_icon"> 2294 <i class="fa fa-check"></i> 2295 </div> 2296 <div class="pricing_inner_content_dec"> 2297 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2298 </div> 2299 </div> 2300 2301 <div class="pricing_inner_content_icon-dec"> 2302 <div class="pricing_inner_content_icon"> 2303 <i class="fa fa-check"></i> 2304 </div> 2305 <div class="pricing_inner_content_dec"> 2306 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2307 </div> 2308 </div> 2309 2310 <div class="pricing_inner_content_icon-dec"> 2311 <div class="pricing_inner_content_icon"> 2312 <i class="fa fa-check"></i> 2313 </div> 2314 <div class="pricing_inner_content_dec"> 2315 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2316 </div> 2317 </div> 2318 2319 <div class="pricing_inner_content_icon-dec"> 2320 <div class="pricing_inner_content_icon"> 2321 <i class="fa fa-check"></i> 2322 </div> 2323 <div class="pricing_inner_content_dec"> 2324 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2325 </div> 2326 </div> 2327 2328 <div class="pricing_inner_content_icon-dec"> 2329 <div class="pricing_inner_content_icon"> 2330 <i class="fa fa-check"></i> 2331 </div> 2332 <div class="pricing_inner_content_dec"> 2333 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2334 </div> 2335 </div> 2336 2337 <div class="pricing_inner_content_icon-dec"> 2338 <div class="pricing_inner_content_icon"> 2339 <i class="fa fa-check"></i> 2340 </div> 2341 <div class="pricing_inner_content_dec"> 2342 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2343 </div> 2344 </div> 2345 2346 <div class="pricing_inner_content_icon-dec"> 2347 <div class="pricing_inner_content_icon"> 2348 <i class="fa fa-check"></i> 2349 </div> 2350 <div class="pricing_inner_content_dec"> 2351 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2352 </div> 2353 </div> 2354 2355 <div class="pricing_inner_content_icon-dec"> 2356 <div class="pricing_inner_content_icon"> 2357 <i class="fa fa-check"></i> 2358 </div> 2359 <div class="pricing_inner_content_dec"> 2360 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2361 </div> 2362 </div> --><!-- (OR YOUR LOVED) --> 2363 <div class="pricing_inner_content_icon-dec"> 2364 <div class="pricing_inner_content_icon"> 2365 <i class="fa fa-check"></i> 2366 </div> 2367 <div class="pricing_inner_content_dec"> 2368 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2369 </div> 2370 </div> 2371 2372 <!-- <div class="pricing_inner_content_icon-dec"> 2373 <div class="pricing_inner_content_icon"> 2374 <i class="fa fa-check"></i> 2375 </div> 2376 <div class="pricing_inner_content_dec"> 2377 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2378 </div> 2379 </div> 2380 2381 <div class="pricing_inner_content_icon-dec"> 2382 <div class="pricing_inner_content_icon"> 2383 <i class="fa fa-check"></i> 2384 </div> 2385 <div class="pricing_inner_content_dec"> 2386 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2387 </div> 2388 </div> 2389 2390 <div class="pricing_inner_content_icon-dec"> 2391 <div class="pricing_inner_content_icon"> 2392 <i class="fa fa-check"></i> 2393 </div> 2394 <div class="pricing_inner_content_dec"> 2395 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2396 </div> 2397 </div> 2398 2399 <div class="pricing_inner_content_icon-dec"> 2400 <div class="pricing_inner_content_icon"> 2401 <i class="fa fa-check"></i> 2402 </div> 2403 <div class="pricing_inner_content_dec"> 2404 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2405 </div> 2406 </div> 2407 2408 <div class="pricing_inner_content_icon-dec"> 2409 <div class="pricing_inner_content_icon"> 2410 <i class="fa fa-check"></i> 2411 </div> 2412 <div class="pricing_inner_content_dec"> 2413 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2414 </div> 2415 </div> 2416 2417 <div class="pricing_inner_content_icon-dec"> 2418 <div class="pricing_inner_content_icon"> 2419 <i class="fa fa-check"></i> 2420 </div> 2421 <div class="pricing_inner_content_dec"> 2422 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2423 </div> 2424 </div> 2425 2426 <div class="pricing_inner_content_icon-dec"> 2427 <div class="pricing_inner_content_icon"> 2428 <i class="fa fa-check"></i> 2429 </div> 2430 <div class="pricing_inner_content_dec"> 2431 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2432 </div> 2433 </div> 2434 2435 <div class="pricing_inner_content_icon-dec"> 2436 <div class="pricing_inner_content_icon"> 2437 <i class="fa fa-check"></i> 2438 </div> 2439 <div class="pricing_inner_content_dec"> 2440 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2441 </div> 2442 </div> 2443 2444 <div class="pricing_inner_content_icon-dec"> 2445 <div class="pricing_inner_content_icon"> 2446 <i class="fa fa-check"></i> 2447 </div> 2448 <div class="pricing_inner_content_dec"> 2449 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2450 </div> 2451 </div> 2452 2453 <div class="pricing_inner_content_icon-dec"> 2454 <div class="pricing_inner_content_icon"> 2455 <i class="fa fa-check"></i> 2456 </div> 2457 <div class="pricing_inner_content_dec"> 2458 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2459 </div> 2460 </div> 2461 2462 <div class="pricing_inne
2462r_content_icon-dec"> 2463 <div class="pricing_inner_content_icon"> 2464 <i class="fa fa-check"></i> 2465 </div> 2466 <div class="pricing_inner_content_dec"> 2467 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2468 </div> 2469 </div> --><!-- (OR YOUR LOVED) --> 2470 <div class="pricing_inner_content_icon-dec"> 2471 <div class="pricing_inner_content_icon"> 2472 <i class="fa fa-check"></i> 2473 </div> 2474 <div class="pricing_inner_content_dec"> 2475 <h6> 2476DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2477 </div> 2478 </div> 2479 2480 <!-- <div class="pricing_inner_content_icon-dec"> 2481 <div class="pricing_inner_content_icon"> 2482 <i class="fa fa-check"></i> 2483 </div> 2484 <div class="pricing_inner_content_dec"> 2485 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2486 </div> 2487 </div> 2488 2489 <div class="pricing_inner_content_icon-dec"> 2490 <div class="pricing_inner_content_icon"> 2491 <i class="fa fa-check"></i> 2492 </div> 2493 <div class="pricing_inner_content_dec"> 2494 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2495 </div> 2496 </div> 2497 2498 <div class="pricing_inner_content_icon-dec"> 2499 <div class="pricing_inner_content_icon"> 2500 <i class="fa fa-check"></i> 2501 </div> 2502 <div class="pricing_inner_content_dec"> 2503 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2504 </div> 2505 </div> 2506 2507 <div class="pricing_inner_content_icon-dec"> 2508 <div class="pricing_inner_content_icon"> 2509 <i class="fa fa-check"></i> 2510 </div> 2511 <div class="pricing_inner_content_dec"> 2512 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2513 </div> 2514 </div> 2515 2516 <div class="pricing_inner_content_icon-dec"> 2517 <div class="pricing_inner_content_icon"> 2518 <i class="fa fa-check"></i> 2519 </div> 2520 <div class="pricing_inner_content_dec"> 2521 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2522 </div> 2523 </div> 2524 2525 <div class="pricing_inner_content_icon-dec"> 2526 <div class="pricing_inner_content_icon"> 2527 <i class="fa fa-check"></i> 2528 </div> 2529 <div class="pricing_inner_content_dec"> 2530 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2531 </div> 2532 </div> 2533 2534 <div class="pricing_inner_content_icon-dec"> 2535 <div class="pricing_inner_content_icon"> 2536 <i class="fa fa-check"></i> 2537 </div> 2538 <div class="pricing_inner_content_dec"> 2539 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2540 </div> 2541 </div> 2542 2543 <div class="pricing_inner_content_icon-dec"> 2544 <div class="pricing_inner_content_icon"> 2545 <i class="fa fa-check"></i> 2546 </div> 2547 <div class="pricing_inner_content_dec"> 2548 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2549 </div> 2550 </div> 2551 2552 <div class="pricing_inner_content_icon-dec"> 2553 <div class="pricing_inner_content_icon"> 2554 <i class="fa fa-check"></i> 2555 </div> 2556 <div class="pricing_inner_content_dec"> 2557 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2558 </div> 2559 </div> 2560 2561 <div class="pricing_inner_content_icon-dec"> 2562 <div class="pricing_inner_content_icon"> 2563 <i class="fa fa-check"></i> 2564 </div> 2565 <div class="pricing_inner_content_dec"> 2566 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2567 </div> 2568 </div> 2569 2570 <div class="pricing_inner_content_icon-dec"> 2571 <div class="pricing_inner_content_icon"> 2572 <i class="fa fa-check"></i> 2573 </div> 2574 <div class="pricing_inner_content_dec"> 2575 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2576 </div> 2577 </div> --><!-- (OR YOUR LOVED) --> 2578 <div class="pricing_inner_content_icon-dec"> 2579 <div class="pricing_inner_content_icon"> 2580 <i class="fa fa-check"></i> 2581 </div> 2582 <div class="pricing_inner_content_dec"> 2583 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2584 </div> 2585 </div> 2586 2587 <!-- <div class="pricing_inner_content_icon-dec"> 2588 <div class="pricing_inner_content_icon"> 2589 <i class="fa fa-check"></i> 2590 </div> 2591 <div class="pricing_inner_content_dec"> 2592 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2593 </div> 2594 </div> 2595 2596 <div class="pricing_inner_content_icon-dec"> 2597 <div class="pricing_inner_content_icon"> 2598 <i class="fa fa-check"></i> 2599 </div> 2600 <div class="pricing_inner_content_dec"> 2601 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2602 </div> 2603 </div> 2604 2605 <div class="pricing_inner_content_icon-dec"> 2606 <div class="pricing_inner_content_icon"> 2607 <i class="fa fa-check"></i> 2608 </div> 2609 <div class="pricing_inner_content_dec"> 2610 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2611 </div> 2612 </div> 2613 2614 <div class="pricing_inner_content_icon-dec"> 2615 <div class="pricing_inner_content_icon"> 2616 <i class="fa fa-check"></i> 2617 </div> 2618 <div class="pricing_inner_content_dec"> 2619 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2620 </div> 2621 </div> 2622 2623 <div class="pricing_inner_content_icon-dec"> 2624 <div class="pricing_inner_content_icon"> 2625 <i class="fa fa-check"></i> 2626 </div> 2627 <div class="pricing_inner_content_dec"> 2628 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2629 </div> 2630 </div> 2631 2632 <div class="pricing_inner_content_icon-dec"> 2633 <div class="pricing_inner_content_icon"> 2634 <i class="fa fa-check"></i> 2635 </div> 2636 <div class="pricing_inner_content_dec"> 2637 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2638 </div> 2639 </div> 2640 2641 <div class="pricing_inner_content_icon-dec"> 2642 <div class="pricing_inner_content_icon"> 2643 <i class="fa fa-check"></i> 2644 </div> 2645 <div class="pricing_inner_content_dec"> 2646 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2647 </div> 2648 </div> 2649 2650 <div class="pricing_inner_content_icon-dec"> 2651 <div class="pricing_inner_content_icon"> 2652 <i class="fa fa-check"></i> 2653 </div> 2654 <div class="pricing_inner_content_dec"> 2655 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2656 </div> 2657 </div> 2658 2659 <div class="pricing_inner_content_icon-dec"> 2660 <div class="pricing_inner_content_icon"> 2661 <i class="fa fa-check"></i> 2662 </div> 2663 <div class="pricing_inner_content_dec"> 2664 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2665 </div> 2666 </div> 2667 2668 <div class="pricing_inner_content_icon-dec"> 2669 <div class="pricing_inner_content_icon"> 2670 <i class="fa fa-check"></i> 2671 </div> 2672 <div class="pricing_inner_content_dec"> 2673 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2674 </div> 2675 </div> 2676 2677 <div class="pricing_inner_content_icon-dec"> 2678 <div class="pricing_inner_content_icon"> 2679 <i class="fa fa-check"></i> 2680 </div> 2681 <div class="pricing_inner_content_dec"> 2682 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2683 </div> 2684 </div> --><!-- (OR YOUR LOVED) --> 2685 <div class="pricing_inner_content_icon-dec"> 2686 <div class="pricing_inner_content_icon"> 2687 <i class="fa fa-check"></i> 2688 </div> 2689 <div class="pricing_inner_content_dec"> 2690 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2691 </div> 2692 </div> 2693 2694 <!-- <div class="pricing_inner_content_icon-dec"> 2695 <div class="pricing_inner_content_icon"> 2696 <i class="fa fa-check"></i> 2697 </div> 2698 <div class="pricing_inner_content_dec"> 2699 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2700 </div> 2701 </div> 2702 2703 <div class="pricing_inner_content_icon-dec"> 2704 <div class="pricing_inner_content_icon"> 2705 <i class="fa fa-check"></i> 2706 </div> 2707 <div class="pricing_inner_content_dec"> 2708 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2709 </div> 2710 </div> 2711 2712 <div class="pricing_inner_content_icon-dec"> 2713 <div class="pricing_inner_content_icon"> 2714 <i class="fa fa-check"></i> 2715
2715 </div> 2716 <div class="pricing_inner_content_dec"> 2717 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2718 </div> 2719 </div> 2720 2721 <div class="pricing_inner_content_icon-dec"> 2722 <div class="pricing_inner_content_icon"> 2723 <i class="fa fa-check"></i> 2724 </div> 2725 <div class="pricing_inner_content_dec"> 2726 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2727 </div> 2728 </div> 2729 2730 <div class="pricing_inner_content_icon-dec"> 2731 <div class="pricing_inner_content_icon"> 2732 <i class="fa fa-check"></i> 2733 </div> 2734 <div class="pricing_inner_content_dec"> 2735 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2736 </div> 2737 </div> 2738 2739 <div class="pricing_inner_content_icon-dec"> 2740 <div class="pricing_inner_content_icon"> 2741 <i class="fa fa-check"></i> 2742 </div> 2743 <div class="pricing_inner_content_dec"> 2744 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2745 </div> 2746 </div> 2747 2748 <div class="pricing_inner_content_icon-dec"> 2749 <div class="pricing_inner_content_icon"> 2750 <i class="fa fa-check"></i> 2751 </div> 2752 <div class="pricing_inner_content_dec"> 2753 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2754 </div> 2755 </div> 2756 2757 <div class="pricing_inner_content_icon-dec"> 2758 <div class="pricing_inner_content_icon"> 2759 <i class="fa fa-check"></i> 2760 </div> 2761 <div class="pricing_inner_content_dec"> 2762 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2763 </div> 2764 </div> 2765 2766 <div class="pricing_inner_content_icon-dec"> 2767 <div class="pricing_inner_content_icon"> 2768 <i class="fa fa-check"></i> 2769 </div> 2770 <div class="pricing_inner_content_dec"> 2771 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2772 </div> 2773 </div> 2774 2775 <div class="pricing_inner_content_icon-dec"> 2776 <div class="pricing_inner_content_icon"> 2777 <i class="fa fa-check"></i> 2778 </div> 2779 <div class="pricing_inner_content_dec"> 2780 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2781 </div> 2782 </div> 2783 2784 <div class="pricing_inner_content_icon-dec"> 2785 <div class="pricing_inner_content_icon"> 2786 <i class="fa fa-check"></i> 2787 </div> 2788 <div class="pricing_inner_content_dec"> 2789 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2790 </div> 2791 </div> --><!-- (OR YOUR LOVED) --> 2792 <div class="pricing_inner_content_icon-dec"> 2793 <div class="pricing_inner_content_icon"> 2794 <i class="fa fa-check"></i> 2795 </div> 2796 <div class="pricing_inner_content_dec"> 2797 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2798 </div> 2799 </div> 2800 2801 <!-- <div class="pricing_inner_content_icon-dec"> 2802 <div class="pricing_inner_content_icon"> 2803 <i class="fa fa-check"></i> 2804 </div> 2805 <div class="pricing_inner_content_dec"> 2806 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2807 </div> 2808 </div> 2809 2810 <div class="pricing_inner_content_icon-dec"> 2811 <div class="pricing_inner_content_icon"> 2812 <i class="fa fa-check"></i> 2813 </div> 2814 <div class="pricing_inner_content_dec"> 2815 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2816 </div> 2817 </div> 2818 2819 <div class="pricing_inner_content_icon-dec"> 2820 <div class="pricing_inner_content_icon"> 2821 <i class="fa fa-check"></i> 2822 </div> 2823 <div class="pricing_inner_content_dec"> 2824 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2825 </div> 2826 </div> 2827 2828 <div class="pricing_inner_content_icon-dec"> 2829 <div class="pricing_inner_content_icon"> 2830 <i class="fa fa-check"></i> 2831 </div> 2832 <div class="pricing_inner_content_dec"> 2833 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2834 </div> 2835 </div> 2836 2837 <div class="pricing_inner_content_icon-dec"> 2838 <div class="pricing_inner_content_icon"> 2839 <i class="fa fa-check"></i> 2840 </div> 2841 <div class="pricing_inner_content_dec"> 2842 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2843 </div> 2844 </div> 2845 2846 <div class="pricing_inner_content_icon-dec"> 2847 <div class="pricing_inner_content_icon"> 2848 <i class="fa fa-check"></i> 2849 </div> 2850 <div class="pricing_inner_content_dec"> 2851 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2852 </div> 2853 </div> 2854 2855 <div class="pricing_inner_content_icon-dec"> 2856 <div class="pricing_inner_content_icon"> 2857 <i class="fa fa-check"></i> 2858 </div> 2859 <div class="pricing_inner_content_dec"> 2860 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2861 </div> 2862 </div> 2863 2864 <div class="pricing_inner_content_icon-dec"> 2865 <div class="pricing_inner_content_icon"> 2866 <i class="fa fa-check"></i> 2867 </div> 2868 <div class="pricing_inner_content_dec"> 2869 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2870 </div> 2871 </div> 2872 2873 <div class="pricing_inner_content_icon-dec"> 2874 <div class="pricing_inner_content_icon"> 2875 <i class="fa fa-check"></i> 2876 </div> 2877 <div class="pricing_inner_content_dec"> 2878 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2879 </div> 2880 </div> 2881 2882 <div class="pricing_inner_content_icon-dec"> 2883 <div class="pricing_inner_content_icon"> 2884 <i class="fa fa-check"></i> 2885 </div> 2886 <div class="pricing_inner_content_dec"> 2887 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2888 </div> 2889 </div> 2890 2891 <div class="pricing_inner_content_icon-dec"> 2892 <div class="pricing_inner_content_icon"> 2893 <i class="fa fa-check"></i> 2894 </div> 2895 <div class="pricing_inner_content_dec"> 2896 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2897 </div> 2898 </div> --><!-- (OR YOUR LOVED) --> 2899 <div class="pricing_inner_content_icon-dec"> 2900 <div class="pricing_inner_content_icon"> 2901 <i class="fa fa-check"></i> 2902 </div> 2903 <div class="pricing_inner_content_dec"> 2904 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 2905 </div> 2906 </div> 2907 2908 <!-- <div class="pricing_inner_content_icon-dec"> 2909 <div class="pricing_inner_content_icon"> 2910 <i class="fa fa-check"></i> 2911 </div> 2912 <div class="pricing_inner_content_dec"> 2913 <h6>ROUTINES DELIVERED TO YOUR EMAIL AND EVEN YOUR PHONE, WHENEVER YOU WANT WHENEVER YOU DESIRE, YOU SET YOUR PREFERENCES!</h6> 2914 </div> 2915 </div> 2916 2917 <div class="pricing_inner_content_icon-dec"> 2918 <div class="pricing_inner_content_icon"> 2919 <i class="fa fa-check"></i> 2920 </div> 2921 <div class="pricing_inner_content_dec"> 2922 <h6>YOUR OWN PROFILE PAGE TO TRACK USAGE AND SEE PROGRESS</h6> 2923 </div> 2924 </div> 2925 2926 <div class="pricing_inner_content_icon-dec"> 2927 <div class="pricing_inner_content_icon"> 2928 <i class="fa fa-check"></i> 2929 </div> 2930 <div class="pricing_inner_content_dec"> 2931 <h6>AND THESE BENEFITS EXTEND TO ALL PEOPLE LIVING UNDER ONE ROOF</h6> 2932 </div> 2933 </div> 2934 2935 <div class="pricing_inner_content_icon-dec"> 2936 <div class="pricing_inner_content_icon"> 2937 <i class="fa fa-check"></i> 2938 </div> 2939 <div class="pricing_inner_content_dec"> 2940 <h6>THERE IS NO BETTER HEALTH VALUE IN AMERICA!</h6> 2941 </div> 2942 </div> 2943 2944 <div class="pricing_inner_content_icon-dec"> 2945 <div class="pricing_inner_content_icon"> 2946 <i class="fa fa-check"></i> 2947 </div> 2948 <div class="pricing_inner_content_dec"> 2949 <h6>AN AFFORDABLE LONG-TERM PREVENTATIVE HEALTH PLAN FOR ALL FAMILIES</h6> 2950 </div> 2951 </div> 2952 2953 <div class="pricing_inner_content_icon-dec"> 2954 <div class="pricing_inner_content_icon"> 2955 <i class="fa fa-check"></i> 2956 </div> 2957 <div class="pricing_inner_content_dec"> 2958 <h6>THE GAP FILLER FOR WHAT INSURANCE DOESNâT COVER</h6> 2959 </div> 2960 </div> 2961 2962 <div class="pricing_inner_content_icon-dec"> 2963 <div class="pricing_inner_content_icon"> 2964 <i class="fa fa-check"></i> 2965 </div> 2966 <div class="pricing_inner_content_dec"> 2967 <h6>DELIVERED TO YOUR HOME, ON YOUR TIME</h6> 2968 </div> 2969 </div> 2970 2971 <div class="pricing_inner_content_icon-dec"> 2972 <div clas
2972s="pricing_inner_content_icon"> 2973 <i class="fa fa-check"></i> 2974 </div> 2975 <div class="pricing_inner_content_dec"> 2976 <h6>NOT AT HOME, WE ALSO DELIVER TO YOUR PHONE</h6> 2977 </div> 2978 </div> 2979 2980 <div class="pricing_inner_content_icon-dec"> 2981 <div class="pricing_inner_content_icon"> 2982 <i class="fa fa-check"></i> 2983 </div> 2984 <div class="pricing_inner_content_dec"> 2985 <h6>WE BRING DR., PT, AND OT CARE TO YOU</h6> 2986 </div> 2987 </div> 2988 2989 <div class="pricing_inner_content_icon-dec"> 2990 <div class="pricing_inner_content_icon"> 2991 <i class="fa fa-check"></i> 2992 </div> 2993 <div class="pricing_inner_content_dec"> 2994 <h6>PERFECT FOR THOSE AGING-IN-PLACE</h6> 2995 </div> 2996 </div> 2997 2998 <div class="pricing_inner_content_icon-dec"> 2999 <div class="pricing_inner_content_icon"> 3000 <i class="fa fa-check"></i> 3001 </div> 3002 <div class="pricing_inner_content_dec"> 3003 <h6>NO MORE EXCUSES TO GET AND STAY HEALTHY LONG-TERM</h6> 3004 </div> 3005 </div> --><!-- (OR YOUR LOVED) --> 3006 </div> 3007 <div class="pricing_inner_footer"> 3008 <a href="https://www.funandmoving.com/register_user" class="get-start_btn">JOIN NOW</a> 3009 </div> 3010 </div> 3011 </div> 3012 </div> 3013 </div> 3014 </div> 3015 </section><style> 3016 body { 3017 visibility: hidden; 3018 } 3019</style> 3020</main> 3021<section class="footer_bottom_section footer_bottom_section_redesign clearfix ptb-80" role="contentinfo" aria-label="footer content" style="background-image: url('https://www.funandmoving.com/assets/images/redesign-landing-page_images/footer_bg-02.png');"> 3022 <div class="container container_width"> 3023 <div class="amt-footer_in_section arabic_d-flex amt-footer_in_section_redesign clearfix"> 3024 <div class="col-sm-4 col-md-3 col-lg-4 amt-ftr-bottom ftr_first_box"> 3025 <div class="amt-ftr-bottom_title" role="heading" aria-level="2"> 3026 FunAndMoving.com </div> 3027 <div class="amt-ftr-bottom_content"> 3028 <ul class="footer-btm-details"> 3029 <li> 3030 "A society grows great when old men plant trees in whose shade they know they shall never sit." </li> 3031 <li> 3032 </li> 3033 </ul> 3034 </div> 3035 </div> 3036 <div class="col-sm-4 col-md-6 col-lg-4 amt-ftr-bottom ftr_first_box"> 3037 <div class="amt-ftr-bottom_title"> 3038 3039 <div class="custom-partners medicare-hipaa_image" style="justify-content: center;"> 3040 <a target="_blank"> 3041 <img alt="Medicare" src="https://www.funandmoving.com/assets/images/redesign-landing-page_images/medicare-logo_01.png" alt="" class="amt-cla-wt"> 3042 </a> 3043 <a href="#"> 3044 <img alt="Medicare" src="https://www.funandmoving.com/assets/images/redesign-landing-page_images/nhs-logo_01.png" alt="" class="amt-cla-wt"> 3045 </a> 3046 <a href="#"> 3047 <img alt="Medicare" src="https://www.funandmoving.com/assets/images/redesign-landing-page_images/hipaa-logo_01.png" alt="" class="amt-cla-wt"> 3048 </a> 3049 </div> 3050 3051 </div> 3052 </div> 3053 <div class="col-sm-4 col-md-3 col-lg-4 amt-ftr-bottom ftr_third_box"> 3054 <div class="amt-ftr-bottom_title" role="heading" aria-level="2">CONTACT US</div> 3055 <div class="amt-ftr-bottom_content"> 3056 <ul> 3057 <li>
3058 <span class="ftr_tel_num"><a 3059 href="tel: 916.342.1044"> 916.342.1044</a></span> 3060 <!-- <span><i class="fa fa-phone" role="presentation"></i></span> --> 3061 </li> 3062 <li><span class="ftr_cmp_name"><a 3063 href="mailto:[email protected]">[email protected]</a> 3064 </span> 3065 <!-- <span><i class="fa fa-envelope" style="color:black" role="presentation"></i></span> --> 3066 </li> 3067 <li><span class="ftr_cmp_name amt-ftr-bottom_content-span"><a href="https://www.funandmoving.com/Support/privacy" 3068 target="blank" style="text-decoration: underline;">Privacy Policy</a> 3069 </span> 3070 </li> 3071 <li><span class="ftr_cmp_name amt-ftr-bottom_content-span"><a href="#" class="js-open-cookie-settings" style="text-decoration: underline;">Cookie Settings</a> 3072 </span> 3073 </li> 3074 <li><span class="ftr_cmp_name amt-ftr-bottom_content-span"><a href="https://www.funandmoving.com/Home/terms_condition" 3075 target="blank" style="text-decoration: underline;">Terms And Conditions</a> 3076 </span> 3077 </li> 3078 </ul> 3079 </div> 3080 <div class="clearfix social_media_icons"> 3081 <div class="amt_social"> 3082 <a href="https://www.youtube.com/@funandmovingFAM" target="_blank" aria-label="Youtube"> 3083 <img alt="Youtube" src="https://www.funandmoving.com/assets/images/youtube.png" alt="" class="amt_social_icons"> 3084 </a> 3085 <a href="https://www.tiktok.com/@funandmoving?lang=en-GB" target="_blank" aria-label="Tiktok"> 3086 <img alt="Tiktok" src="https://www.funandmoving.com/assets/images/tiktok.png" alt="" class="amt_social_icons"> 3087 </a> 3088 <a href="https://www.facebook.com/funandmovingFAM/" target="_blank" aria-label="Facebook"> 3089 <img alt="FB" src="https://www.funandmoving.com/assets/images/FB-white.png" alt="" class="amt_social_icons"> 3090 </a> 3091 <a href="https://instagram.com/funandmoving?utm_medium=copy_link" target="_blank" aria-label="Instagram"> 3092 <img alt="Instagram" src="https://www.funandmoving.com/assets/images/instagram_dark.png" alt="" class="amt_social_icons"> 3093 </a> 3094 <a href="https://www.linkedin.com/company/fun-and-moving/mycompany/?viewAsMember=true" target="_blank" aria-label="Linkedin"> 3095 <img alt="Linkedin" src="https://www.funandmoving.com/assets/images/linkedin.png" alt="" class="amt_social_icons"> 3096 </a> 3097 </div> 3098 </div> 3099 </div> 3100 </div> 3101 <div class="amt-ftr-move_your_way clearfix"> 3102 <!-- <div class="col-sm-12 col-md-12 col-lg-12 amt-ftr-move_your_way_content clearfix"> --> 3103 3104 </div> 3105 <div class="amt-ftr-country-bottom ftr_fourth_box m-0"> 3106 <div class="col-sm-12 col-md-12 col-lg-12 amt-ftr-country-bottom_content clearfix"> 3107 <ul class="clearfix"> 3108 <!-- <li>Los Angeles</li> --> 3109 <li>Tokyo</li> 3110 <li class="text-center">New York</li> 3111 <li class="text-center">London</li> 3112 <li class="text-center">Mumbai</li> 3113 <li>Sydney</li> 3114 </ul> 3115 </div> 3116 </div> 3117</div> 3118</section> 3119 3120<!-- page loader --> 3121<div class="start-here-preloader"> 3122 <div class="circle-loader"></div> 3123 <div class="fam-logo"> 3124 <img src="https://www.funandmoving.com/assets/images/fam-logo.png" alt="fam logo" /> 3125 </div> 3126</div> 3127 3128 3129<link href="https://www.funandmoving.com/assets/css/membership_plans_css.css" rel="stylesheet"> 3130<!-- Modal --> 3131<div class="modal fade" id="addTrialPeriodsEndPopup" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" 3132 aria-hidden="true" style="z-index:10000000000000"> 3133</div> 3134<!-- Modal --> 3135<!-- Modal --> 3136<div class="modal fade smart-tv-watch pr-0" id="ActicateDeviceModal" data-backdrop="static" data-keyboard="false" 3137 tabindex="-1" role="dialog" aria-labelledby="ActicateDeviceModal" style="z-index:10000000000000"> 3138 <div class="modal-dialog"> 3139 <!-- Modal content--> 3140 <div class="modal-content"> 3141 <div class="modal-header"> 3142 ACTIVATE DEVICE 3143 <button type="button" class="close modal-close_button" onClick="close_popup();">×</button> 3144 </div> 3145 <div class="modal-body"> 3146 <div class="row"> 3147 <div class="col-md-12 p-0 main_device_area"> 3148 <div class="lavel1_devices showClass clearfix"> 3149 <div class="col-md-6 col-sm-6 col-xs-6 ar_float-right"> 3150 <div class="activate-device"> 3151 <h4>Smart TV</h4> 3152 <a href="javascript:void(0);" onClick="activate_device('smart_tv');" 3153 data-device-type='tv'> 3154 <img alt="App Store" src="https://www.funandmoving.com/assets/images/tv.png" 3155 class="amt-cla-wt"> 3156 </a> 3157 </div> 3158 </div> 3159 <div class="col-md-6 col-sm-6 col-xs-6 ar_float-right"> 3160 <div class="activate-device"> 3161 <h4>Smart Watch</h4> 3162 <a href="javascript:void(0);" class="" onClick="activate_device('smart_watch');" 3163 data-device-type="watch"> 3164 <img alt="App Store" src="https://www.funandmoving.com/assets/images/smartw
3164atch.png" 3165 class="amt-cla-wt"> 3166 </a> 3167 </div> 3168 </div> 3169 </div> 3170 <div class="level2 hideClass"> 3171 <div class="lavel2_smarttv_devices text-center hideClass clearfix " 3172 data-device-sub-type="tv"> 3173 <div class="activate-device"> 3174 <a href="https://www.funandmoving.com/profile/activate_device"><img 3175 alt="Apple TV" 3176 src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/Apple_TV_1663004866_icon-512-appletv.png" 3177 alt="" class="amt-cla-wt"></a> 3178 </div> 3179 <div class="activate-device"> 3180 <a href="https://www.funandmoving.com/profile/activate_device"><img 3181 alt="Android TV" 3182 src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/Android_TV_1663004838_icon-512-androidtv.png" 3183 alt="" class="amt-cla-wt"></a> 3184 </div> 3185 <div class="activate-device"> 3186 <a href="https://www.funandmoving.com/profile/activate_device"><img 3187 alt="Fire TV" 3188 src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/Fire_TV_1663004919_icon-512-firetv.png" 3189 alt="" class="amt-cla-wt"></a> 3190 </div> 3191 <div class="activate-device"> 3192 <a href="https://www.funandmoving.com/profile/activate_device"><img 3193 alt="Roku TV" 3194 src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/Roku_TV_1663004937_icon-512-rokutv.png" 3195 alt="" class="amt-cla-wt"></a> 3196 </div> 3197 <div class="activate-device"> 3198 <a href="https://www.funandmoving.com/profile/activate_device"><img 3199 alt="Samsung TV" 3200 src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/Samsung_TV_1663005239_icon-512-samsungtv.png" 3201 alt="" class="amt-cla-wt"></a> 3202 </div> 3203 <div class="activate-device"> 3204 <a href="https://www.funandmoving.com/profile/activate_device"><img 3205 alt="LG TV" 3206 src="https://www.funandmoving.com/admin_assets/images/landing_page_icons/LG_TV_1675151113_icon-512-LG-SmartTV.png" 3207 alt="" class="amt-cla-wt"></a> 3208 </div> 3209 </div> 3210 <div class="lavel2_smartwatch_devices hideClass clearfix text-center " 3211 data-device-sub-type="watch"> 3212 <div class="col-md-6 col-sm-6 col-xs-6 ar_float-right"> 3213 <div class="activate-device"> 3214 <h4>Android Watch</h4> 3215 <a href="javascript:void(0);" onClick="activate_smart_watch('android');"> 3216 <!-- <img alt="App Store" src="assets/images/fitbit.png" class="amt-cla-wt"> --> 3217 <img alt="App Store" 3218 src="https://www.funandmoving.com/assets/images/android-watch_01.png" 3219 class="amt-cla-wt"> 3220 </a> 3221 </div> 3222 </div> 3223 <div class="col-md-6 col-sm-6 col-xs-6 ar_float-right"> 3224 <div class="activate-device"> 3225 <h4>Apple Watch</h4> 3226 <a href="javascript:void(0);" class="" onClick="activate_smart_watch('apple');"> 3227 <!-- <img alt="App Store" src="assets/images/apple_watch.png" class="amt-cla-wt"> --> 3228 <img alt="App Store" 3229 src="https://www.funandmoving.com/assets/images/apple-watch_01.png" 3230 class="amt-cla-wt"> 3231 </a> 3232 </div> 3233 </div> 3234 </div> 3235 </div> 3236 <div class="level3 hideClass"> 3237 <div class="lavel3_apple_instruction hideClass" data-device-sub-type="watch"> 3238 <div class="activate-device"> 3239 <!-- Under Development --> 3240 <!--------------------------> 3241 <div id="container" class=""> 3242 <div class="progress progress_redesign" style="position: relative; top: 4px; height: 3px; margin-bottom: 0;"> <!-- px-1 --> 3243 <div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div> 3244 </div> 3245 <div class="step-container" style="display: flex; justify-content: space-between;"> 3246 <!-- d-flex justify-content-between --> 3247 <div class="step-circle">1</div> 3248 <div class="step-circle">2</div> 3249 <div class="step-circle">3</div> 3250 <div class="step-circle">4</div> 3251 </div> 3252 <form id="multi-step-form-apple" class="multi-step-form_cls"> 3253 <div class="step step-1"> 3254 <div class="mb-3"> 3255 3256 <div class="mb-3"> 3257 <h4 class="text-black f-weight-700 mb-1"> 3258 <b>1.</b> 3259 Open the Health App 3260 </h4> 3261 <div class="d-block disclosure_text"> 3262 <b><i class="fa fa-chevron-right" aria-hidden="true"></i></b> 3263 On your iPhone, find and open the <b>Health App</b> (it comes pre-installed). 3264 </div> 3265 </div> 3266 3267 <div class="mb-3"> 3268 <h4 class="text-black f-weight-700 mb-1"> 3269 <b>2.</b> 3270 Check Apple ID 3271 </h4> 3272 <div class="d-block disclosure_text"> 3273 <b><i class="fa fa-chevron-right" aria-hidden="true"></i></b> 3274 Make sure you are logged in with the <b>same Apple ID account</b> that you use on your iPhone. This ensures seamless syncing. Activity and syncing. 3275 </div> 3276 </div> 3277 3278 <div class="style_1_images"> 3279 <!-- <img src="assets/images/health-connect-apps-01.jpg" alt="" width="400px"> --> 3280 <img src="https://www.funandmoving.com/assets/images/ios_health_step_01.png" alt="" width="200px"> 3281 </div> 3282 </div> 3283 <div class="text-right ar_text-left"> 3284 <button type="button" class="active-device-next">Next</button> 3285 </div> 3286 </div> 3287 <div class="step step-2"> 3288 <div class="mb-3"> 3289 <h4 class="text-black f-weight-700 mb-1"> 3290 Apple Health (HealthKit) 3291 </h4> 3292 <div class="d-block disclosure_text"> 3293 Apple HealthKit enables secure sharing of health and fitness data across apps while preserving user privacy. Leading apps integrated
3293with Apple Health provide a unified wellness view and allow users to track and manage their health data in one place: 3294 </div> 3295 </div> 3296 3297 <div class=""> <!-- mb-3 --> 3298 <ul class="list-unstyled list-unstyled_redesign"> 3299 <!-- row --> 3300 <li class="item-unstyled"> 3301 <!-- col-md-4 mb-2 --> 3302 <i class="fa fa-circle"></i> 3303 <span>MyFitnessPal</span> 3304 </li> 3305 <li class="item-unstyled"> 3306 <!-- col-md-4 mb-2 --> 3307 <i class="fa fa-circle"></i> 3308 <span>Strava</span> 3309 </li> 3310 <li class="item-unstyled"> 3311 <!-- col-md-4 mb-2 --> 3312 <i class="fa fa-circle"></i> 3313 <span>Clue</span> 3314 </li> 3315 <li class="item-unstyled"> 3316 <!-- col-md-4 mb-2 --> 3317 <i class="fa fa-circle"></i> 3318 <span>Garmin Connect</span> 3319 </li> 3320 <li class="item-unstyled"> 3321 <!-- col-md-4 mb-2 --> 3322 <i class="fa fa-circle"></i> 3323 <span>AutoSleep</span> 3324 </li> 3325 <li class="item-unstyled"> 3326 <!-- col-md-4 mb-2 --> 3327 <i class="fa fa-circle"></i> 3328 <span>Renpho</span> 3329 </li> 3330 <li class="item-unstyled"> 3331 <!-- col-md-4 mb-2 --> 3332 <i class="fa fa-circle"></i> 3333 <span>Nike Run Club</span> 3334 </li> 3335 <li class="item-unstyled"> 3336 <!-- col-md-4 mb-2 --> 3337 <i class="fa fa-circle"></i> 3338 <span>Headspace</span> 3339 </li> 3340 <li class="item-unstyled"> 3341 <!-- col-md-4 mb-2 --> 3342 <i class="fa fa-circle"></i> 3343 <span>Fitbod</span> 3344 </li> 3345 <li class="item-unstyled"> 3346 <!-- col-md-4 mb-2 --> 3347 <i class="fa fa-circle"></i>
3348 <span>Withings Health Mate</span> 3349 </li> 3350 </ul> 3351 </div> 3352 3353 <!-- <div class="d-block disclosure_text mb-3"> 3354 Like Health Connect, <b>Apple Health acts as a central hub </b>bringing together data from iPhone, Apple Watch, and third-party apps to create a complete health and fitness profile. 3355 </div> --> 3356 3357 <!-- <div class="style_1_images"> 3358 <img src="assets/images/health-connect-apps-02.jpg" alt="" width="400px"> 3359 </div> --> 3360 3361 <div class="previous-print-button-aligns"> 3362 <div class="text-left"> 3363 <button type="button" class="active-device-prev">Previous</button> 3364 </div> 3365 <div class="text-left"> 3366 <button type="button" class="active-device-next">Next</button> 3367 </div> 3368 </div> 3369 </div> 3370 <div class="step step-3"> 3371 <div class="mb-3"> 3372 <h4 class="text-black f-weight-700 mb-3"> 3373 Download and Install the FAM App: 3374 </h4> 3375 <div class="mb-3"> 3376 <div class="d-block disclosure_text mb-3"> 3377 <b><i class="fa fa-chevron-right" aria-hidden="true"></i></b> 3378 Visit the official FAM app at 3379 <a target="_blank" href="https://apps.apple.com/in/app/fun-and-moving/id1564330996?platform=iphone" class="fun_link " tabindex="-1">Appstore</a> 3380 to download and install the app on your device. 3381 </div> 3382 <div class="style_1_images"> 3383 <img src="https://www.funandmoving.com/assets/images/ios_health_step_03.png" alt="" width="200px"> 3384 </div> 3385 </div> 3386 3387 <!-- <div class="style_1_images"> 3388 <img src="https://www.funandmoving.com/assets/images/fam-apps-logo-03.jpg" alt="" width="400px"> 3389 </div> --> 3390 </div> 3391 <div class="previous-print-button-aligns"> 3392 <div class="text-left"> 3393 <button type="button" class="active-device-prev">Previous</button> 3394 </div> 3395 <div class="text-left"> 3396 <button type="button" class="active-device-next">Next</button> 3397 </div> 3398 </div> 3399 </div> 3400 <div class="step step-4"> 3401 <div class="mb-3"> 3402 <h4 class="text-black f-weight-700 mb-3"> 3403 Connect the FAM App with Apple Health (HealthKit): 3404 </h4> 3405 <div class="mb-3"> 3406 <div class="d-block disclosure_text mb-3"> 3407 <b>1.</b> 3408 Open the FAM app on your iPhone. 3409 </div> 3410 <div class="d-block disclosure_text mb-3"> 3411 <b>2.</b> 3412 Go to the Profile option. 3413 </div> 3414 <div class="d-block disclosure_text mb-3"> 3415 <b>3.</b> 3416 Select Sync with Health App 3417 </div> 3418 <div class="d-block disclosure_text mb-3"> 3419 <b>4.</b> 3420 Follow the on-screen instructions and grant the necessary permissions for data sharing (e.g., Steps, Calories, Heart Rate, Distance, Activities). 3421 </div> 3422 <div class="d-block disclosure_text mb-3"> 3423 <b>5.</b> 3424 Once permissions are allowed, your data will automatically sync between the FAM app and Apple Health. 3425 </div> 3426 </div> 3427 3428 <div class="activate-device_slider"> 3429 <!-- slider --> 3430 <a href="javascript:void(0);" class="next control"> 3431 <i class="fa fa-chevron-right" aria-hidden="true"></i> 3432 </a> 3433 <a href="javascript:void(0);" class="prev control"> 3434 <i class="fa fa-chevron-left" aria-hidden="true"></i> 3435 </a> 3436 <ul> 3437 <li> 3438 <!-- class="r" --> 3439 <!-- <div style="display: block;">1</div> --> 3440 <img src="https://www.funandmoving.com/assets/images/ios_health_step_2.png" alt="" width="340px"> 3441 </li> 3442 <li> 3443 <!-- class="g" --> 3444 <!-- <div style="display: block;">1</div> --> 3445 <img src="https://www.funandmoving.com/assets/images/ios_health_step_3.png" alt="" width="340px"> 3446 </li> 3447 <li> 3448 <!-- class="b" --> 3449 <!-- <div style="display: block; height: 400px;">3</div> --> 3450 <img src="https://www.funandmoving.com/assets/images/ios_health_step_4.png" alt="" width="340px"> 3451 </li> 3452 <li> 3453 <!-- class="e" --> 3454 <!-- <div style="display: block; height: 400px;">4</div> --> 3455 <img src="https://www.funandmoving.com/assets/images/ios_health_step_5.png" alt="" width="340px"> 3456 </li> 3457 <li> 3458 <!-- class="c" --> 3459 <!-- <div style="display: block; height: 400px;">5</div> --> 3460 <img src="https://www.funandmoving.com/assets/images/ios_health_step_6.png" alt="" width="340px"> 3461 </li> 3462 <li> 3463 <!-- class="c" --> 3464 <!-- <div style="display: block; height: 400px;">6</div> --> 3465 <img src="https://www.funandmoving.com/assets/images/ios_health_step_7.png" alt="" width="340px"> 3466 </li> 3467 <li> 3468 <!-- class="c" --> 3469 <!-- <div style="display: block; height: 400px;">7</div> --> 3470 <img src="https://www.funandmoving.com/assets/images/ios_health_step_8.png" alt="" width="340px"> 3471 </li> 3472 <li> 3473 <!-- class="c" --> 3474 <!-- <div style="display: block; height: 400px;">8</div> --> 3475 <img src="https://www.funandmoving.com/assets/images/ios_health_step_9.png" alt="" width="340px"> 3476 </li> 3477 <li> 3478 <!-- class="c" --> 3479 <!-- <div style="display: block; height: 400px;">9</div> --> 3480 <img src="https://www.funandmoving.com/assets/images/ios_health_step_10.png" alt="" width="340px"> 3481 </li> 3482 <li> 3483 <!-- class="c" --> 3484 <!-- <div style="display: block; height: 400px;">10</div> --> 3485 <img src="https://www.funandmoving.com/assets/images/ios_health_step_11.png" alt="" width="340px"> 3486 </li> 3487 <li> 3488 <!-- class="c" --> 3489 <!-- <div style="display: block; height: 400px;">11</div> --> 3490 <img src="https://www.funandmoving.com/assets/images/ios_health_step_12.png" alt="" width="340px"> 3491 </li> 3492 <li> 3493 <!-- class="c" --> 3494 <!-- <div style="display: block;">12</div> --> 3495 <img src="https://www.funandmoving.com/assets/images/ios_health_step_1.png" alt="" width="340px"> 3496 </li> 3497 </ul> 3498 </div> 3499 <div class="slider_step text-center"> 3500 <strong>
3501 <span id="stepNumber">1</span> 3502 </strong> 3503 / 3504 <span id="totalSteps"></span> 3505 </div> 3506 3507 <!-- <img src="https://www.funandmoving.com/assets/images/fam-apps-logo-04.jpg" alt="" width="400px"> --> 3508 </div> 3509 <div class="health-connect-btn"> 3510 <a href="https://www.funandmoving.com/HealthConnect" class="health-connect-link">Health 3511 Connect Data</a> 3512 </div> 3513 <div class="text-left ar_text-right"> 3514 <button type="button" class="active-device-prev">Previous</button> 3515 <!-- prev-step --> 3516 </div> 3517 </div> 3518 </form> 3519 </div> 3520 <!-------------------------> 3521 </div> 3522 </div> 3523 <div class="lavel3_android_instruction hideClass" data-device-sub-type="watch"> 3524 <div class="activate-device"> 3525 <div id="container" class=""> 3526 <!-- container mt-5 --> 3527 <div class="progress progress_redesign" 3528 style="position: relative; top: 4px; height: 3px; margin-bottom: 0;"> 3529 <!-- px-1 --> 3530 <div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="0" 3531 aria-valuemin="0" aria-valuemax="100"></div> 3532 </div> 3533 3534 <div class="step-container" style="display: flex; justify-content: space-between;"> 3535 <!-- d-flex justify-content-between --> 3536 <div class="step-circle">1</div> 3537 <div class="step-circle">2</div> 3538 <div class="step-circle">3</div> 3539 <div class="step-circle">4</div> 3540 </div> 3541 3542 <form id="multi-step-form" class="multi-step-form_cls"> 3543 3544 <div class="step step-1"> 3545 <h4 class="text-black f-weight-700 mb-3"> 3546 Download and Install Health Connect: 3547 </h4> 3548 <div class="mb-3"> 3549 <div class="d-block disclosure_text mb-3"> 3550 <b><i class="fa fa-chevron-right" aria-hidden="true"></i></b> 3551 For Android 14 and Above: Health Connect is integrated into the Android 3552 system. You can access it by navigating to 3553 <b>Settings > Apps > Health Connect</b>. 3554 </div> 3555 <div class="d-block disclosure_text mb-3"> 3556 <b><i class="fa fa-chevron-right" aria-hidden="true"></i></b> 3557 For Android 13 and Below: Download and install the Health Connect app 3558 from the Google Play Store. 3559 </div> 3560 <div class="d-block disclosure_text"> 3561 <b><i class="fa fa-chevron-right" aria-hidden="true"></i></b> 3562 Visit the official 3563 <b>Health Connect</b> 3564 at 3565 <a target="_blank" 3566 href="https://play.google.com/store/apps/details?id=com.google.android.apps.healthdata" 3567 class="fun_link "> 3568 Google Play Store 3569 </a> 3570 to download and install the app on your device. 3571 </div> 3572 <div class="style_1_images"> 3573 <img src="https://www.funandmoving.com/assets/images/health-connect-apps-01.jpg" 3574 alt="" width="400px"> 3575 </div> 3576 </div> 3577 <div class="text-right ar_text-left"> 3578 <button type="button" class="active-device-next">Next</button> 3579 <!-- active-device-next --> 3580 <!-- text-align='right' --> 3581 </div> 3582 </div> 3583 3584 <div class="step step-2"> 3585 <h4 class="text-black f-weight-700 mb-3" style="line-height: 1.5;"> 3586 3587 Health Connect by Android enables secure sharing of health and fitness data 3588 across apps while preserving user privacy. Leading apps integrated
3588with 3589 Health Connect provide a unified wellness view: 3590 </h4> 3591 <div class="mb-3"> 3592 <div class="mb-3"> 3593 <ul class="list-unstyled list-unstyled_redesign"> 3594 <!-- row --> 3595 <li class="item-unstyled"> 3596 <!-- col-md-4 mb-2 --> 3597 <i class="fa fa-circle"></i> 3598 <span>Google Fit</span> 3599 </li> 3600 <li class="item-unstyled"> 3601 <!-- col-md-4 mb-2 --> 3602 <i class="fa fa-circle"></i> 3603 <span>Fitbit</span> 3604 </li> 3605 <li class="item-unstyled"> 3606 <!-- col-md-4 mb-2 --> 3607 <i class="fa fa-circle"></i> 3608 <span>MyFitnessPal</span> 3609 </li> 3610 <li class="item-unstyled"> 3611 <!-- col-md-4 mb-2 --> 3612 <i class="fa fa-circle"></i> 3613 <span>ÅURA</span> 3614 </li> 3615 <li class="item-unstyled"> 3616 <!-- col-md-4 mb-2 --> 3617 <i class="fa fa-circle"></i> 3618 <span>Lifesum</span> 3619 </li> 3620 <li class="item-unstyled"> 3621 <!-- col-md-4 mb-2 --> 3622 <i class="fa fa-circle"></i> 3623 <span>Flo</span> 3624 </li> 3625 <li class="item-unstyled"> 3626 <!-- col-md-4 mb-2 --> 3627 <i class="fa fa-circle"></i> 3628 <span>Withings</span> 3629 </li> 3630 <li class="item-unstyled"> 3631 <!-- col-md-4 mb-2 --> 3632 <i class="fa fa-circle"></i> 3633 <span>WeightWatchers</span> 3634 </li> 3635 <li class="item-unstyled"> 3636 <!-- col-md-4 mb-2 --> 3637 <i class="fa fa-circle"></i> 3638 <sp
3638an>Dexcom</span> 3639 </li> 3640 <li class="item-unstyled"> 3641 <!-- col-md-4 mb-2 --> 3642 <i class="fa fa-circle"></i> 3643 <span>HealthifyMe</span> 3644 </li> 3645 <li class="item-unstyled"> 3646 <!-- col-md-4 mb-2 --> 3647 <i class="fa fa-circle"></i> 3648 <span>Outdooractive</span> 3649 </li> 3650 <li class="item-unstyled"> 3651 <!-- col-md-4 mb-2 --> 3652 <i class="fa fa-circle"></i> 3653 <span>Proov Insight</span> 3654 </li> 3655 <li class="item-unstyled"> 3656 <!-- col-md-4 mb-2 --> 3657 <i class="fa fa-circle"></i> 3658 <span>Signos</span> 3659 </li> 3660 <li class="item-unstyled"> 3661 <!-- col-md-4 mb-2 --> 3662 <i class="fa fa-circle"></i> 3663 <span>Tonal</span> 3664 </li> 3665 <li class="item-unstyled"> 3666 <!-- col-md-4 mb-2 --> 3667 <i class="fa fa-circle"></i> 3668 <span>Coros</span> 3669 </li> 3670 <li class="item-unstyled"> 3671 <!-- col-md-4 mb-2 --> 3672 <i class="fa fa-circle"></i> 3673 <span>Whoop</span> 3674 </li> 3675 <li class="item-unstyled"> 3676 <!-- col-md-4 mb-2 --> 3677 <i class="fa fa-circle"></i> 3678 <span>Samsung Health</span> 3679 </li> 3680 </ul> 3681 </div> 3682 </div> 3683 <div class="previous-print-button-aligns"> 3684 <div class="text-left"> 3685 <button type="button" class="active-device-prev">Previous</button> 3686 <!-- prev-step text-left --> 3687 </div> 3688 <div class="text-left"> 3689 <button type="button" class="active-device-next">Next</button> 3690 <!-- next-step text-right --> 3691 </div> 3692 </div> 3693 </div> 3694 3695 <div class="step step-3"> 3696 <h4 class="text-black f-weight-700 mb-3"> 3697 Download and Install the FAM App: 3698 </h4> 3699 <div class="mb-3"> 3700 <div class="d-block disclosure_text mb-3"> 3701 <b><i class="fa fa-chevron-right" aria-hidden="true"></i></b> 3702 Visit the official FAM app at 3703 <a target="_blank" 3704 href="https://play.google.com/store/apps/details?id=com.funandmoving.user" 3705 class="fun_link ">Google Play Store</a> 3706 to download and install the app on your device. 3707 </div> 3708 <div class="style_1_images"> 3709 <img src="https://www.funandmoving.com/assets/images/fam-apps-logo-01.jpg" 3710 alt="" width="400px"> 3711 </div> 3712 </div> 3713 <div class="previous-print-button-aligns"> 3714 <div class="text-left"> 3715 <button type="button" class="active-device-prev">Previous</button> 3716 <!-- prev-step text-left --> 3717 </div> 3718 <div class="text-left"> 3719 <button type="button" class="active-device-next">Next</button> 3720 <!-- next-step text-right --> 3721 </div> 3722 </div> 3723 </div> 3724 3725 <div class="step step-4"> 3726 <h4 class="text-black f-weight-700 mb-3"> 3727 Connect the FAM App with Health Connect: 3728 </h4> 3729 3730 <div class="mb-3"> 3731 <div class="d-block disclosure_text mb-3"> 3732 <b>1.</b> 3733 Open the FAM app 3734 </div> 3735 <div class="d-block disclosure_text mb-3"> 3736 <b>2.</b> 3737 Click on a profile option. 3738 </div> 3739 <div class="d-block disclosure_text mb-3"> 3740 <b>3.</b> 3741 Follow the on-screen instructions to grant the necessary permissions for 3742 data sharing between the FAM app and Health Connect. 3743 </div> 3744 3745 <!-- <div class="style_1_images"> 3746 <img src="assets/images/health-connect_01.jpg" alt="" width="150px"> 3747 <img src="assets/images/health-connect_02.jpg" alt="" width="150px"> 3748 <img src="assets/images/health-connect_03.jpg" alt="" width="150px"> 3749 <img src="assets/images/health-connect_04.jpg" alt="" width="150px"> 3750 <img src="assets/images/health-connect_05.jpg" alt="" width="150px"> 3751 </div> --> 3752 3753 <div class="activate-device_slider"> 3754 <!-- slider --> 3755 <a href="javascript:void(0);" class="next control"> 3756 <i class="fa fa-chevron-right" aria-hidden="true"></i> 3757 </a> 3758 <a href="javascript:void(0);" class="prev control"> 3759 <i class="fa fa-chevron-left" aria-hidden="true"></i> 3760 </a> 3761 <ul> 3762 <li> 3763 <!-- class="r" --> 3764 <img src="https://www.funandmoving.com/assets/images/health-connect_2.png" 3765 alt="" width="340px"> 3766 </li> 3767 <li> 3768 <!-- class="g" --> 3769 <img src="https://www.funandmoving.com/assets/images/health-connect_3.png" 3770 alt="" width="340px"> 3771 </li> 3772 <li> 3773 <!-- class="b" --> 3774 <img src="https://www.funandmoving.com/assets/images/health-connect_4.png" 3775 alt="" width="340px"> 3776 </li> 3777 <li> 3778 <!-- class="e" --> 3779 <img src="https://www.funandmoving.com/assets/images/health-connect_5.png" 3780 alt="" width="340px"> 3781 </li> 3782 <li> 3783 <!-- class="c" --> 3784 <img src="https://www.funandmoving.com/assets/images/health-connect_1.png" 3785 alt="" width="340px"> 3786 </li> 3787 </ul> 3788 </div> 3789 <div class="slider_step text-center"> 3790 <strong>
3791 <span id="stepNumber">1</span> 3792 </strong> 3793 / 3794 <span id="totalSteps"></span> 3795 </div> 3796 </div> 3797 3798 <div class="health-connect-btn"> 3799 <a href="https://www.funandmoving.com/HealthConnect" class="health-connect-link">Health 3800 Connect Data</a> 3801 3802 </div> 3803 3804 <div class="text-left ar_text-right"> 3805 <button type="button" class="active-device-prev">Previous</button> 3806 <!-- prev-step --> 3807 </div> 3808 </div> 3809 </form> 3810 </div> 3811 3812 </div> 3813 </div> 3814 </div> 3815 </div> 3816 <div class="modal-footer" style="display: flex;justify-content: end;"> 3817 <button type="button" class="btn btn-success back_btn active_level1 hideClass " onClick="back();">Back</button> 3818 <!--<button type="button" class="btn btn-success next_btn active_level1 hideClass" 3819 onClick="next();">Next</button> --> 3820 <button type="button" class="btn btn-default close_btn" onClick="close_popup();">Close</button> 3821 </div> 3822 </div> 3823 </div> 3824 </div> 3825 </div> 3826</div> 3827<!-- Trigger the modal with a button --> 3828<!-- <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button> --> 3829 3830<div class="modal fade enter-corpa_back_modal_cls" id="enter-corpa_back_modal" role="dialog" data-backdrop="static" 3831 data-keyboard="false"> 3832 <div class="modal-dialog"> 3833 <div class="modal-content banner"> 3834 <div class="modal-body"> 3835 <button type="button" class="close close-modal-btn" data-dismiss="modal">×</button> 3836 <div class="enter-corpa_back"> 3837 <h2 id="enter-corpa_back_title_id"> 3838 <!-- --> 3839 </h2> 3840 <p id="enter-corpa_back_detail_id"> 3841 <!-- --> 3842 </p> 3843 </div> 3844 </div> 3845 </div> 3846 </div> 3847</div> 3848 3849<!-- LoginSwitchBox --> 3850<div class="modal fade formwizardpopup partner-portal_modal" id="loginSwitchPopup" role="dialog" data-backdrop="static" 3851 data-keyboard="false"> 3852 <div class="modal-dialog"> 3853 <!-- Modal content--> 3854 <form class="formwizardpopup_form" id="loginSwitchPopup_form" action="" method="" name=""> 3855 <div class="modal-content banner"> 3856 <div class="modal-body"> 3857 <button type="button" class="close close-modal-btn" data-dismiss="modal">×</button> 3858 <div class="form_wizard" id="myWizard"> 3859 <div class="tab-content"> 3860 <!-- Step 1 Content --> 3861 <div class="tab-pane fade in active" id="step1"> 3862 <div class="data_blk"> 3863 <!-- <h3>Would you like to access our Partner or our Corporate Portal?</h3> --> 3864 <h3 class="portal-access_title">Which portal would you like to access?</h3> 3865 </div> 3866 <div class="form_blk"> 3867 <div class="row form_blk_inner"> 3868 <!-- style="display: flex; justify-content: center;" --> 3869 <div class="form_blk_inner-content partner-corporate_portal"> 3870 <h3 class="partner-corporate_portal-text">Partner</h3> <!-- Portal --> 3871 <label class="custom-radio">
3872 <span class="radio-btn"> 3873 <div class="radio-btn-title text-t_uppercase"> 3874 <div class="radio-btn-title_inner"> 3875 <a href="https://www.funandmoving.com/campaign_admin" target="_blank" 3876 class="partner-corporate_portal_img"> 3877 <img src="https://www.funandmoving.com/assets/images/partner-portal_01.png" 3878 class="partner-corporate_portal_img_inner" 3879 alt="Partner Portal Portal img" /> 3880 <div class="partner-corporate_portal_img-text"> 3881 <div> 3882 <img src="https://www.funandmoving.com/assets/images/login.png" 3883 alt="Login img" 3884 class="partner-corporate_portal_img-text_img" /> 3885 </div> 3886 <div class="text-color-white">Login to Partner 3887 Portal</div> 3888 </div> 3889 </a> 3890 </div> 3891 </div> 3892 <div class="custom-radio-check"></div> 3893 </span> 3894 </label> 3895 <div class="col-xs-12 col-sm-12"> 3896 <div aria-labelledby="partnerTitle" class="portal-section"> 3897 <ul> 3898 <li> 3899 Send individual routines 3900 </li> 3901 <li> 3902 Send routines to entire group 3903 </li> 3904 <li> 3905 Invite your entire company, or only certain divisions or 3906 individuals 3907 </li> 3908 <li> 3909 Track usage for ROI 3910 </li> 3911 <li> 3912 Download/ email reports 3913 </li> 3914 <li> 3915 "How to" videos for easy utilization 3916 </li> 3917 </ul> 3918 </div> 3919 </div> 3920 </div> 3921 <div class="form_blk_inner-content partner-corporate_portal"> 3922 <h3 class="partner-corporate_portal-text">Corporate</h3> <!-- Portal --> 3923 <!-- class="text-right" --> 3924 <label class="custom-radio">
3925 <span class="radio-btn"> 3926 <div class="radio-btn-title text-t_uppercase"> 3927 <div class="radio-btn-title_inner"> 3928 <a href="https://www.funandmoving.com/corporate_admin" 3929 target="_blank" class="partner-corporate_portal_img"> 3930 <img src="https://www.funandmoving.com/assets/images/corporate-portal_01.png" 3931 class="partner-corporate_portal_img_inner" 3932 alt="Corporate Portal Img" /> 3933 <div class="partner-corporate_portal_img-text"> 3934 <div> 3935 <img src="https://www.funandmoving.com/assets/images/login.png" 3936 alt="Login img" 3937 class="partner-corporate_portal_img-text_img" /> 3938 </div> 3939 <div class="text-color-white">Login to Corporate 3940 Portal</div> 3941 </div> 3942 </a> 3943 </div> 3944 </div> 3945 <div class="custom-radio-check"></div> 3946 </span> 3947 </label> 3948 <div class="col-xs-12 col-sm-12"> 3949 <div aria-labelledby="corporateTitle" class="portal-section"> 3950 <ul> 3951 <li> 3952 Create a company org chart 3953 </li> 3954 <li> 3955 Track by region/office usage 3956 </li> 3957 <li> 3958 Download/email reports for ROI by corporate, regions, and 3959 offices 3960 </li> 3961 <li> 3962 Corporate reporting 3963 </li> 3964 </ul> 3965 </div> 3966 </div> 3967 </div> 3968 </div> 3969 3970 </div> 3971 3972 </div> <!-- End of Step 1 --> 3973 </div> <!-- End of Tab Content --> 3974 </div> <!-- End of form_wizard --> 3975 </div> <!-- End of Modal Body --> 3976 </div> <!-- End of Modal Content --> 3977 </form> 3978 </div> <!-- End of Modal Dialog --> 3979</div> <!-- End of LoginSwitchBox --> 3980 3981 3982<!--Modal: modalExerciseApproval--> 3983<div class="modal fade clearfix modal-bg" id="modalExerciseApproval" tabindex="-1" role="dialog" 3984 aria-labelledby="exampleModalLabel" aria-hidden="true" aria-modal="true"> 3985 <div class="modal-dialog" role="document"> 3986 <div class="modal-content"> 3987 <form method="post" id="exercise_approval_form" action=""> 3988 <input type="hidden" name="csrf_token" id="csrf_token_2" 3989 value="382c49c05713ec02be9b9ec130d2e3b9"> 3990 <div class="modal-body"> 3991 <p> 3992 </p> 3993 <input type="hidden" name="login_user_id" class="user_id" 3994 value='' /> 3995 <input type="hidden" name="fingerprint_json" id="fingerprint_json" value=""> 3996 <!-- <input type="checkbox" name="approve" class="approve"/>Approve --> 3997 3998 <input type="checkbox" id="approve-1" name="approve" class="approve required"> 3999 <label for="approve-1" class="w-100 text-center">Agree</label><br />
4000 <span id="errorToShow1" class="errorToShow"></span> 4001 </div> 4002 </form> 4003 </div> 4004 </div> 4005</div> 4006<!--Modal: modalExerciseApproval--> 4007 4008<!--Modal: TourGuide ooption modal--> 4009<div id="tourChoiceModal" class="modal fade tourChoiceModal_cls" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" aria-modal="true"> 4010 <div class="modal-dialog" role="document"> 4011 4012 <div class="modal-content"> 4013 <div class="modal-body"> 4014 <button type="button" class="close close-modal-btn" data-dismiss="modal">×</button> 4015 <h3 class="choose-tour_title">Choose a Tour</h3> 4016 <button id="routineListTourBtn" class="routinelist-log-tour_btn routine-tour_btn_cls">Our Routines</button> 4017 <a href="https://www.funandmoving.com/campaign_admin" target="_blank" class="routinelist-log-tour_btn partner-portal_btn_cls">Partner Portal</a> 4018 <a href="https://www.funandmoving.com/corporate_admin" target="_blank" class="routinelist-log-tour_btn corporate-portal_btn_cls">Corporate Portal</a> 4019 <button id="chatbotTourBtn" class="routinelist-log-tour_btn activity-log-tour_btn_cls chatbot-tour_btn_cls">Chatbot Tour</button> 4020 </div> 4021 </div> 4022 </div> 4023</div> 4024<!--Modal: TourGuide ooption modal--> 4025 4026 4027<div class="preloader-background"> 4028 <div class="preloader-background_inner"> 4029 <div class="circle-loader"></div> 4030 <div class="fam-logo"> 4031 <img src="https://www.funandmoving.com/assets/images/fam-logo.png" alt="fam logo" /> 4032 </div> 4033 </div> 4034</div> 4035 4036<!----------> 4037 4038<!-- footer end--> 4039<a href="#" class="scrollToTop" aria-label="Scroll To Top" role="none"> 4040 <i class="fa fa-arrow-up" aria-hidden="true"></i> 4041</a> 4042 4043<style> 4044 #chat-toggle { 4045 position: fixed; 4046 /* bottom: 20px; 4047 right: 20px; 4048 background: #4f46e5; 4049 color: white; */ 4050 border-radius: 50%; 4051 /* width: 60px; 4052 height: 60px; 4053 font-size: 26px; */ 4054 border: none; 4055 cursor: pointer; 4056 4057 width: 50px; 4058 height: 50px; 4059 right: 25px; 4060 bottom: 88px; 4061 color: #ffffff; 4062 background-color: #b2b7ff; 4063 4064 /* transition: all 0.5s linear; 4065 -webkit-box-shadow: 0 0 15px 0 rgba(54, 54, 54, 0.3); */ 4066 4067 transition: background-color 0.3s linear, color 0.3s linear, box-shadow 0.3s linear; 4068 -webkit-box-shadow: 0 0 15px 0 rgba(54, 54, 54, 0.3); 4069 4070 /* z-index: 8; */ 4071 z-index: 9; 4072 /* cursor: move; */ 4073 } 4074 4075 #chat-toggle:hover { 4076 background-color: #fff; 4077 color: #222; 4078 -webkit-box-shadow: 0 0 15px 0 rgba(54, 54, 54, 0.3); 4079 box-shadow: 0 0 15px 0 rgba(54, 54, 54, 0.3); 4080 } 4081 4082 .chat-toggle-tooltip-text { 4083 position: absolute; 4084 right: 62px; 4085 top: 50%; 4086 transform: translateY(-50%); 4087 background: rgba(0, 0, 0, 0.9); 4088 color: #fff; 4089 font-size: 12px; 4090 line-height: 1.2; 4091 border-radius: 6px; 4092 padding: 7px 9px; 4093 white-space: nowrap; 4094 pointer-events: none; 4095 opacity: 0; 4096 display: none; 4097 transition: opacity 0.2s ease; 4098 } 4099 4100 #chat-toggle:hover .chat-toggle-tooltip-text { 4101 display: block; 4102 opacity: 1; 4103 } 4104 4105 #chat-box { 4106 position: fixed; 4107 /* bottom: 90px; */ 4108 right: 20px; 4109 /* width: 320px; */ 4110 /* height: 420px; */ 4111 background: white; 4112 border-radius: 12px; 4113 box-shadow: 0 10px 25px rgba(0, 0, 0, .2); 4114 display: none; 4115 flex-direction: column; 4116 overflow: hidden; 4117 /* font-family: Arial, sans-serif; */ 4118 4119 width: 370px; 4120 bottom: 150px; 4121 z-index: 9; 4122 4123 cursor: move; 4124 } 4125 4126 #chat-header { 4127 /* background: #4f46e5; */ 4128 /* color: white; */ 4129 padding: 12px; 4130 font-weight: bold; 4131 4132 color: #000; 4133 background-color: #b2b7ff; 4134 4135 display: flex; 4136 align-items: center; 4137 justify-content: space-between; 4138 } 4139 4140 #chat-messages { 4141 flex: 1; 4142 /* padding: 10px; */ 4143 /* overflow-y: auto; */ 4144 font-size: 14px; 4145 4146 4147 /* max-height: 420px; 4148 overflow-y: auto; */ 4149 4150 /* padding: 10px 10px; */ 4151 /* padding: 0 10px; */ 4152 padding: 10px 10px 0 10px; 4153 /* height: 420px; */ 4154 /* height: 400px; */ 4155 height: 490px; 4156 overflow-y: auto !important; 4157 cursor: default; 4158 } 4159 4160 .msg { 4161 margin-bottom: 8px; 4162 clear: both; 4163 } 4164 4165 .user { 4166 font-weight: bold; 4167 } 4168 4169 #chat-input { 4170 /* display: flex; 4171 border-top: 1px solid #ddd; */ 4172 4173 position: relative; 4174 display: flex !important; 4175 border-top: 1px solid #ddd; 4176 height: fit-content !important; 4177 /* padding: 8px 8px; */ 4178 } 4179 4180 /* #chat-input .chat-input_inner::before, 4181 #chat-input .chat-input_inner::after { 4182 content: ''; 4183 position: absolute; 4184 top: -1px; 4185 width: 10px; 4186 height: 1px; 4187 background-color: #ddd; 4188 } 4189 4190 #chat-input .chat-input_inner::before { 4191 left: -10px; 4192 } 4193 4194 #chat-input .chat-input_inner::after { 4195 right: -10px; 4196 } */ 4197 4198 #chat-input input { 4199 flex: 1; 4200 padding: 10px; 4201 border: none; 4202 outline: none; 4203 4204 4205 border: 1px solid #ddd; 4206 border-radius: 6px; 4207 padding: 8px 8px; 4208 height: 44px; 4209 width: 254px; 4210 /* width:294px; */ 4211 } 4212 4213 #chat-input button { 4214 /* background: #4f46e5; */ 4215 color: white; 4216 border: none; 4217 /* padding: 10px 15px; */ 4218 cursor: pointer; 4219 4220 background-color: #b2b7ff; 4221 width: 40px !important; 4222 height: 40px !important; 4223 display: flex; 4224 align-items: center; 4225 justify-content: center; 4226 border-radius: 50%; 4227 } 4228 4229 /* --- Video cards --- */ 4230 /* .video-list { 4231 margin-top: 8px; 4232 } */ 4233 4234 .video-card { 4235 background: #f9fafb; 4236 border: 1px solid #e5e7eb; 4237 border-radius: 8px; 4238 padding: 8px; 4239 margin-bottom: 6px; 4240 overflow: auto; 4241 display: flex; 4242 align-items: flex-start; 4243 } 4244 4245 .video-thumb { 4246 width: 80px; 4247 height: 55px; 4248 object-fit: cover; 4249 border-radius: 6px; 4250 margin-right: 12px; 4251 } 4252 4253 .video-title { 4254 font-weight: bold; 4255 font-size: 13px; 4256 } 4257 4258 .video-desc { 4259 font-size: 12px; 4260 color: #555; 4261 margin: 4px 0; 4262 } 4263 4264 .video-btn { 4265 display: block; 4266 margin-top: 4px; 4267 font-size: 12px; 4268 color: white; 4269 background: #4f46e5; 4270 padding: 4px 8px; 4271 border-radius: 4px; 4272 text-decoration: none; 4273 margin: 12px auto !important; 4274 width: 100% !important; 4275 } 4276 4277 #chat-history-toggle { 4278 /* height: 480px; */ 4279 /* height: 415px; */ 4280 /* height: 390px; */ 4281 /* height: 561px; */ 4282 height: 370px; 4283 } 4284 4285 .chat-history-toggle_content { 4286 height: 100%; 4287 display: flex; 4288 flex-direction: column; 4289 /* padding: 16px 16px; */ 4290 4291 padding: 16px 0 16px 16px; 4292 } 4293 4294 .chat-history-toggle_body { 4295 flex: 1; 4296 min-height: 0; 4297 overflow-y: auto; 4298 overflow-x: hidden; 4299 4300 padding-right: 16px; 4301 } 4302 4303 #chat-history-toggle h4 { 4304 margin: 10px 0; 4305 } 4306 4307 #show-chat-btn { 4308 flex-shrink: 0; 4309 margin-top: 0; 4310 } 4311 4312 #show-chat-btn.alfie-shortcut-btn { 4313 width: 100%; 4314 align-self: stretch; 4315 } 4316 4317 /* Primary CTA: stands out from tour / outline shortcuts */ 4318 /* #show-chat-btn.alfie-shortcut-btn--chat-highlight { 4319 background: linear-gradient(135deg, #a6a6cd 0%, #b2afe8 50%, #a5a2c8 100%); 4320 border: 2px solid #312e81; 4321 color: #1a0303; 4322 font-weight: 700; 4323 font-size: 14px; 4324 padding: 10px 14px; 4325 letter-spacing: 0.02em; 4326 } 4327 4328 #show-chat-btn.alfie-shortcut-btn--chat-highlight:hover, 4329 #show-chat-btn.alfie-shortcut-btn--chat-highlight:focus { 4330 border-color: #1e1b4b; 4331 color: #1a0303; 4332 transform: translateY(-1px); 4333 outline: none; 4334 } 4335 4336 #show-chat-btn.alfie-shortcut-btn--chat-highlight:active { 4337 transform: translateY(0); 4338 box-shadow: 0 2px 10px rgba(79, 70, 229, 0.4); 4339 } */ 4340 4341 .send-btn { 4342 margin: 0 10px; 4343 transition: all 0.3s ease; 4344 box-shadow: 0 0 15px 0 rgba(54, 54, 54, 0.3); 4345 } 4346 4347 .send-btn svg {
4348 width: 20px; 4349 height: 24px; 4350 } 4351 4352 .send-btn:hover { 4353 background-color: #fff !important; 4354 } 4355 4356 .send-btn:hover svg { 4357 color: #000; 4358 } 4359 4360 .msg span { 4361 font-weight: bold; 4362 } 4363 4364 .routine-choice-list { 4365 display: block !important; 4366 } 4367 4368 .routine-choice-list .video-btn { 4369 display: block !important; 4370 width: 100% !important; 4371 margin: 0 0 4px 0 !important; 4372 /* border: 1px solid #b2b7ff; */ 4373 border: 2px solid #000; 4374 color: #000; 4375 /* background-color: #b2b7ff; */ 4376 background-color: transparent; 4377 font-weight: 600; 4378 font-size: 14px; 4379 transition: all 0.3s ease; 4380 } 4381 4382 .routine-choice-list .video-btn:hover { 4383 /* color: #000; */ 4384 /* border-color: #000; */ 4385 /* background-color: #fff; */ 4386 /* border-color: #000; */ 4387 border-color: #b2b7ff; 4388 background-color: #b2b7ff; 4389 } 4390 4391 .video-btn { 4392 /* border: 2px solid #b2b7ff; */ 4393 color: #000; 4394 border: 2px solid #000; 4395 background-color: transparent; 4396 /* background-color: #b2b7ff; */ 4397 font-weight: 600; 4398 font-size: 15px; 4399 width: 100%; 4400 transition: all 0.3s ease; 4401 } 4402 4403 .video-btn:hover { 4404 /* color: #000; 4405 border-color: #000; 4406 background-color: #fff; */ 4407 4408 border-color: #b2b7ff; 4409 background-color: #b2b7ff; 4410 } 4411 4412 #load-more-history:disabled { 4413 cursor: not-allowed; 4414 color: #6b7280; 4415 } 4416 4417 .chat-bot_card_inner img { 4418 border-radius: 8px; 4419 } 4420 4421 #voiceBtn .fa-microphone { 4422 font-size: 22px; 4423 } 4424 4425 /* #main-chat-sec_div { 4426 padding: 0 10px; 4427 } */ 4428 4429 /* .chat-fam_img { 4430 width: 100%; 4431 height: 75%; 4432 object-fit: contain; 4433 pointer-events: none; 4434 } */ 4435 4436 /* @-webkit-keyframes "pulse" { 4437 0% { 4438 -webkit-transform: scale(1.1); 4439 transform: scale(1.1); 4440 } 4441 4442 50% { 4443 -webkit-transform: scale(0.8); 4444 transform: scale(0.8); 4445 } 4446 4447 100% { 4448 -webkit-transform: scale(1); 4449 transform: scale(1); 4450 } 4451 } */ 4452 4453 #main-chat-sec_div { 4454 text-align: center; 4455 position: relative; 4456 } 4457 4458 #chat-scroll-bottom-btn { 4459 position: absolute; 4460 right: 16px; 4461 bottom: 70px; 4462 width: 36px; 4463 height: 36px; 4464 border: none; 4465 border-radius: 50%; 4466 /* background-color: #000; */ 4467 background-color: #b2b7ff; 4468 color: #fff; 4469 display: none; 4470 align-items: center; 4471 justify-content: center; 4472 cursor: pointer; 4473 z-index: 7; 4474 box-shadow: 0 3px 10px rgba(0, 0, 0, 0.28); 4475 transition: all 0.2s ease; 4476 } 4477 4478 #chat-scroll-bottom-btn:hover { 4479 /* background-color: #b2b7ff; */ 4480 background-color: #fff; 4481 color: #000; 4482 } 4483 4484 #chat-scroll-bottom-btn i { 4485 font-size: 15px; 4486 } 4487 4488 /* .msg { 4489 text-align: left; 4490 } */ 4491 4492 /* Typing indicator CSS */ 4493 .typing { 4494 display: flex; 4495 align-items: center; 4496 height: 17px; 4497 } 4498 4499 .typing span { 4500 height: 6px; 4501 width: 6px; 4502 background: #b2b7ff; 4503 border-radius: 50%; 4504 display: inline-block; 4505 margin: 0 2px; 4506 animation: bounce 1.3s infinite ease-in-out; 4507 } 4508 4509 .typing span:nth-child(2) { 4510 animation-delay: 0.2s; 4511 } 4512 4513 .typing span:nth-child(3) { 4514 animation-delay: 0.4s; 4515 } 4516 4517 .load-more-typing { 4518 display: inline-flex; 4519 margin-left: 6px; 4520 height: auto; 4521 vertical-align: middle; 4522 } 4523 4524 .load-more-typing span { 4525 background: currentColor; 4526 } 4527 4528 @keyframes bounce { 4529 4530 0%, 4531 80%, 4532 100% { 4533 transform: scale(0); 4534 } 4535 4536 40% { 4537 transform: scale(1.0); 4538 } 4539 } 4540 4541 .load-more-spinner { 4542 width: 14px; 4543 height: 14px; 4544 margin-right: 6px; 4545 border: 2px solid currentColor; 4546 border-top-color: transparent; 4547 border-radius: 50%; 4548 display: inline-block; 4549 vertical-align: middle; 4550 animation: load-more-spin 0.8s linear infinite; 4551 } 4552
4553 @keyframes load-more-spin { 4554 to { 4555 transform: rotate(360deg); 4556 } 4557 } 4558 4559 /* @media (max-width: 767px) { 4560 #chat-history-toggle { 4561 height: calc(100vh - 70px); 4562 } 4563 } */ 4564 4565 .chat-header-close-icon_cls { 4566 cursor: pointer; 4567 padding: 0 8px; 4568 border-radius: 50%; 4569 /* display: none; */ 4570 } 4571 4572 .chat-header-close-icon_cls:hover { 4573 background-color: rgba(255, 255, 255, 0.5); 4574 } 4575 4576 .chat-header-right { 4577 display: flex; 4578 align-items: center; 4579 gap: 8px; 4580 } 4581 4582 .chat-header-menu { 4583 position: relative; 4584 } 4585 4586 #chat-header-menu-btn { 4587 border: none; 4588 background: transparent; 4589 color: #000; 4590 width: 28px; 4591 height: 28px; 4592 border-radius: 50%; 4593 cursor: pointer; 4594 } 4595 4596 #chat-header-menu-btn:hover { 4597 background: rgba(255, 255, 255, 0.5); 4598 } 4599 4600 .chat-header-menu-dropdown { 4601 position: absolute; 4602 top: 34px; 4603 right: 0; 4604 width: 190px; 4605 background: #fff; 4606 border-radius: 12px; 4607 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2); 4608 padding: 8px; 4609 z-index: 30; 4610 display: none; 4611 } 4612 4613 .chat-header-menu-dropdown button { 4614 width: 100%; 4615 border: 0; 4616 background: transparent; 4617 text-align: left; 4618 padding: 10px 12px; 4619 border-radius: 8px; 4620 font-size: 14px; 4621 color: #222; 4622 cursor: pointer; 4623 } 4624 4625 .chat-header-menu-dropdown button:hover { 4626 background: #f3f3f3; 4627 } 4628 4629 #conversation-panel { 4630 display: none; 4631 height: 480px; 4632 overflow-y: auto; 4633 padding: 10px; 4634 cursor: default; 4635 /* background: #f7f7f7; */ 4636 } 4637 4638 .conversation-panel-title { 4639 font-size: 22px; 4640 font-weight: 700; 4641 margin: 6px 6px 14px 6px; 4642 text-align: left; 4643 } 4644 4645 .conversation-item { 4646 background: #ebebeb; 4647 border-radius: 10px; 4648 padding: 12px; 4649 margin-bottom: 10px; 4650 cursor: pointer; 4651 display: flex; 4652 align-items: center; 4653 justify-content: space-between; 4654 border: 1px solid transparent; 4655 transition: border-color 0.2s ease; 4656 } 4657 4658 .conversation-item:hover { 4659 border-color: #b2b7ff; 4660 } 4661 4662 .conversation-item.active { 4663 border-color: #7f89ff; 4664 background: #e4e6ff; 4665 } 4666 4667 .conversation-item-main { 4668 min-width: 0; 4669 } 4670 4671 .conversation-item-title { 4672 font-weight: 600; 4673 font-size: 18px; 4674 margin: 0 0 4px 0; 4675 color: #272727; 4676 text-align: left; 4677 white-space: nowrap; 4678 overflow: hidden; 4679 text-overflow: ellipsis; 4680 } 4681 4682 .conversation-item-time { 4683 font-size: 14px; 4684 color: #6f6f6f; 4685 text-align: left; 4686 } 4687 4688 .conversation-item-arrow { 4689 color: #404040; 4690 padding-left: 12px; 4691 font-size: 16px; 4692 } 4693 4694 .conversation-empty { 4695 background: #ebebeb; 4696 border-radius: 10px; 4697 padding: 12px; 4698 color: #666; 4699 text-align: left; 4700 } 4701 4702 .bot-message { 4703 background-color: #eeeeee; 4704 padding: 2px 6px; 4705 float: left; 4706 border-radius: 4px 12px 12px 12px; 4707 text-align: left; 4708 } 4709 4710 .user-message { 4711 background-color: #b2b7ff; 4712 padding: 2px 6px; 4713 float: right; 4714 border-radius: 12px 4px 12px 12px; 4715 text-align: right; 4716 } 4717 4718 .chat-fam_img-header { 4719 /* width: 10px; */ 4720 width: 26px; 4721 margin-right: 8px; 4722 } 4723 4724 #load-more-history { 4725 /* margin: 12px 12px 2px 12px !important; 4726 width: 93.5% !important; */ 4727 4728 margin: 12px auto 2px auto !important; 4729 width: auto !important; 4730 4731 /* position: relative; 4732 padding: 12px 26px; 4733 border-radius: 18px; 4734 background: rgba(255, 255, 255, 0.8); 4735 backdrop-filter: blur(12px); 4736 border: 1px solid rgba(0, 0, 0, 0.1); 4737 cursor: pointer; 4738 transition: all 0.25s ease; 4739 box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.04), 0px 1px 2px rgba(0, 0, 0, 0.02); 4740 display: inline-flex; 4741 align-items: center; 4742 justify-content: center; */ 4743 4744 4745 background: rgba(255, 255, 255, 0.8); 4746 padding: 5px 20px; 4747 border-radius: 4px; 4748 border: 1px solid rgba(0, 0, 0, 0.1); 4749 box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.04), 0px 1px 2px rgba(0, 0, 0, 0.02); 4750 /* color: #6b7280; */ 4751 color: #4a5565; 4752 } 4753 4754 #load-more-history:hover { 4755 background: rgba(255, 255, 255, 0.9); 4756 box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.07), 0px 2px 4px rgba(0, 0, 0, 0.03); 4757 } 4758 4759 #load-more-history-wrap { 4760 min-height: 40px; 4761 display: flex; 4762 justify-content: center; 4763 align-items: flex-start; 4764 } 4765 4766 @media (max-width: 767px) { 4767 #load-more-history-wrap { 4768 min-height: 44px; 4769 } 4770 } 4771 4772 /* .alfie-welcome-intro { 4773 margin: 12px 0; 4774 font-weight: 600; 4775 color: #1e293b; 4776 line-height: 1.35; 4777 text-align: center 4778 } */ 4779 4780 .alfie-context-msg { 4781 margin: 0 0 14px; 4782 font-size: 15px; 4783 line-height: 1.45; 4784 color: #0467f4; 4785 text-align: center; 4786 padding: 0 8px; 4787 } 4788 4789 /* .alfie-welcome-actions { 4790 display: flex; 4791 flex-direction: column; 4792 gap: 8px; 4793 width: 100%; 4794 max-width: 280px; 4795 margin: 0 auto 14px; 4796 } */ 4797 4798 .alfie-shortcut-stack { 4799 display: flex; 4800 flex-direction: column; 4801 gap: 8px; 4802 margin-top: 10px; 4803 } 4804 4805 /* .alfie-shortcut-btn { 4806 display: block; 4807 width: 100%; 4808 text-align: center; 4809 padding: 10px 14px; 4810 border-radius: 10px; 4811 border: 1px solid #6366f1; 4812 background: linear-gradient(180deg, #eef0ff 0%, #e0e4ff 100%); 4813 color: #312e81; 4814 font-size: 13px; 4815 font-weight: 600; 4816 cursor: pointer; 4817 transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; 4818 text-decoration: none; 4819 box-sizing: border-box; 4820 } 4821 4822 .alfie-shortcut-btn:hover, 4823 .alfie-shortcut-btn:focus { 4824 border-color: #4f46e5; 4825 box-shadow: 0 4px 12px rgba(99, 102, 241, 0.25); 4826 outline: none; 4827 } 4828 4829 .alfie-shortcut-btn.secondary { 4830 background: linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%); 4831 border-color: #94a3b8; 4832 color: #334155; 4833 } 4834 4835 .alfie-shortcut-btn.outline { 4836 background: #fff; 4837 border-color: #c7d2fe; 4838 color: #4338ca; 4839 } */ 4840 4841 .alfie-opening-block .alfie-context-line { 4842 margin: 8px 0 0; 4843 font-size: 13px; 4844 line-height: 1.45; 4845 color: #475569; 4846 font-weight: 500; 4847 } 4848 4849 .alfie-shortcut-followup { 4850 padding-top: 4px; 4851 } 4852 4853 .alfie-shortcut-hint { 4854 font-size: 12px; 4855 color: #64748b; 4856 margin-bottom: 6px; 4857 font-weight: 600; 4858 } 4859 4860 /* .alfie-welcome-actions-btn_one { 4861 font-size: 14px; 4862 background: rgb(240, 221, 246) !important; 4863 border: 1px solid rgb(208, 166, 224) !important; 4864 } 4865 4866 .alfie-welcome-actions-btn_two { 4867 font-size: 14px; 4868 background: rgb(229, 243, 222) !important; 4869 border: 1px solid rgb(182, 216, 167) !important; 4870 } 4871 4872 .alfie-welcome-actions-btn_three { 4873 font-size: 14px; 4874 background: rgb(255, 221, 225) !important; 4875 border: 1px solid rgb(242, 155, 165) !important; 4876 } 4877 4878 .alfie-welcome-actions-btn_four { 4879 font-size: 14px; 4880 background: rgb(220, 215, 254) !important; 4881 border: 1px solid rgb(138, 127, 232) !important; 4882 } 4883 4884 .alfie-welcome-actions-btn_five { 4885 font-size: 14px; 4886 background: rgb(207, 243, 228) !important; 4887 border: 1px solid rgb(134, 208, 174) !important; 4888 } */ 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 .chat-history-toggle_body-img-title { 4900 text-align: center; 4901 padding-bottom: 24px; 4902 } 4903 4904 .chat-fam_img { 4905 /* animation: pulse 2s linear infinite; */ 4906 width: 90px; 4907 height: 90px; 4908 margin: auto; 4909 border-radius: 50%; 4910 overflow: hidden; 4911 border: 5px solid #fff; 4912 background: #d9e1ff; 4913 box-shadow: 0 10px 20px rgba(0, 0, 0, 0.08); 4914 } 4915 4916 .chat-history-toggle_body-title { 4917 margin-top: 18px; 4918 font-size: 30px; 4919 line-height: 38px; 4920 font-weight: 800; 4921 font-family: 'Plus Jakarta Sans', sans-serif; 4922 color: #191c1e; 4923 } 4924 4925 .alfie-welcome-intro { 4926 /* margin: 0 0 12px; */ 4927 /* margin: 12px 0; */ 4928 /* margin: 8px 0 18px; */ 4929 /* font-size: 15px; */ 4930 /* font-weight: 600; */ 4931 margin-top: 10px; 4932 font-size: 16px; 4933 line-height: 24px; 4934 color: #6d7175; 4935 max-width: 300px; 4936 margin-left: auto; 4937 margin-right: auto; 4938 font-family: 'Inter', sans-serif; 4939 margin-bottom: 0; 4940 } 4941 4942 .alfie-welcome-actions { 4943 display: flex; 4944 flex-direction: column; 4945 /* gap: 8px; */ 4946 gap: 16px; 4947 width: 100%; 4948 /* max-width: 280px; */ 4949 /* margin: 0 auto 14px; */ 4950 /* margin: 18px auto 18px; */ 4951 padding-bottom: 24px; 4952 } 4953 4954 .response-status { 4955 text-align: center; 4956 font-size: 14px; 4957 color: #7b7f84; 4958 padding-bottom: 18px; 4959 } 4960 4961 .response-status span { 4962 width: 6px; 4963 height: 6px; 4964 display: inline-block; 4965 background: #3c6756; 4966 border-radius: 50%; 4967 margin-right: 6px; 4968 position: relative; 4969 top: -1px; 4970 } 4971 4972 .alfie-welcome-actions-btn_one { 4973 color: #4f3b63 !important; 4974 background: linear-gradient(to right, #e7d7f4, #dcc8ef) !important; 4975 } 4976 4977 .alfie-welcome-actions-btn_two { 4978 color: #234e3f; 4979 background: linear-gradient(to right, #beedd8, #d9f5e7); 4980 } 4981 4982 .alfie-welcome-actions-btn_three { 4983 color: #8a4b24 !important; 4984 background: linear-gradient(to right, #ffe3cf, #ffd3b5) !important; 4985 } 4986 4987 .alfie-welcome-actions-btn_four { 4988 color: #334282 !important; 4989 background: linear-gradient(to right, #dde1ff, #cfd7ff) !important; 4990 } 4991 4992 .alfie-welcome-actions-btn_five { 4993 4994 color: #3f4759 !important; 4995 background: linear-gradient(to right, #dbe2fa, #cfd6ec) !important; 4996 } 4997 4998 .alfie-shortcut-btn { 4999 /* display: block; */ 5000 display: flex; 5001 align-items: center; 5002 justify-content: space-between; 5003 width: 100%; 5004 text-align: center; 5005 /* padding: 10px 14px; */ 5006 padding: 18px 18px; 5007 border-radius: 18px; 5008 /* border: 1px solid #6366f1; */ 5009 border: 0; 5010 background: linear-gradient(180deg, #eef0ff 0%, #e0e4ff 100%); 5011 color: #312e81; 5012 /* font-size: 13px; */ 5013 font-weight: 600; 5014 cursor: pointer; 5015 transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; 5016 text-decoration: none; 5017 box-sizing: border-box; 5018 } 5019 5020 .alfie-shortcut-btn:hover, 5021 .alfie-shortcut-btn:focus { 5022 transform: translateY(-2px); 5023 } 5024 5025 .alfie-shortcut-btn div { 5026 display: flex; 5027 align-items: center; 5028 } 5029 5030 .alfie-shortcut-btn div i { 5031 background: rgba(255, 255, 255, 0.7); 5032 border-radius: 12px; 5033 width: 42px; 5034 height: 42px; 5035 display: inline-flex; 5036 align-items: center; 5037 justify-content: center; 5038 margin-right: 14px; 5039 font-size: 20px; 5040 } 5041 5042 .alfie-shortcut-btn div span { 5043 font-size: 15px; 5044 } 5045 5046 .alfie-shortcut-btn i { 5047 font-family: FontAwesome !important; 5048 } 5049 5050 .chat-header-title { 5051 font-size: 16px; 5052 font-weight: 600; 5053 } 5054</style> 5055 5056<div class="fam-chat-widget-fragment" data-fam-chat-widget="1"> 5057 <!-- <button id="chat-toggle">ð¬</button> --> 5058 <button id="chat-toggle"> 5059 <i class="fa fa-comment" aria-hidden="true"></i>
5060 <span class="chat-toggle-tooltip-text">Drag to move. Click to open chat.</span> 5061 </button> 5062 5063 <div id="chat-box"> 5064 <!-- <div id="chat-header">AI Assistant</div> --> 5065 <div id="chat-header"> 5066 <div style="display: flex; align-items: center;"> 5067 <span id="chat-back-arrow" style="display:none; cursor:pointer; margin-right:10px;"> 5068 <i class="fa fa-chevron-left" aria-hidden="true"></i> 5069 </span> 5070 <img src="https://www.funandmoving.com/assets/images/chat-fam-header_02.png" class="chat-fam_img-header" 5071 alt="Chat Fam"> 5072 <div class="chat-header-title"> 5073 Hi, Iâm Alfie What would you like to do: 5074 </div> 5075 </div> 5076 <div class="chat-header-right"> 5077 <div class="chat-header-menu"> 5078 <button id="chat-header-menu-btn" aria-label="Open chat menu" title="Open chat menu"> 5079 <i class="fa fa-ellipsis-v" aria-hidden="true"></i> 5080 </button> 5081 <div id="chat-header-menu-dropdown" class="chat-header-menu-dropdown"> 5082 <button id="menu-new-conversation" type="button">+ New Conversation</button> 5083 <button id="menu-all-conversations" type="button">Conversations</button> 5084 </div> 5085 </div> 5086 <div class="chat-header-close-icon_cls" id="chat-header-close-icon"> 5087 <i class="fa fa-times" aria-hidden="true"></i> 5088 </div> 5089 </div> 5090 </div> 5091 <div id="conversation-panel"> 5092 <div class="conversation-panel-title">Conversations</div> 5093 <div id="conversation-list"></div> 5094 </div> 5095 <div id="chat-history-toggle"> 5096 <div class="chat-history-toggle_content"> 5097 <div class="chat-history-toggle_body"> 5098 <!-- <div class="chat-history-toggle_body-img-title"> 5099 <img src="" class="chat-fam_img" 5100 alt="Chat Fam"> 5101 <h2 class="chat-history-toggle_body-title">Hi! I'm 5102 </h2> 5103 <p class="alfie-welcome-intro">How can I help you get moving today?</p> 5104 </div> --> 5105 <div class="alfie-welcome-actions" id="alfie-welcome-actions"> 5106 <button type="button" id="alfie-routine-tour-btn" 5107 class="alfie-shortcut-btn alfie-welcome-actions-btn_two" 5108 data-alfie-action="routine-tour"> 5109 <div> 5110 <i class="fa fa-compass"></i> 5111 <span>Take the Routine Tour</span> 5112 </div> 5113 <i class="fa fa-angle-right"></i> 5114 </button> 5115 <button type="button" id="alfie-whats-new-btn" 5116 class="alfie-shortcut-btn outline alfie-welcome-actions-btn_four" 5117 data-alfie-action="whats-new" 5118 data-alfie-href="https://www.funandmoving.com/about/founder-thoughts"> 5119 <div> 5120 <i class="fa fa-star"></i> 5121 <span>See What's New</span> 5122 </div> 5123 <i class="fa fa-angle-right"></i> 5124 </button> 5125 <button type="button" id="show-chat-btn" 5126 class="alfie-shortcut-btn alfie-shortcut-btn--chat-highlight alfie-welcome-actions-btn_five"> 5127 <div> 5128 <i class="fa fa-comment"></i> 5129 <span>Chat with Alfie</span> 5130 </div> 5131 <i class="fa fa-angle-right"></i> 5132 </button> 5133 </div> 5134 <div class="response-status">
5135 <span></span> 5136 Typically responds in seconds 5137 </div> 5138 </div> 5139 </div> 5140 </div> 5141 <div id="main-chat-sec_div"> 5142 <div id="load-more-history-wrap"> 5143 <button id="load-more-history" style="display: block; visibility: hidden; pointer-events: none;" 5144 class="video-btn"> <!-- margin:8px auto; --> 5145 Load more history 5146 </button> 5147 </div> 5148 <div id="chat-messages"></div> 5149 <button id="chat-scroll-bottom-btn" aria-label="Scroll to bottom" title="Scroll to bottom"> 5150 <i class="fa fa-chevron-down" aria-hidden="true"></i> 5151 </button> 5152 <div id="chat-input"> 5153 <div class="chat-input_inner" style="display: flex; padding: 8px 8px; cursor: default;"> 5154 <input id="message" placeholder="Type a message..." /> 5155 <button onclick="sendMessage()" class="send-btn"> 5156 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" height="25px"> 5157 <path fill="currentColor" 5158 d="M568.4 37.7C578.2 34.2 589 36.7 596.4 44C603.8 51.3 606.2 62.2 602.7 72L424.7 568.9C419.7 582.8 406.6 592 391.9 592C377.7 592 364.9 583.4 359.6 570.3L295.4 412.3C290.9 401.3 292.9 388.7 300.6 379.7L395.1 267.3C400.2 261.2 399.8 252.3 394.2 246.7C388.6 241.1 379.6 240.7 373.6 245.8L261.2 340.1C252.1 347.7 239.6 349.7 228.6 345.3L70.1 280.8C57 275.5 48.4 262.7 48.4 248.5C48.4 233.8 57.6 220.7 71.5 215.7L568.4 37.7z"> 5159 </path> 5160 </svg> 5161 <!-- Send --> 5162 </button> 5163 <button id="voiceBtn" class="voiceBtn_cls voice_btn_desktop chatbot-voice_btn"> 5164 <!-- <div class="voicebtn-ring"></div> --> 5165 <i class="fa fa-microphone" aria-hidden="true"></i> 5166 </button> 5167 </div> 5168 </div> 5169 </div> 5170 </div> 5171 5172
5172<script> 5173 const chatbotName = "Alfie"; 5174 const alfieShowChatLabel = '<div><i class="fa fa-comment"></i><span>Chat with ' + chatbotName + '</span></div><i class="fa fa-angle-right"></i>'; 5175 const alfieHideChatLabel = '⬠Hide chat'; 5176 window.alfieContext = {"is_logged_in":false,"account_under_24h":false,"inactive_week":false,"has_my_plan":false,"my_plan_url":"https:\/\/www.funandmoving.com\/home\/routine_plan_list","whats_new_url":"https:\/\/www.funandmoving.com\/about\/founder-thoughts"}; 5177 5178 function alfieEscapeAttr(str) { 5179 return String(str || '') 5180 .replace(/&/g, '&') 5181 .replace(/"/g, '"') 5182 .replace(/</g, '<') 5183 .replace(/>/g, '>'); 5184 } 5185 5186 function alfieNormalizePathname(pathname) { 5187 var p = String(pathname || '/').replace(/\\/g, '/'); 5188 p = p.replace(/\/index\.php(?=\/|$)/i, ''); 5189 p = p.replace(/\/+/g, '/'); 5190 if (p.length > 1) { 5191 p = p.replace(/\/+$/, ''); 5192 } 5193 return (p || '/').toLowerCase(); 5194 } 5195 5196 function alfieIsSameDocumentUrl(href) { 5197 if (!href) { 5198 return false; 5199 } 5200 try { 5201 var dest = new URL(href, window.location.href); 5202 if (dest.origin !== window.location.origin) { 5203 return false; 5204 } 5205 return alfieNormalizePathname(window.location.pathname) === alfieNormalizePathname(dest.pathname); 5206 } catch (err) { 5207 return false; 5208 } 5209 } 5210 5211 function alfieBuildContextParagraph(ctx) { 5212 if (ctx && ctx.is_logged_in && ctx.account_under_24h) { 5213 return '<p class="alfie-context-line">Welcome! Would you like a Routine Tour to see how we track your 150-minute goal?</p>'; 5214 } 5215 if (ctx && ctx.is_logged_in && ctx.inactive_week) { 5216 return '<p class="alfie-context-line">It\'s been a while! Want a quick Activity Log Tour to see how close you are to your next medal?</p>'; 5217 } 5218 return ''; 5219 } 5220 5221 function alfieBuildShortcutStackHtml(ctx) { 5222 /* "Chat with â¦" stays only on #alfie-welcome-actions (#show-chat-btn); not injected into chat-message shortcut rows. */ 5223 const c = ctx || {}; 5224 const url = c.whats_new_url || 'https://www.funandmoving.com/about/founder-thoughts'; 5225 let html = '<div class="alfie-shortcut-stack">'; 5226 if (c.is_logged_in && c.has_my_plan) { 5227 const planUrl = c.my_plan_url || 'https://www.funandmoving.com/home/routine_plan_list'; 5228 html += '<button type="button" class="alfie-shortcut-btn secondary" data-alfie-action="continue-my-plan" data-alfie-href="' + alfieEscapeAttr(planUrl) + '">Continue My Plan</button>'; 5229 } 5230 html += '<button type="button" class="alfie-shortcut-btn" data-alfie-action="routine-tour">Take the Routine Tour</button>'; 5231 if (c.is_logged_in) { 5232 html += '<button type="button" class="alfie-shortcut-btn secondary" data-alfie-action="activity-log-tour">Activity Log Tour</button>'; 5233 } 5234 html += '<button type="button" class="alfie-shortcut-btn outline" data-alfie-action="whats-new" data-alfie-href="' + alfieEscapeAttr(url) + '">See What\'s New</button>'; 5235 html += '</div>'; 5236 return html; 5237 } 5238 5239 function alfiePathIsRoutineList(path) { 5240 if (typeof window.famIsRoutineListPath === 'function') { 5241 return window.famIsRoutineListPath(path); 5242 } 5243 var p = (path || '').toLowerCase(); 5244 return p.indexOf('routine_list') !== -1 || /(^|\/)routines(\/|$)/.test(p); 5245 } 5246 5247 function alfiePathIsActivityLog(path) { 5248 if (typeof window.famIsActivityLogPath === 'function') { 5249 return window.famIsActivityLogPath(path); 5250 } 5251 return (path || '').toLowerCase().indexOf('customer_progress_report') !== -1; 5252 } 5253 5254 function alfieStartRoutineTour() { 5255 var $ = window.jQuery; 5256 if ($ && $('#tourChoiceModal').length) { 5257 $('#tourChoiceModal').modal('hide'); 5258 } 5259 var base = 'https://www.funandmoving.com/'; 5260 var path = window.location.pathname || ''; 5261 if (alfiePathIsRoutineList(path)) { 5262 /* Chatbot only: on routines URL already â no reload, no tour (menu "See What's New" still starts tour). */ 5263 return; 5264 } 5265 var routineDone = typeof window.famHasRoutineTourBeenCompleted === 'function' && window.famHasRoutineTourBeenCompleted(); 5266 try { 5267 if (!routineDone) { 5268 sessionStorage.setItem('showRoutineTour', 'true'); 5269 } else { 5270 sessionStorage.removeItem('showRoutineTour'); 5271 } 5272 } catch (e) { } 5273 window.location.href = base + 'Routine/routine_list'; 5274 } 5275 5276 function alfieStartActivityLogTour() { 5277 if (!isChatUserLoggedIn()) { 5278 window.location.href = 'https://www.funandmoving.com/sign_in'; 5279 return; 5280 } 5281 var $ = window.jQuery; 5282 if ($ && $('#tourChoiceModal').length) { 5283 $('#tourChoiceModal').modal('hide'); 5284 } 5285 var base = 'https://www.funandmoving.com/'; 5286 var path = window.location.pathname || ''; 5287 if (alfiePathIsActivityLog(path)) { 5288 /* Chatbot only: already on activity log â no reload, no tour. */ 5289 return; 5290 } 5291 var activityDone = typeof window.famHasActivityLogTourBeenCompleted === 'function' && window.famHasActivityLogTourBeenCompleted(); 5292 try { 5293 if (!activityDone) { 5294 sessionStorage.setItem('showProgressReportTour', 'true'); 5295 } else { 5296 sessionStorage.removeItem('showProgressReportTour'); 5297 } 5298 } catch (e) { } 5299 window.location.href = base + 'customer_progress_report'; 5300 } 5301 5302 document.addEventListener('click', function (e) { 5303 var btn = e.target.closest('[data-alfie-action]'); 5304 if (!btn || !document.getElementById('chat-box') || !document.getElementById('chat-box').contains(btn)) { 5305 return; 5306 } 5307 var act = btn.getAttribute('data-alfie-action'); 5308 if (act === 'continue-my-plan') { 5309 e.preventDefault(); 5310 var planHref = btn.getAttribute('data-alfie-href') || (window.alfieContext && window.alfieContext.my_plan_url); 5311 if (planHref && !alfieIsSameDocumentUrl(planHref)) { 5312 window.location.href = planHref; 5313 } 5314 return; 5315 } 5316 if (act === 'whats-new') { 5317 e.preventDefault(); 5318 var newsHref = btn.getAttribute('data-alfie-href') || (window.alfieContext && window.alfieContext.whats_new_url); 5319 if (newsHref && !alfieIsSameDocumentUrl(newsHref)) { 5320 window.location.href = newsHref; 5321 } 5322 return; 5323 } 5324 if (btn.tagName === 'A' && btn.getAttribute('href')) { 5325 return; 5326 }
5327 if (act === 'routine-tour') { 5328 e.preventDefault(); 5329 alfieStartRoutineTour(); 5330 } else if (act === 'activity-log-tour') { 5331 e.preventDefault(); 5332 alfieStartActivityLogTour(); 5333 } 5334 }); 5335 5336 const toggleBtn = document.getElementById('chat-toggle'); 5337 const chatBox = document.getElementById('chat-box'); 5338 const messages = document.getElementById('chat-messages'); 5339 const chatInput = document.getElementById('chat-input'); 5340 const showChatBtn = document.getElementById('show-chat-btn'); 5341 const chatHistoryToggle = document.getElementById('chat-history-toggle'); 5342 const mainChatSecDiv = document.getElementById('main-chat-sec_div'); 5343 const backArrow = document.getElementById('chat-back-arrow'); 5344 5345 const loadMoreBtn = document.getElementById('load-more-history'); 5346 const closeChatbotBtn = document.getElementById('chat-header-close-icon'); 5347 const scrollBottomBtn = document.getElementById('chat-scroll-bottom-btn'); 5348 const conversationPanel = document.getElementById('conversation-panel'); 5349 const conversationList = document.getElementById('conversation-list'); 5350 const menuBtn = document.getElementById('chat-header-menu-btn'); 5351 const menuDropdown = document.getElementById('chat-header-menu-dropdown'); 5352 const menuNewConversation = document.getElementById('menu-new-conversation'); 5353 const menuAllConversations = document.getElementById('menu-all-conversations'); 5354 const chatHeaderMenu = document.querySelector('.chat-header-menu'); 5355 5356 function appendAlfieShortcutRowAfter(container, ctx) { 5357 if (!container) return; 5358 var wrap = document.createElement('div'); 5359 wrap.className = 'msg bot-message alfie-shortcut-followup'; 5360 wrap.innerHTML = '<div class="alfie-shortcut-hint">Quick shortcuts</div>' + alfieBuildShortcutStackHtml(ctx || window.alfieContext || {}); 5361 container.appendChild(wrap); 5362 scrollChatToBottom(); 5363 } 5364 5365 function renderAlfieChatOpening() { 5366 if (!messages || messages.querySelector('.alfie-opening-block')) { 5367 return; 5368 } 5369 var ctx = window.alfieContext || {}; 5370 var block = document.createElement('div'); 5371 block.className = 'msg bot-message alfie-opening-block'; 5372 var inner = '<span class="user">' + escapeHtml(chatbotName) + ':</span> '; 5373 inner += 'Hi! I\'m ' + escapeHtml(chatbotName) + '. How can I help you get moving today?'; 5374 inner += alfieBuildContextParagraph(ctx); 5375 inner += alfieBuildShortcutStackHtml(ctx); 5376 block.innerHTML = inner; 5377 messages.appendChild(block); 5378 scrollChatToBottom(); 5379 } 5380 5381 // Added By Sahejad Draggable Chatbot 5382 let widgetOffsetX = 0; 5383 let widgetOffsetY = 0; 5384 let widgetDragState = null; 5385 let suppressToggleClick = false; 5386 const supportsPointerEvents = typeof window !== 'undefined' && 'PointerEvent' in window; 5387 const DRAG_THRESHOLD = 4; 5388 const TOUCH_DRAG_THRESHOLD = 14; 5389 const interactiveDragTargets = 'input, textarea, button, a, select, option, label, [contenteditable="true"]'; 5390 const chatBoxNonDragAreas = '#chat-messages, #chat-input, #conversation-panel, .chat-header-right'; 5391 5392 function applyWidgetTransform() { 5393 const translateValue = `translate(${widgetOffsetX}px, ${widgetOffsetY}px)`; 5394 toggleBtn.style.transform = translateValue; 5395 chatBox.style.transform = translateValue; 5396 } 5397 5398 function clampValue(value, min, max) { 5399 return Math.min(Math.max(value, min), max); 5400 } 5401 5402 function getBoundaryElements() { 5403 if (window.getComputedStyle(chatBox).display === 'flex') { 5404 return [chatBox, toggleBtn]; 5405 } 5406 return [toggleBtn]; 5407 } 5408 5409 function getDeltaBounds(rects) { 5410 let minX = -Infinity; 5411 let maxX = Infinity; 5412 let minY = -Infinity; 5413 let maxY = Infinity; 5414
5415 rects.forEach((rect) => { 5416 minX = Math.max(minX, -rect.left); 5417 maxX = Math.min(maxX, window.innerWidth - rect.right); 5418 minY = Math.max(minY, -rect.top); 5419 maxY = Math.min(maxY, window.innerHeight - rect.bottom); 5420 }); 5421 5422 return { minX, maxX, minY, maxY }; 5423 } 5424 5425 function applyViewportClampForElements(elements) { 5426 const rects = elements.map((el) => el.getBoundingClientRect()); 5427 const bounds = getDeltaBounds(rects); 5428 const adjustX = clampValue(0, bounds.minX, bounds.maxX); 5429 const adjustY = clampValue(0, bounds.minY, bounds.maxY); 5430 5431 if (adjustX !== 0 || adjustY !== 0) { 5432 widgetOffsetX += adjustX; 5433 widgetOffsetY += adjustY; 5434 applyWidgetTransform(); 5435 } 5436 } 5437 5438 function clampChatBoxIntoViewport() { 5439 if (window.getComputedStyle(chatBox).display !== 'flex') return; 5440 if (widgetOffsetX === 0 && widgetOffsetY === 0) return; 5441 applyViewportClampForElements([chatBox]); 5442 } 5443 5444 function getEventClientPoint(event) { 5445 if (event.touches && event.touches.length > 0) { 5446 return { 5447 clientX: event.touches[0].clientX, 5448 clientY: event.touches[0].clientY 5449 }; 5450 } 5451 5452 if (event.changedTouches && event.changedTouches.length > 0) { 5453 return { 5454 clientX: event.changedTouches[0].clientX, 5455 clientY: event.changedTouches[0].clientY 5456 }; 5457 } 5458 5459 return { 5460 clientX: event.clientX, 5461 clientY: event.clientY 5462 }; 5463 } 5464 5465 function onWidgetDragMove(event) { 5466 if (!widgetDragState) return; 5467 5468 const point = getEventClientPoint(event); 5469 const totalDeltaX = point.clientX - widgetDragState.startX; 5470 const totalDeltaY = point.clientY - widgetDragState.startY; 5471 const dragThreshold = widgetDragState.pointerType === 'touch' ? TOUCH_DRAG_THRESHOLD : DRAG_THRESHOLD; 5472 5473 if (!widgetDragState.moved && 5474 Math.abs(totalDeltaX) < dragThreshold && 5475 Math.abs(totalDeltaY) < dragThreshold) { 5476 return; 5477 } 5478 5479 widgetDragState.moved = true; 5480 document.body.style.userSelect = 'none'; 5481 toggleBtn.style.transition = 'none'; 5482 5483 let stepDeltaX = point.clientX - widgetDragState.lastX; 5484 let stepDeltaY = point.clientY - widgetDragState.lastY; 5485 const boundaryRects = widgetDragState.boundaryElements.map((el) => el.getBoundingClientRect()); 5486 const bounds = getDeltaBounds(boundaryRects); 5487 stepDeltaX = clampValue(stepDeltaX, bounds.minX, bounds.maxX); 5488 stepDeltaY = clampValue(stepDeltaY, bounds.minY, bounds.maxY); 5489 5490 widgetOffsetX += stepDeltaX; 5491 widgetOffsetY += stepDeltaY; 5492 applyWidgetTransform(); 5493 5494 widgetDragState.lastX = point.clientX; 5495 widgetDragState.lastY = point.clientY; 5496 event.preventDefault(); 5497 } 5498 5499 function onWidgetDragEnd() { 5500 if (!widgetDragState) return; 5501 5502 suppressToggleClick = widgetDragState.startedFromToggle && widgetDragState.moved; 5503 widgetDragState = null; 5504 document.body.style.userSelect = ''; 5505 toggleBtn.style.transition = ''; 5506 5507 document.removeEventListener('pointermove', onWidgetDragMove); 5508 document.removeEventListener('pointerup', onWidgetDragEnd); 5509 document.removeEventListener('pointercancel', onWidgetDragEnd); 5510 document.removeEventListener('mousemove', onWidgetDragMove); 5511 document.removeEventListener('mouseup', onWidgetDragEnd); 5512 document.removeEventListener('touchmove', onWidgetDragMove); 5513 document.removeEventListener('touchend', onWidgetDragEnd); 5514 document.removeEventListener('touchcancel', onWidgetDragEnd); 5515 } 5516 5517 function startWidgetDrag(event) { 5518 if (event.type === 'mousedown' && event.button !== 0) return; 5519 if (event.pointerType === 'mouse' && event.button !== 0) return; 5520 5521 if (event.target.closest(interactiveDragTargets) && event.currentTarget !== toggleBtn) { 5522 return; 5523 } 5524 5525 if (event.currentTarget === chatBox && event.target.closest(chatBoxNonDragAreas)) { 5526 return; 5527 } 5528 5529 const isTouchStart = event.pointerType === 'touch' || event.type === 'touchstart'; 5530 if (isTouchStart && event.cancelable) { 5531 event.preventDefault(); 5532 } 5533 5534 const point = getEventClientPoint(event); 5535 widgetDragState = { 5536 startX: point.clientX, 5537 startY: point.clientY, 5538 lastX: point.clientX, 5539 lastY: point.clientY, 5540 boundaryElements: getBoundaryElements(), 5541 moved: false, 5542 startedFromToggle: event.currentTarget === toggleBtn, 5543 pointerType: event.pointerType || (event.touches ? 'touch' : 'mouse') 5544 }; 5545 5546 document.addEventListener('pointermove', onWidgetDragMove, { 5547 passive: false 5548 }); 5549 document.addEventListener('pointerup', onWidgetDragEnd); 5550 document.addEventListener('pointercancel', onWidgetDragEnd); 5551 5552 if (!supportsPointerEvents) { 5553 if (widgetDragState.pointerType === 'touch') { 5554 document.addEventListener('touchmove', onWidgetDragMove, { 5555 passive: false 5556 }); 5557 document.addEventListener('touchend', onWidgetDragEnd); 5558 document.addEventListener('touchcancel', onWidgetDragEnd); 5559 } else { 5560 document.addEventListener('mousemove', onWidgetDragMove); 5561 document.addEventListener('mouseup', onWidgetDragEnd); 5562 } 5563 } 5564 } 5565 5566 window.addEventListener('resize', () => { 5567 applyViewportClampForElements(getBoundaryElements()); 5568 }); 5569 5570 if (supportsPointerEvents) { 5571 toggleBtn.addEventListener('pointerdown', startWidgetDrag, { 5572 passive: false 5573 }); 5574 chatBox.addEventListener('pointerdown', startWidgetDrag, { 5575 passive: false 5576 }); 5577 } else { 5578 toggleBtn.addEventListener('mousedown', startWidgetDrag); 5579 chatBox.addEventListener('mousedown', startWidgetDrag); 5580 toggleBtn.addEventListener('touchstart', startWidgetDrag, { 5581 passive: false 5582 }); 5583 chatBox.addEventListener('touchstart', startWidgetDrag, { 5584 passive: false 5585 }); 5586 }
5587 toggleBtn.style.touchAction = 'none'; 5588 chatBox.style.touchAction = 'auto'; 5589 applyWidgetTransform(); 5590 // Added By Sahejad Draggable Chatbot 5591 5592 let historyOffset = 0; 5593 const HISTORY_LIMIT = 3; 5594 let hasMoreHistory = true; 5595 let activeConversationId = null; 5596 let isConversationView = false; 5597 let isLoadingHistory = false; 5598 const loadMoreDefaultLabel = 'Load more history'; 5599 5600 loadMoreBtn.onclick = async () => { 5601 if (isLoadingHistory) return; 5602 setLoadMoreButtonLoading(true); 5603 try { 5604 await loadChatHistory(true); 5605 } finally { 5606 setLoadMoreButtonLoading(false); 5607 } 5608 }; 5609 5610 closeChatbotBtn.onclick = () => { 5611 showWelcomePanel(); 5612 chatBox.style.display = 'none'; 5613 chatBox.style.visibility = ''; 5614 chatBox.style.pointerEvents = ''; 5615 closeMenuDropdown(); 5616 toggleScrollBottomButton(); 5617 }; 5618 5619 if (menuBtn) { 5620 menuBtn.onclick = (e) => { 5621 if (!isChatUserLoggedIn()) return; 5622 e.stopPropagation(); 5623 if (!menuDropdown) return; 5624 menuDropdown.style.display = menuDropdown.style.display === 'block' ? 'none' : 'block'; 5625 }; 5626 } 5627 5628 document.addEventListener('click', (e) => { 5629 if (!menuDropdown || !menuBtn) return; 5630 if (!menuDropdown.contains(e.target) && !menuBtn.contains(e.target)) { 5631 closeMenuDropdown(); 5632 } 5633 }); 5634 5635 if (menuAllConversations) { 5636 menuAllConversations.onclick = async () => { 5637 if (!isChatUserLoggedIn()) return; 5638 closeMenuDropdown(); 5639 if (isChatUserLoggedIn()) { 5640 await loadConversations(); 5641 } 5642 showConversationPanel(); 5643 }; 5644 } 5645 5646 if (menuNewConversation) { 5647 menuNewConversation.onclick = async () => { 5648 if (!isChatUserLoggedIn()) return; 5649 5650 closeMenuDropdown(); 5651 messages.innerHTML = ''; 5652 historyOffset = 0; 5653 hasMoreHistory = false; 5654 toggleLoadMoreButton(); 5655 5656 try { 5657 const csrf = getCsrfPayload(); 5658 const formData = new FormData(); 5659 formData.append(csrf.name, csrf.hash); 5660 5661 const res = await fetch('https://www.funandmoving.com/Chatbot/startConversation', { 5662 method: 'POST', 5663 body: formData 5664 }); 5665 const data = await res.json(); 5666 if (data && data.status == 1 && data.conversation_id) { 5667 activeConversationId = data.conversation_id; 5668 } 5669 } catch (e) { } 5670 5671 if (isChatUserLoggedIn()) { 5672 await loadConversations(); 5673 } 5674 showChatPanel(); 5675 ensureNewConversationGreeting(); 5676 }; 5677 } 5678 5679 messages.addEventListener('scroll', toggleScrollBottomButton); 5680 scrollBottomBtn.onclick = () => { 5681 scrollChatToBottom('smooth'); 5682 }; 5683 5684 function toggleLoadMoreButton() { 5685 const shouldShow = hasMoreHistory; 5686 loadMoreBtn.style.display = 'block'; 5687 loadMoreBtn.style.visibility = shouldShow ? 'visible' : 'hidden'; 5688 loadMoreBtn.style.pointerEvents = shouldShow ? 'auto' : 'none'; 5689 } 5690 5691 function setLoadMoreButtonLoading(isLoading) { 5692 isLoadingHistory = isLoading; 5693 loadMoreBtn.disabled = isLoading; 5694 if (isLoading) { 5695 loadMoreBtn.innerHTML = `<span class="load-more-spinner" aria-hidden="true"></span>Loading...`; 5696 return; 5697 } 5698 loadMoreBtn.textContent = loadMoreDefaultLabel; 5699 } 5700 5701 function scrollChatToBottom(behavior = 'auto') { 5702 try { 5703 messages.scrollTo({ 5704 top: messages.scrollHeight, 5705 behavior: behavior 5706 }); 5707 } catch (e) { 5708 messages.scrollTop = messages.scrollHeight; 5709 } 5710 toggleScrollBottomButton(); 5711 } 5712 5713 function toggleScrollBottomButton() { 5714 if (!scrollBottomBtn) return; 5715 5716 if (chatBox.style.display !== 'flex' || mainChatSecDiv.style.display === 'none') { 5717 scrollBottomBtn.style.display = 'none'; 5718 return; 5719 } 5720 5721 const remaining = messages.scrollHeight - (messages.scrollTop + messages.clientHeight); 5722 scrollBottomBtn.style.display = remaining > 50 ? 'flex' : 'none'; 5723 } 5724 5725 function isChatUserLoggedIn() { 5726 // Unified login check using window.userId (footer.php sets from session 'id') 5727 return typeof window.userId !== "undefined" && window.userId && window.userId !== "null" && window.userId !== "0"; 5728 } 5729 5730 function ensureNewConversationGreeting() { 5731 if (messages.children.length === 0) { 5732 renderAlfieChatOpening(); 5733 } 5734 } 5735 5736 function syncConversationUiForAuth() { 5737 const loggedIn = isChatUserLoggedIn(); 5738 if (chatHeaderMenu) { 5739 chatHeaderMenu.style.display = loggedIn ? '' : 'none'; 5740 } 5741 if (!loggedIn) { 5742 closeMenuDropdown(); 5743 conversationPanel.style.display = 'none'; 5744 isConversationView = false;
5745 } 5746 } 5747 5748 function getCsrfPayload() { 5749 return { 5750 name: "csrf_token", 5751 hash: "382c49c05713ec02be9b9ec130d2e3b9" 5752 }; 5753 } 5754 5755 function escapeHtml(str) { 5756 return String(str || '') 5757 .replace(/&/g, '&') 5758 .replace(/</g, '<') 5759 .replace(/>/g, '>') 5760 .replace(/"/g, '"') 5761 .replace(/'/g, '''); 5762 } 5763 5764 function timeAgo(dateTimeString, unixTimestamp) { 5765 let date = null; 5766 5767 const ts = Number(unixTimestamp); 5768 if (Number.isFinite(ts) && ts > 0) { 5769 date = new Date(ts * 1000); 5770 } 5771 5772 if (!date || isNaN(date.getTime())) { 5773 const raw = String(dateTimeString || '').trim(); 5774 const parts = raw.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2}))?$/); 5775 if (parts) { 5776 date = new Date( 5777 Number(parts[1]), 5778 Number(parts[2]) - 1, 5779 Number(parts[3]), 5780 Number(parts[4]), 5781 Number(parts[5]), 5782 Number(parts[6] || 0) 5783 ); 5784 } else { 5785 date = new Date(raw.replace(' ', 'T')); 5786 } 5787 } 5788 5789 if (isNaN(date.getTime())) return ''; 5790 5791 const seconds = Math.max(1, Math.floor((Date.now() - date.getTime()) / 1000)); 5792 if (seconds < 60) return 'a few seconds ago'; 5793 if (seconds < 3600) return Math.floor(seconds / 60) + ' minutes ago'; 5794 if (seconds < 86400) return Math.floor(seconds / 3600) + ' hours ago'; 5795 return Math.floor(seconds / 86400) + ' days ago'; 5796 } 5797 5798 function closeMenuDropdown() { 5799 if (menuDropdown) { 5800 menuDropdown.style.display = 'none'; 5801 } 5802 } 5803 5804 function resetPanelInlineStyles() { 5805 [chatHistoryToggle, mainChatSecDiv].forEach((el) => { 5806 el.style.transition = ''; 5807 el.style.overflow = ''; 5808 el.style.overflowY = ''; 5809 el.style.maxHeight = ''; 5810 el.style.opacity = ''; 5811 }); 5812 } 5813 5814 function showConversationPanel() { 5815 isConversationView = true; 5816 resetPanelInlineStyles(); 5817 conversationPanel.style.display = 'block'; 5818 chatHistoryToggle.style.display = 'none'; 5819 mainChatSecDiv.style.display = 'none'; 5820 mainChatSecDiv.style.maxHeight = '0'; 5821 mainChatSecDiv.style.opacity = '0'; 5822 backArrow.style.display = 'inline-block'; 5823 toggleScrollBottomButton(); 5824 } 5825 5826 function showWelcomePanel() { 5827 isConversationView = false; 5828 resetPanelInlineStyles(); 5829 conversationPanel.style.display = 'none'; 5830 mainChatSecDiv.style.display = 'none'; 5831 mainChatSecDiv.style.maxHeight = '0'; 5832 mainChatSecDiv.style.opacity = '0'; 5833 chatHistoryToggle.style.display = 'block'; 5834 chatHistoryToggle.style.maxHeight = 'none'; 5835 chatHistoryToggle.style.opacity = '1'; 5836 backArrow.style.display = 'none'; 5837 showChatBtn.innerHTML = alfieShowChatLabel; 5838 toggleScrollBottomButton(); 5839 } 5840 5841 function showChatPanel() { 5842 isConversationView = false; 5843 resetPanelInlineStyles(); 5844 conversationPanel.style.display = 'none'; 5845 chatHistoryToggle.style.display = 'none'; 5846 chatHistoryToggle.style.maxHeight = '0'; 5847 chatHistoryToggle.style.opacity = '0'; 5848 mainChatSecDiv.style.display = 'block'; 5849 mainChatSecDiv.style.maxHeight = 'none'; 5850 mainChatSecDiv.style.opacity = '1'; 5851 backArrow.style.display = 'inline-block'; 5852 showChatBtn.innerHTML = alfieHideChatLabel; 5853 setTimeout(toggleScrollBottomButton, 120); 5854 } 5855 5856 async function loadConversations() { 5857 if (!isChatUserLoggedIn()) { 5858 conversationList.innerHTML = '<div class="conversation-empty">
5858Sign in to keep separate conversations.</div>'; 5859 return []; 5860 } 5861 5862 try { 5863 const res = await fetch('https://www.funandmoving.com/Chatbot/getConversations'); 5864 if (!res.ok) throw new Error('Failed to fetch conversations'); 5865 5866 const data = await res.json(); 5867 const conversations = Array.isArray(data.conversations) ? data.conversations : []; 5868 5869 if (!activeConversationId && data.active_conversation_id) { 5870 activeConversationId = data.active_conversation_id; 5871 } 5872 5873 if (!conversations.length) { 5874 conversationList.innerHTML = '<div class="conversation-empty">No conversations yet. Start one from the menu.</div>'; 5875 return []; 5876 } 5877 5878 conversationList.innerHTML = conversations.map((item) => { 5879 const isActive = item.conversation_id === activeConversationId; 5880 return ` 5881 <div class="conversation-item ${isActive ? 'active' : ''}" data-conversation-id="${escapeHtml(item.conversation_id)}"> 5882 <div class="conversation-item-main"> 5883 <div class="conversation-item-title">${escapeHtml(item.title || 'New Conversation')}</div> 5884 <div class="conversation-item-time">${escapeHtml(timeAgo(item.created_at, item.created_at_ts))}</div> 5885 </div> 5886 <div class="conversation-item-arrow"><i class="fa fa-chevron-right" aria-hidden="true"></i></div> 5887 </div> 5888 `; 5889 }).join(''); 5890 5891 conversationList.querySelectorAll('.conversation-item').forEach((itemEl) => { 5892 itemEl.addEventListener('click', async () => { 5893 const conversationId = itemEl.getAttribute('data-conversation-id'); 5894 if (!conversationId) return; 5895 activeConversationId = conversationId; 5896 await reloadCurrentConversation(); 5897 showChatPanel(); 5898 }); 5899 }); 5900 5901 return conversations; 5902 } catch (e) { 5903 conversationList.innerHTML = '<div class="conversation-empty">Unable to load conversations right now.</div>'; 5904 return []; 5905 } 5906 } 5907 5908 async function reloadCurrentConversation() { 5909 messages.innerHTML = ''; 5910 historyOffset = 0; 5911 hasMoreHistory = true; 5912 await loadChatHistory(false); 5913 } 5914 5915 async function loadChatHistory(isLoadMore = false) { 5916 if (!isChatUserLoggedIn() || !hasMoreHistory) return 0; 5917 5918 // Capture scroll info before adding new content 5919 const messagesContainer = document.getElementById('chat-messages'); 5920 const oldScrollHeight = messagesContainer.scrollHeight; 5921 const oldScrollTop = messagesContainer.scrollTop; 5922 5923 const params = new URLSearchParams(); 5924 params.append('limit', HISTORY_LIMIT); 5925 params.append('offset', historyOffset); 5926 if (activeConversationId) { 5927 params.append('conversation_id', activeConversationId); 5928 } 5929 5930 const res = await fetch('https://www.funandmoving.com/Chatbot/getHistory?' + params.toString()); 5931 if (!res.ok) return 0; 5932 5933 const data = await res.json(); 5934 const msgs = data.messages || []; 5935 if (data.conversation_id) { 5936 activeConversationId = data.conversation_id; 5937 } 5938 5939 if (!msgs.length) { 5940 hasMoreHistory = false; 5941 toggleLoadMoreButton(); 5942 return 0; 5943 } 5944 5945 if (isLoadMore) { 5946 // ð LOAD MORE: Backward loop to prepend 5947 for (let i = msgs.length - 1; i >= 0; i--) { 5948 await renderHistoryMessage(msgs[i], true); 5949 } 5950 5951 // Smooth scroll to restore position 5952 messagesContainer.scrollTop = 0; 5953 5954 } else { 5955 // INITIAL LOAD: Append normally 5956 for (const item of msgs) { 5957 await renderHistoryMessage(item, false); 5958 } 5959 5960 // Scroll to bottom 5961 scrollChatToBottom(); 5962 } 5963 5964 historyOffset += msgs.length; 5965 hasMoreHistory = data.has_more; 5966 toggleLoadMoreButton(); 5967 toggleScrollBottomButton(); 5968 return msgs.length; 5969 } 5970 5971 async function renderHistoryMessage(item, prepend = false) { 5972 const sender = item.role === 'user' ? 'You' : chatbotName; 5973 const type = item.message_type || 'text'; 5974 const extra = item.extra_data ? item.extra_data : null; 5975 5976 // ð temporary container for prepend support 5977 const tempContainer = document.createElement('div'); 5978 5979 switch (type) { 5980 case 'text': 5981 await addMessage(sender, item.message, true, 'text', null, tempContainer); 5982 break; 5983 5984 case 'category_suggestion': 5985 try { 5986 let cat_msg = JSON.parse(item.message); 5987 await addMessage(sender, cat_msg.prompt || item.message, true, 'text', extra, tempContainer); 5988 } catch (e) { 5989 await addMessage(sender, item.message, true, 'text', extra, tempContainer); 5990 } 5991 break; 5992 5993 case 'intensity_suggestion': 5994 try { 5995 let int_msg = JSON.parse(item.message); 5996 await addMessage(sender, int_msg.prompt || item.message, true, 'text', extra, tempContainer); 5997 } catch (e) { 5998 await addMessage(sender, item.message, true, 'text', extra, tempContainer); 5999 } 6000 break; 6001 6002 case 'routine_recommendation': 6003 await addMessage(sender, item.message, true, 'btn', extra, tempContainer); 6004 break; 6005 default: 6006 await addMessage(sender, item.message, true, 'text', null, tempContainer); 6007 break; 6008 } 6009 6010 // ð¥ prepend vs append handling (snapshot nodes â childNodes is live) 6011 var nodesToMove = Array.prototype.slice.call(tempContainer.childNodes); 6012 if (prepend) { 6013 for (var ni = nodesToMove.length - 1; ni >= 0; ni--) { 6014 messages.insertBefore(nodesToMove[ni], messages.firstChild); 6015 } 6016 } else { 6017 for (var nj = 0; nj < nodesToMove.length; nj++) { 6018 messages.appendChild(nodesToMove[nj]); 6019 } 6020 } 6021 } 6022 6023 6024 6025 // Slide functions with max-height cap 6026 function slideDown(el, maxHeight = 800) { 6027 el.style.display = 'block'; 6028 el.style.overflow = 'hidden'; 6029 6030 // reset
6031 el.style.transition = 'none'; 6032 el.style.maxHeight = 'none'; 6033 el.style.opacity = '1'; 6034 6035 // exact height 6036 const height = el.scrollHeight; 6037 const finalHeight = Math.min(height, maxHeight) + 'px'; 6038 6039 // start collapsed 6040 el.style.maxHeight = '0'; 6041 el.style.opacity = '0'; 6042 6043 // force reflow 6044 el.offsetHeight; 6045 6046 // animate 6047 el.style.transition = 'max-height 0.4s ease, opacity 0.4s ease'; 6048 el.style.maxHeight = finalHeight; 6049 el.style.opacity = '1'; 6050 6051 el.addEventListener('transitionend', function handler(e) { 6052 if (e.propertyName === 'max-height') { 6053 // enable scroll if content > maxHeight 6054 if (height > maxHeight) { 6055 el.style.overflowY = 'auto'; 6056 } else { 6057 el.style.overflow = 'visible'; 6058 } 6059 el.style.maxHeight = finalHeight; 6060 el.removeEventListener('transitionend', handler); 6061 } 6062 }); 6063 } 6064 6065 function slideUp(el, maxHeight = 800) { 6066 el.style.overflow = 'hidden'; 6067 el.style.transition = 'none'; 6068 6069 const currentHeight = Math.min(el.scrollHeight, maxHeight) + 'px'; 6070 el.style.maxHeight = currentHeight; 6071 el.style.opacity = '1'; 6072 6073 // force reflow 6074 el.offsetHeight; 6075 6076 // animate close 6077 el.style.transition = 'max-height 0.4s ease, opacity 0.4s ease'; 6078 el.style.maxHeight = '0'; 6079 el.style.opacity = '0'; 6080 6081 el.addEventListener('transitionend', function handler(e) { 6082 if (e.propertyName === 'max-height') { 6083 el.style.display = 'none'; 6084 el.style.overflowY = 'hidden'; 6085 el.removeEventListener('transitionend', handler); 6086 } 6087 }); 6088 } 6089 6090 toggleBtn.onclick = async () => { 6091 syncConversationUiForAuth(); 6092 closeMenuDropdown(); 6093 6094 // Added By Sahejad Draggable Chatbot 6095 if (suppressToggleClick) { 6096 suppressToggleClick = false; 6097 return; 6098 } 6099 // Added By Sahejad Draggable Chatbot 6100 6101 if (chatBox.style.display === 'flex') { 6102 showWelcomePanel(); 6103 chatBox.style.display = 'none'; 6104 chatBox.style.visibility = ''; 6105 chatBox.style.pointerEvents = ''; 6106 toggleScrollBottomButton(); 6107 return; 6108 } 6109 6110 chatBox.style.display = 'flex'; 6111 6112 // â RESET PAGINATION STATE 6113 messages.innerHTML = ''; 6114 historyOffset = 0; 6115 hasMoreHistory = true; 6116 isConversationView = false; 6117 6118 const loggedInUser = isChatUserLoggedIn(); 6119 let hasInitialHistory = false; 6120 6121 if (loggedInUser) { 6122 // Keep widget hidden until we know which screen should be shown. 6123 chatBox.style.visibility = 'hidden'; 6124 chatBox.style.pointerEvents = 'none'; 6125 6126 try { 6127 await loadConversations(); 6128 const loadedMessages = await loadChatHistory(false); // ð¥ ONLY ENTRY POINT 6129 hasInitialHistory = loadedMessages > 0; 6130 } catch (e) { 6131 hasInitialHistory = false; 6132 } 6133 } else { 6134 messages.innerHTML = 6135 '<div style="color:#888;">Sign in to use and restore your recent chat.</div>'; 6136 } 6137 6138 // UI reset based on history (or tour: always welcome first when flag set): 6139 if (window.chatbotTourForceWelcome) { 6140 window.chatbotTourForceWelcome = false; 6141 showWelcomePanel(); 6142 showChatBtn.innerHTML = alfieShowChatLabel; 6143 } else if (loggedInUser && hasInitialHistory) { 6144 showChatPanel(); 6145 } else { 6146 showWelcomePanel(); 6147 showChatBtn.innerHTML = alfieShowChatLabel; 6148 } 6149 6150 if (loggedInUser) { 6151 chatBox.style.visibility = 'visible'; 6152 chatBox.style.pointerEvents = 'auto'; 6153 } 6154 6155 // Added By Sahejad Draggable Chatbot 6156 clampChatBoxIntoViewport(); 6157 requestAnimationFrame(clampChatBoxIntoViewport); 6158 // Added By Sahejad Draggable Chatbot 6159 6160 toggleScrollBottomButton(); 6161 }; 6162 6163 syncConversationUiForAuth(); 6164 6165 // Show/hide chat messages 6166 showChatBtn.onclick = () => { 6167 closeMenuDropdown(); 6168 conversationPanel.style.display = 'none'; 6169 isConversationView = false;
6170 playBotSound('openScreen'); 6171 const isHidden = 6172 mainChatSecDiv.style.display === 'none' || 6173 mainChatSecDiv.style.maxHeight === '0px'; 6174 6175 if (isHidden) { 6176 // Show chat â slide down with max-height 6177 // slideDown(messages, 420); 6178 // slideDown(chatInput); 6179 if (showWelcomeMsg && messages.children.length === 0) { 6180 renderAlfieChatOpening(); 6181 } 6182 slideDown(mainChatSecDiv); 6183 6184 slideUp(chatHistoryToggle); 6185 6186 backArrow.style.display = 'inline-block'; 6187 showChatBtn.innerHTML = alfieHideChatLabel; 6188 setTimeout(toggleScrollBottomButton, 120); 6189 } else { 6190 // Hide chat â slide up 6191 // slideUp(messages); 6192 // slideUp(chatInput); 6193 slideUp(mainChatSecDiv); 6194 slideDown(chatHistoryToggle); 6195 6196 backArrow.style.display = 'none'; 6197 showChatBtn.innerHTML = alfieShowChatLabel; 6198 toggleScrollBottomButton(); 6199 } 6200 }; 6201 6202 // Back arrow click 6203 backArrow.onclick = () => { 6204 closeMenuDropdown(); 6205 if (isConversationView) { 6206 if (messages.children.length > 0) { 6207 showChatPanel(); 6208 } else { 6209 showWelcomePanel(); 6210 } 6211 return; 6212 } 6213 6214 // slideUp(messages); 6215 // slideUp(chatInput); 6216 slideUp(mainChatSecDiv); 6217 slideDown(chatHistoryToggle); 6218 6219 backArrow.style.display = 'none'; 6220 showChatBtn.innerHTML = alfieShowChatLabel; 6221 toggleScrollBottomButton(); 6222 }; 6223 // Send message on Enter key in input 6224 document.getElementById('message').addEventListener('keydown', function (e) { 6225 if (e.key === 'Enter') { 6226 sendMessage(); 6227 } 6228 }); 6229 6230 const showWelcomeMsg = true; 6231 // toggleBtn.onclick = () => { 6232 // chatBox.style.display = chatBox.style.display === 'flex' ? 'none' : 'flex'; 6233 // if(showWelcomeMsg && messages.children.length === 0){ 6234 // addMessage(chatbotName, "Hi, I am Alfie. What kind of routines would you like?"); 6235 // } 6236 // }; 6237 6238 async function sendMessage() { 6239 playBotSound('message'); 6240 $("#message").prop("disabled", true); 6241 const input = document.getElementById('message'); 6242 const text = input.value.trim(); 6243 if (!text) { 6244 $("#message").prop("disabled", false); 6245 return; 6246 } 6247 6248 let justStartedNewConversation = false; 6249 if (isChatUserLoggedIn() && !activeConversationId) { 6250 try { 6251 const csrf = getCsrfPayload(); 6252 const convData = new FormData(); 6253 convData.append(csrf.name, csrf.hash); 6254 const convRes = await fetch('https://www.funandmoving.com/Chatbot/startConversation', { 6255 method: 'POST', 6256 body: convData 6257 }); 6258 const convJson = await convRes.json(); 6259 if (convJson && convJson.status == 1 && convJson.conversation_id) { 6260 activeConversationId = convJson.conversation_id; 6261 justStartedNewConversation = true; 6262 historyOffset = 0; 6263 hasMoreHistory = false; 6264 toggleLoadMoreButton(); 6265 await loadConversations(); 6266 } 6267 } catch (e) { } 6268 } 6269 6270 if (justStartedNewConversation) { 6271 ensureNewConversationGreeting(); 6272 } 6273 6274 input.value = ''; 6275 addMessage('You', text); 6276 showTyping(); 6277 6278 // CSRF token name/hash provided via PHP 6279 const csrfName = "csrf_token"; 6280 const csrfHash = "382c49c05713ec02be9b9ec130d2e3b9"; 6281 6282 try { 6283 const formData = new FormData(); 6284 formData.append('message', text); 6285 formData.append(csrfName, csrfHash); 6286 if (activeConversationId) { 6287 formData.append('conversation_id', activeConversationId); 6288 } 6289 6290 const res = await fetch('https://www.funandmoving.com/Chatbot/ask', { 6291 method: 'POST', 6292 body: formData 6293 }); 6294 6295 hideTyping(); 6296 6297 if (res.status == "0") { 6298 addMessage(chatbotName, 'Please tell me about your health concern, and Iâll find videos that may support you...!!') 6299 } else { 6300 const data = await res.json(); 6301 if (data.action == 'show_video_list' && data.getVideoList) { 6302 renderVideos(data.getVideoList); 6303 } else if (data.action == 'show_intensity_options' && data.intensity_list && Array.isArray(data.intensity_list.options) && data.intensity_list.options.length > 0) { 6304 renderIntensityOptions(data.intensity_list, data.embedding_id); 6305 } else if (data.action == 'show_category_options' && data.category_list && Array.isArray(data.category_list.options) && data.category_list.options.length > 0) { 6306 renderCategoryOptions(data.category_list, data.embedding_id); 6307 } else { 6308 addMessage(chatbotName, data.question); 6309 if (data.offer_tours) { 6310 if (data.tour_fallback_intro) { 6311 var fb = document.createElement('div'); 6312 fb.className = 'msg bot-message';
6313 fb.innerHTML = '<span class="user">' + escapeHtml(chatbotName) + ':</span> <span class="alfie-tour-fallback-intro">' + escapeHtml(data.tour_fallback_intro) + '</span>'; 6314 messages.appendChild(fb); 6315 } 6316 appendAlfieShortcutRowAfter(messages, window.alfieContext || {}); 6317 } 6318 } 6319 } 6320 if (isChatUserLoggedIn()) { 6321 await loadConversations(); 6322 } 6323 } catch (err) { 6324 hideTyping(); 6325 addMessage(chatbotName, 'Please tell me about your health concern, and Iâll find videos that may support you...!!'); 6326 // addMessage(chatbotName, ); 6327 } 6328 $("#message").prop("disabled", false); 6329 } 6330 6331 async function showTyping() { 6332 const typingDiv = document.createElement('div'); 6333 typingDiv.id = 'typing-indicator'; 6334 typingDiv.className = 'msg bot-message'; 6335 typingDiv.innerHTML = `<span>${chatbotName}:</span> <div class="typing" style="display: inline-flex; margin-left: 5px;"><span></span><span></span><span></span></div>`; 6336 messages.appendChild(typingDiv); 6337 scrollChatToBottom(); 6338 } 6339 6340 async function hideTyping() { 6341 const typingDiv = document.getElementById('typing-indicator'); 6342 if (typingDiv) { 6343 typingDiv.remove(); 6344 } 6345 } 6346 6347 async function addMessage(sender, text, isHistory = false, type = 'text', extraData = null, targetContainer = null) { 6348 6349 if (type == "btn" && extraData) { 6350 let videosUrl = extraData; 6351 try { 6352 videosUrl = JSON.parse(extraData); 6353 } catch (e) { } 6354 if (videosUrl && typeof videosUrl === 'object' && videosUrl._meta) { 6355 delete videosUrl._meta; 6356 } 6357 if (videosUrl && typeof videosUrl === 'object' && videosUrl.value && !videosUrl.class_id) { 6358 videosUrl = videosUrl.value; 6359 } 6360 6361 const wrapper = document.createElement('div'); 6362 wrapper.className = 'video-link'; 6363 6364 const button = document.createElement('button'); 6365 button.className = 'video-btn'; 6366 button.textContent = "Click here to get your routine videos ...!!"; 6367 6368 button.onclick = function () { 6369 playBotSound('btnClick'); 6370 $.ajax({ 6371 url: "https://www.funandmoving.com/Chatbot/RedirectToUserRoutine", 6372 type: "POST", 6373 dataType: "json", 6374 data: { 6375 videosUrl: videosUrl, 6376 "csrf_token": 6377 "382c49c05713ec02be9b9ec130d2e3b9" 6378 }, 6379 success: function (response) { 6380 if (response.status === "1") { 6381 window.location.href = 6382 "https://www.funandmoving.com/Routine/routine_list"; 6383 } else { 6384 addMessage(chatbotName, 'Please provide more detail...'); 6385 } 6386 } 6387 }); 6388 }; 6389 6390 if (targetContainer) { 6391 const prompt = document.createElement('div'); 6392 prompt.className = 'msg bot-message'; 6393 prompt.innerHTML = `<span class="user">${chatbotName}:</span> `; 6394 targetContainer.appendChild(prompt); 6395 /*----Button---*/ 6396 wrapper.appendChild(button); 6397 targetContainer.appendChild(wrapper); 6398 } else { 6399 const prompt = document.createElement('div'); 6400 prompt.className = 'msg bot-message';
6401 prompt.innerHTML = `<span class="user">${chatbotName}:</span> `; 6402 messages.appendChild(prompt); 6403 /*----Button---*/ 6404 wrapper.appendChild(button); 6405 messages.appendChild(wrapper); 6406 scrollChatToBottom(); 6407 } 6408 6409 } else { 6410 const div = document.createElement('div'); 6411 div.className = 'msg ' + (sender === 'You' ? 'user-message' : 'bot-message'); 6412 div.innerHTML = `<span class="${sender === 'You' ? 'user' : ''}">\n ${sender}:</span> ${text}`; 6413 6414 // If targetContainer provided (history loading), append there. Else append to main messages. 6415 if (targetContainer) { 6416 targetContainer.appendChild(div); 6417 } else { 6418 messages.appendChild(div); 6419 scrollChatToBottom(); 6420 } 6421 } 6422 } 6423 6424 // function addMessage(sender, text) { 6425 // const div = document.createElement('div'); 6426 // div.className = 'msg'; 6427 // div.innerHTML = `<span class="${sender === chatbotName ? 'user' : ''}"> 6428 // ${sender}:</span> ${text}`; 6429 // messages.appendChild(div); 6430 // messages.scrollTop = messages.scrollHeight; 6431 // } 6432 6433 function renderCategoryOptions(category_list, embedding_id) { 6434 /*-------------Show Prompt----------*/ 6435 const prompt = document.createElement('div'); 6436 prompt.className = 'msg bot-message'; 6437 prompt.innerHTML = `<span class="user">${chatbotName}:</span> ${category_list.prompt}`; 6438 messages.appendChild(prompt); 6439 /*-------------Show Options----------*/ 6440 const wrapper = document.createElement('div'); 6441 wrapper.className = 'category-options'; 6442 category_list.options.forEach(opt => { 6443 const button = document.createElement('button'); 6444 button.className = 'video-btn'; 6445 button.value = opt.id; 6446 button.textContent = opt.label; 6447 button.onclick = function () { 6448 playBotSound('btnClick'); 6449 /*----remove wrapper and add as message----*/ 6450 wrapper.remove(); 6451 const selectedMsg = document.createElement('div'); 6452 selectedMsg.className = 'msg user-message'; 6453 selectedMsg.innerHTML = `<span class="user">You:</span> ${opt.label}`; 6454 messages.appendChild(selectedMsg); 6455 scrollChatToBottom(); 6456 6457 showTyping(); 6458 6459 $.ajax({ 6460 url: "https://www.funandmoving.com/Chatbot/IntensityListFromCategory", 6461 type: "POST", 6462 dataType: "json", 6463 data: { 6464 embedding_id: embedding_id, 6465 category_id: opt.id, 6466 btnText: opt.label, 6467 conversation_id: activeConversationId || '', 6468 "csrf_token": "382c49c05713ec02be9b9ec130d2e3b9" 6469 }, 6470 success: function (response) { 6471 hideTyping(); 6472 if (response.action == 'show_intensity_options' && response.intensity_list && Array.isArray(response.intensity_list.options) && response.intensity_list.options.length > 0) { 6473 renderIntensityOptions(response.intensity_list, response.embedding_id); 6474 } else if (response.action == 'show_video_list') { 6475 renderVideos(response.getVideoList); 6476 } else if (response.action == 'ask_user') { 6477 addMessage(chatbotName, response.question); 6478 } else { 6479 addMessage(chatbotName, 'Please provide specific answer...!!'); 6480 } 6481 if (isChatUserLoggedIn()) { 6482 loadConversations(); 6483 } 6484 }, 6485 error: function () { 6486 hideTyping(); 6487 addMessage(chatbotName, 'Please provide specific answer...!!'); 6488 } 6489 }); 6490 }; 6491 wrapper.appendChild(button); 6492 }); 6493 messages.appendChild(wrapper); 6494 scrollChatToBottom(); 6495 } 6496 6497 function renderIntensityOptions(intensity_list, embedding_id) { 6498 /*-------------Show Prompt----------*/ 6499 const prompt = document.createElement('div'); 6500 prompt.className = 'msg bot-message';
6501 prompt.innerHTML = `<span class="user">${chatbotName}:</span> ${intensity_list.prompt}`; 6502 messages.appendChild(prompt); 6503 /*-------------Show Options----------*/ 6504 const wrapper = document.createElement('div'); 6505 wrapper.className = 'intensity-options'; 6506 intensity_list.options.forEach(opt => { 6507 const button = document.createElement('button'); 6508 button.className = 'video-btn'; 6509 button.value = opt.id; 6510 button.textContent = opt.label; 6511 button.onclick = function () { 6512 playBotSound('btnClick'); 6513 /*----remove wrapper and add as message----*/ 6514 wrapper.remove(); 6515 const selectedMsg = document.createElement('div'); 6516 selectedMsg.className = 'msg user-message'; 6517 selectedMsg.innerHTML = `<span class="user">You:</span> ${opt.label}`; 6518 messages.appendChild(selectedMsg); 6519 scrollChatToBottom(); 6520 6521 showTyping(); 6522 6523 $.ajax({ 6524 url: "https://www.funandmoving.com/Chatbot/VideoListFromIntensity", 6525 type: "POST", 6526 dataType: "json", 6527 data: { 6528 embedding_id: embedding_id, 6529 intensity_id: opt.id, 6530 btnText: opt.label, 6531 conversation_id: activeConversationId || '', 6532 "csrf_token": "382c49c05713ec02be9b9ec130d2e3b9" 6533 }, 6534 success: function (response) { 6535 hideTyping(); 6536 if (response.action == 'show_video_list' && response.getVideoList) { 6537 renderVideos(response.getVideoList); 6538 } else if (response.action == 'ask_user') { 6539 addMessage(chatbotName, response.question); 6540 } else { 6541 addMessage(chatbotName, 'Please provide specific answer...!!'); 6542 } 6543 if (isChatUserLoggedIn()) { 6544 loadConversations(); 6545 } 6546 }, 6547 error: function () { 6548 hideTyping(); 6549 addMessage(chatbotName, 'Please provide specific answer...!!'); 6550 } 6551 }); 6552 }; 6553 wrapper.appendChild(button); 6554 }); 6555 messages.appendChild(wrapper); 6556 scrollChatToBottom(); 6557 } 6558 6559 function renderVideos(videosUrl) { 6560 6561 const prompt = document.createElement('div'); 6562 prompt.className = 'msg bot-message'; 6563 prompt.innerHTML = `<span class="user">${chatbotName}:</span> `; 6564 messages.appendChild(prompt); 6565 6566 const wrapper = document.createElement('div'); 6567 wrapper.className = 'video-link'; 6568 6569 const button = document.createElement('button'); 6570 button.className = 'video-btn'; 6571 button.textContent = "Click here to get your routine videos ...!!"; 6572 6573 button.onclick = function () { 6574 playBotSound('btnClick'); 6575 $.ajax({ 6576 url: "https://www.funandmoving.com/Chatbot/RedirectToUserRoutine", 6577 type: "POST", 6578 dataType: "json", 6579 data: { 6580 videosUrl: videosUrl, 6581 "csrf_token": 6582 "382c49c05713ec02be9b9ec130d2e3b9" 6583 }, 6584 success: function (response) { 6585 if (response.status === "1") { 6586 window.location.href = 6587 "https://www.funandmoving.com/Routine/routine_list"; 6588 } else { 6589 addMessage(chatbotName, 'Please provide more detail...'); 6590 } 6591 } 6592 }); 6593 }; 6594 6595 wrapper.appendChild(button); 6596 messages.appendChild(wrapper); // â REQUIRED 6597 scrollChatToBottom(); 6598 } 6599 </script>
6599 6600 <!-- Voice Tooltip --> 6601
6601<script> 6602 const voiceBtns = document.querySelectorAll('.voiceBtn_cls'); 6603 const tooltipText = "Tell me what kind of routines you want to see."; 6604 6605 const tooltip = document.createElement('div'); 6606 tooltip.className = 'voice-tooltip'; 6607 tooltip.innerText = tooltipText; 6608 document.body.appendChild(tooltip); 6609 6610 let tooltipVisible = false; 6611 let activeBtn = null; 6612 6613 function positionTooltip() { 6614 if (!tooltipVisible || !activeBtn) return; 6615 6616 const btnRect = activeBtn.getBoundingClientRect(); 6617 const tooltipRect = tooltip.getBoundingClientRect(); 6618 const space = 8; 6619 6620 let top, left; 6621 6622 // TOP â BOTTOM logic 6623 if (btnRect.top >= tooltipRect.height + space) { 6624 top = btnRect.top - tooltipRect.height - space; 6625 } else if (window.innerHeight - btnRect.bottom >= tooltipRect.height + space) { 6626 top = btnRect.bottom + space; 6627 } else { 6628 top = btnRect.top + (btnRect.height - tooltipRect.height) / 2; 6629 } 6630 6631 // CENTER horizontally 6632 left = btnRect.left + (btnRect.width - tooltipRect.width) / 2; 6633 6634 if (left < 5) left = 5; 6635 if (left + tooltipRect.width > window.innerWidth - 5) { 6636 left = window.innerWidth - tooltipRect.width - 5; 6637 } 6638 6639 tooltip.style.top = `${top + window.scrollY}px`; 6640 tooltip.style.left = `${left + window.scrollX}px`; 6641 } 6642 6643 // Loop for multiple buttons 6644 // voiceBtns.forEach(btn => { 6645 // btn.addEventListener('mouseenter', () => { 6646 // activeBtn = btn; 6647 // tooltipVisible = true; 6648 // tooltip.style.opacity = 1; 6649 // positionTooltip(); 6650 // }); 6651 6652 // btn.addEventListener('mouseleave', () => { 6653 // tooltipVisible = false; 6654 // tooltip.style.opacity = 0; 6655 // activeBtn = null; 6656 // }); 6657 // }); 6658 6659 voiceBtns.forEach(btn => { 6660 btn.addEventListener('mouseenter', () => { 6661 activeBtn = btn; 6662 tooltipVisible = true; 6663 tooltip.style.display = 'block'; 6664 positionTooltip(); 6665 }); 6666 6667 btn.addEventListener('mouseleave', () => { 6668 tooltipVisible = false; 6669 tooltip.style.display = 'none'; 6670 activeBtn = null; 6671 }); 6672 }); 6673 6674 window.addEventListener('scroll', positionTooltip, { 6675 passive: true 6676 }); 6677 window.addEventListener('resize', positionTooltip); 6678 </script>
6678 6679 6680 <!-- Voice Btn --> 6681
6681<script> 6682 document.addEventListener("DOMContentLoaded", () => { 6683 6684 const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; 6685 if (!SpeechRecognition) { 6686 alert("Speech Recognition not supported. Use Chrome browser."); 6687 return; 6688 } 6689 6690 const recognition = new SpeechRecognition(); 6691 recognition.continuous = false; 6692 recognition.lang = "en-US"; 6693 recognition.interimResults = false; 6694 6695 const btns = document.querySelectorAll(".voiceBtn_cls"); 6696 const input = document.getElementById("message"); 6697 6698 if (btns.length === 0) return; 6699 6700 let isListening = false; 6701 6702 btns.forEach(btn => { 6703 btn.addEventListener("click", () => { 6704 6705 if (isListening) return; // ð prevent multiple clicks 6706 isListening = true; 6707 $(".send-btn").prop("disabled", true).css("cursor", "default"); 6708 recognition.start(); 6709 6710 btn.classList.add("listening"); 6711 btn.style.pointerEvents = "none"; // â disable click 6712 6713 if (input) { 6714 input.placeholder = "Listeningâ¦"; 6715 input.readOnly = true; 6716 } 6717 }); 6718 }); 6719 6720 recognition.onresult = function (event) { 6721 const text = event.results[0][0].transcript; 6722 if (input) input.value = text; 6723 6724 btns.forEach(btn => { 6725 btn.classList.remove("listening"); 6726 btn.style.pointerEvents = "auto"; // â enable again 6727 }); 6728 6729 isListening = false; 6730 handleSpeechCommands(text.toLowerCase()); 6731 }; 6732 6733 recognition.onerror = function () { 6734 btns.forEach(btn => { 6735 btn.classList.remove("listening"); 6736 btn.style.pointerEvents = "auto"; 6737 }); 6738 6739 // if (input) input.placeholder = "Try againâ¦"; 6740 if (input) { 6741 input.placeholder = "Try againâ¦"; 6742 input.readOnly = false; 6743 } 6744 isListening = false; 6745 $(".send-btn").prop("disabled", false).css("cursor", "pointer"); 6746 }; 6747 6748 recognition.onend = function () { 6749 btns.forEach(btn => { 6750 btn.classList.remove("listening"); 6751 btn.style.pointerEvents = "auto"; 6752 }); 6753 6754 if (isListening && input) { 6755 // input.value = ''; 6756 input.placeholder = "Try againâ¦"; 6757 input.readOnly = false; 6758 } 6759 6760 isListening = false; 6761 $(".send-btn").prop("disabled", false).css("cursor", "pointer"); 6762 }; 6763 6764 }); 6765 6766 6767 function handleSpeechCommands(speech_text) { 6768 // console.log("Handling speech command:", speech_text); 6769 const input = document.getElementById("message"); 6770 showTyping(); 6771 $.ajax({ 6772 type: 'POST', 6773 url: 'https://www.funandmoving.com/Routine/getPathFromSpeechText', 6774 data: { 6775 speech_text: speech_text, 6776 csrf_token: "382c49c05713ec02be9b9ec130d2e3b9" 6777 }, 6778 dataType: 'json', 6779 success: function (response) { 6780 hideTyping(); 6781 console.log(response.intent) 6782 console.log(response.id) 6783 if (response.status == true) { 6784 window.location.href = "https://www.funandmoving.com/Routine/routine_list"; 6785 } else { 6786 if (input) input.placeholder = "Please try againâ¦!!"; 6787 } 6788 }, 6789 error: function (xhr) { 6790 hideTyping(); 6791 if (input) input.placeholder = "Please try againâ¦!!"; 6792 // console.log("Error:", xhr.responseText); 6793 } 6794 }); 6795 } 6796 6797 const sounds = { 6798 message: new Audio("https://www.funandmoving.com/assets/msg_send.mp3"), 6799 openScreen: new Audio("https://www.funandmoving.com/assets/open.mp3"), 6800 btnClick: new Audio("https://www.funandmoving.com/assets/btnClick.mp3"), 6801 }; 6802
6803 Object.values(sounds).forEach(sound => { 6804 sound.volume = 0.5; // 50% volume 6805 }); 6806 6807 6808 function playBotSound(type = 'message') { 6809 if (sounds[type]) { 6810 sounds[type].currentTime = 0; 6811 sounds[type].play().catch(e => console.log("Sound blocked:", e)); 6812 } 6813 } 6814 </script>
6814 6815</div> 6816 6817<!-- language dropdown --> 6818<!--
6818<script>window.gtranslateSettings = {"default_language":"en","native_language_names":true,"wrapper_selector":".gtranslate_wrapper","switcher_horizontal_position":"right","switcher_vertical_position":"top","flag_style":"3d"}</script>
vendor: 1 bytes, line 6818
6818
6819<script src="https://cdn.gtranslate.net/widgets/latest/dwf.js" defer></script>
6819 --> 6820 6821
6822<script> 6823var selectedLanguageCode = ''; 6824window.gtranslateSettings = { 6825 "default_language": "en", 6826 "languages": ["en","es","zh-CN","ko","fr","vi","hi","ru","de","am","pt","eu","bn"], 6827 "wrapper_selector": ".gtranslate_wrapper", 6828 "switcher_horizontal_position": "right", 6829 "switcher_vertical_position": "top", 6830 "flag_style": "3d", 6831 "alt_flags": { 6832 // "en": "usa" 6833 "en": "usa" } 6834}; 6835 6836var headerLayoutSyncTimeouts = []; 6837var gtranslateSelectedLabelTimeouts = []; 6838var gtranslateSelectedLabelObserver = null; 6839 6840function applyGtranslateSelectedLabelClass() { 6841 var selectedLabels = document.querySelectorAll('.gtranslate_wrapper .gt_switcher div.gt_selected a'); 6842 selectedLabels.forEach(function(labelEl) { 6843 labelEl.classList.remove('gtranslate-selected-label'); 6844 6845 var existingSpan = labelEl.querySelector('.gtranslate-selected-label'); 6846 if (existingSpan) { 6847 return; 6848 } 6849 6850 var labelText = ''; 6851 var textNodesToRemove = []; 6852 labelEl.childNodes.forEach(function(childNode) { 6853 if (childNode.nodeType === Node.TEXT_NODE) { 6854 var currentText = (childNode.textContent || '').trim(); 6855 if (currentText) { 6856 labelText += (labelText ? ' ' : '') + currentText; 6857 textNodesToRemove.push(childNode); 6858 } 6859 } 6860 }); 6861 6862 if (!labelText) { 6863 return; 6864 } 6865 6866 textNodesToRemove.forEach(function(textNode) { 6867 labelEl.removeChild(textNode); 6868 }); 6869 6870 var labelSpan = document.createElement('span'); 6871 labelSpan.className = 'gtranslate-selected-label'; 6872 labelSpan.textContent = labelText; 6873 labelEl.appendChild(labelSpan); 6874 }); 6875} 6876 6877function scheduleGtranslateSelectedLabelClassSync() { 6878 while (gtranslateSelectedLabelTimeouts.length) { 6879 clearTimeout(gtranslateSelectedLabelTimeouts.pop()); 6880 } 6881 6882 var syncDelays = [0, 100, 300, 700, 1400]; 6883 syncDelays.forEach(function(delay) { 6884 var timeoutId = setTimeout(function() { 6885 applyGtranslateSelectedLabelClass(); 6886 }, delay); 6887 gtranslateSelectedLabelTimeouts.push(timeoutId); 6888 }); 6889} 6890 6891function initGtranslateSelectedLabelObserver() { 6892 if (typeof MutationObserver === 'undefined') { 6893 return; 6894 } 6895 6896 var wrapperNode = document.querySelector('.gtranslate_wrapper'); 6897 if (!wrapperNode) { 6898 return; 6899 } 6900 6901 if (gtranslateSelectedLabelObserver) { 6902 gtranslateSelectedLabelObserver.disconnect(); 6903 } 6904 6905 gtranslateSelectedLabelObserver = new MutationObserver(function() { 6906 scheduleGtranslateSelectedLabelClassSync(); 6907 }); 6908 6909 gtranslateSelectedLabelObserver.observe(wrapperNode, { 6910 childList: true, 6911 subtree: true, 6912 attributes: true, 6913 attributeFilter: ['class'] 6914 }); 6915} 6916 6917function runHeaderLanguageDependentLayoutSync() { 6918 while (headerLayoutSyncTimeouts.length) { 6919 clearTimeout(headerLayoutSyncTimeouts.pop()); 6920 } 6921 6922 // Translation widgets update text in phases; run sync multiple times. 6923 var syncDelays = [150, 500, 1000, 1800, 2600]; 6924 syncDelays.forEach(function(delay) { 6925 var timeoutId = setTimeout(function() { 6926 checkHeightAndAddClass(); 6927 corporate_content_auto_height_mng(); 6928 if (typeof window.scheduleMainMarginSync === 'function') { 6929 window.scheduleMainMarginSync(); 6930 } 6931 }, delay); 6932 headerLayoutSyncTimeouts.push(timeoutId); 6933 }); 6934} 6935 6936function handleLanguageChange(event) { 6937 document.body.classList.forEach(function(className) { 6938 if (className.startsWith('language_')) { 6939 document.body.classList.remove(className); 6940 } 6941 }); 6942 var selectedLanguageCode = event.target.value; 6943 // console.log("Selected language code:", selectedLanguageCode); 6944 document.body.classList.add('language_' + selectedLanguageCode); 6945 get_selected_language(selectedLanguageCode); 6946 scheduleGtranslateSelectedLabelClassSync(); 6947 runHeaderLanguageDependentLayoutSync(); 6948} 6949 6950function initializeLanguage() { 6951 var dropdown = document.querySelector('.gtranslate_wrapper .goog-te-combo'); 6952 if (dropdown) { 6953 var selectedLanguageCode = dropdown.value; 6954 // console.log("Initial selected language:", selectedLanguageCode); 6955 document.body.classList.add('language_' + selectedLanguageCode); 6956 get_selected_language(selectedLanguageCode); 6957 scheduleGtranslateSelectedLabelClassSync(); 6958 runHeaderLanguageDependentLayoutSync(); 6959 } else { 6960 // console.log('Dropdown element not found.'); 6961 } 6962} 6963 6964function initLanguageDropdownObserver() { 6965 var targetNode = document.querySelector('.gtranslate_wrapper'); 6966 var observerOptions = { 6967 childList: true, 6968 subtree: true 6969 }; 6970 6971 function callback(mutationsList, observer) { 6972 for (var mutation of mutationsList) { 6973 if (mutation.type === 'childList') { 6974 var dropdown = document.querySelector('.gtranslate_wrapper .goog-te-combo'); 6975 if (dropdown) { 6976 dropdown.addEventListener('change', handleLanguageChange); 6977 setTimeout(initializeLanguage, 1000); 6978 scheduleGtranslateSelectedLabelClassSync(); 6979 observer.disconnect(); // Stop observing once we found and attached the event listener 6980 console.log('Dropdown element found and event listener attached.'); 6981 break; 6982 } 6983 } 6984 } 6985 } 6986 6987 var observer = new MutationObserver(callback); 6988 observer.observe(targetNode, observerOptions); 6989} 6990 6991document.addEventListener('DOMContentLoaded', function() { 6992 initGtranslateSelectedLabelObserver(); 6993 scheduleGtranslateSelectedLabelClassSync(); 6994 initLanguageDropdownObserver(); 6995 get_selected_language(); 6996 6997 // Stop delay in language dropdown 6998 window.gt_hide_slider = function () { 6999 gt_slider_open = false;
7000 document.querySelectorAll(u_class + ' div.gt_switcher').forEach(function(e) { 7001 e.querySelector('div.gt_selected a').classList.remove('open'); 7002 var option_el = e.querySelector('div.gt_option'); 7003 option_el.style.height = 0; 7004 option_el.style.overflowY = 'hidden'; 7005 setTimeout(function() { 7006 option_el.style.display = 'none'; 7007 option_el.style.overflowY = 'auto'; 7008 }, 10); 7009 }); 7010 }; 7011 7012 (function() { 7013 const originalSetTimeout = window.setTimeout; 7014 7015 window.setTimeout = function(callback, delay, ...args) { 7016 if (delay === 500) delay = 10; 7017 return originalSetTimeout(callback, delay, ...args); 7018 }; 7019 })(); 7020 7021 $('div.gt_selected a').on('click', function(event) { 7022 event.preventDefault(); 7023 7024 var $this = $(this); 7025 var className = $this.attr('class'); 7026 7027 if ($this.hasClass('open')) { 7028 $this.removeClass('open'); 7029 7030 var $switcher = $this.closest('div.gt_switcher'); 7031 var $optionEl = $switcher.find('div.gt_option'); 7032 7033 $optionEl.css({ 7034 height: 0, 7035 overflowY: 'hidden' 7036 }); 7037 7038 setTimeout(function() { 7039 $optionEl.css({ 7040 display: 'none', 7041 overflowY: 'auto' 7042 }); 7043 }, 10); 7044 } 7045 }); 7046}); 7047 7048/*-----------------Set Language----------*/ 7049var globalLang = ""; 7050 7051function get_selected_language(selectedLanguageCode = '') { 7052 // console.log("my" + selectedLanguageCode); 7053 $.ajax({ 7054 url: "https://www.funandmoving.com/Home/get_language", // CI3 controller/method 7055 type: "POST", 7056 data: { 7057 lang_code: selectedLanguageCode, 7058 csrf_token: "382c49c05713ec02be9b9ec130d2e3b9" 7059 }, 7060 success: function(response) { 7061 globalLang = response.trim(); 7062 }, 7063 error: function(err) { 7064 globalLang = "'English (auto)'".trim(); 7065 } 7066 }); 7067} 7068</script>
7068 7069
7070<script src="https://www.funandmoving.com/assets/js/gtranslate/gtranslate.js"></script>
vendor: 1 bytes, line 7070
7070
7071<script> 7072 function generateLighterShadesRGBA(hexColor, percent1 = 20, percent2 = 40, percent3 = 60, alpha = 1) { 7073 // Helper to lighten a hex by % and return RGBA 7074 const lighten = (hex, percent) => { 7075 hex = hex.replace('#', ''); 7076 if (hex.length === 3) { 7077 hex = hex.split('').map(h => h + h).join(''); 7078 } 7079 7080 let r = parseInt(hex.substring(0, 2), 16); 7081 let g = parseInt(hex.substring(2, 4), 16); 7082 let b = parseInt(hex.substring(4, 6), 16); 7083 7084 r = Math.min(255, Math.round(r + (255 - r) * (percent / 100))); 7085 g = Math.min(255, Math.round(g + (255 - g) * (percent / 100))); 7086 b = Math.min(255, Math.round(b + (255 - b) * (percent / 100))); 7087 7088 return `rgba(${r}, ${g}, ${b}, ${alpha})`; 7089 }; 7090 7091 return [ 7092 lighten(hexColor, percent1), 7093 lighten(hexColor, percent2), 7094 lighten(hexColor, percent3) 7095 ]; 7096 } 7097</script>
7097 7098<!-- jQuery -->
7099<script src="https://www.funandmoving.com/assets/js/jquery.min.js"></script>
7099 7100<!--
7100<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
7100 -->
7101<script src="https://www.funandmoving.com/assets/js/jquery-ui.js"></script>
7101 7102 7103 7104<!-- Bootstrap -->
7105<script src="https://www.funandmoving.com/assets/js/bootstrap.min.js"></script>
7105 7106 7107<!-- carousel slider -->
7108<script src="https://www.funandmoving.com/assets/js/owl.carousel.js"></script>
7108 7109 7110<!-- cdn Link --> 7111<!--
7111<script src="https://www.funandmoving.com/assets/js/TweenMax.min.js"></script>
7111 --> 7112 7113<!-- Scroll Plugin -->
7114<script src="https://www.funandmoving.com/assets/js/ScrollToPlugin.min.js"></script>
7114 7115 7116<!-- wow -->
7117<script src="https://www.funandmoving.com/assets/js/wow.min.js"></script>
7117 7118 7119<!-- Progressbar -->
7120<script src="https://www.funandmoving.com/assets/js/progressbar.js"></script>
7120 7121 7122 7123<!-- Global Init -->
7124<script src="https://www.funandmoving.com/assets/js/new-landing-page-js/custom_v2.js"></script>
7124 7125 7126
7126<script src="https://www.funandmoving.com/script.js" defer></script>
7126 7127 7128<!--
7128<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
7128 -->
7129<script src="https://www.funandmoving.com/assets/js/sweetalert.min.js"></script>
vendor: 1 bytes, line 7129
7129
7130<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
7130 7131<!--
7131<script src="https://www.funandmoving.com/assets/js/flatpickr"></script>
7131 --> 7132<!--
7132<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/lobibox.min.js"></script>
7132 -->
7133<script src="https://www.funandmoving.com/assets/js/lobibox.min.js"></script>
7133 7134 7135<!-- cookie -->
7136<script src="https://www.funandmoving.com/assets/js/jquery-cookie/jquery.cookie.js"></script>
vendor: 1 bytes, line 7136
7136
7137<script src="https://www.funandmoving.com/assets/js/jquery.validate.min.js"></script>
7137 7138 7139<!-- Stripe -->
7140<script src="https://www.funandmoving.com/assets/js/jquery.payment.js"></script>
7140 7141
7142<script type="text/javascript" charset="utf8" 7143 src="https://www.funandmoving.com/admin_assets/vendor/datatable/js/jquery.dataTables.js"></script>
7143 7144<link rel="stylesheet" type="text/css" 7145 href="https://www.funandmoving.com/admin_assets/vendor/datatable/css/jquery.dataTables.css"> 7146<link rel="stylesheet" type="text/css" 7147 href="https://www.funandmoving.com/admin_assets/vendor/datatable/css/responsive.bootstrap4.min.css"> 7148<!-- <link rel="stylesheet" type="text/css" href="https://www.funandmoving.com/admin_assets/vendor/datatable/css/dataTables.bootstrap4.min.css"> --> 7149 7150<!-- Client Js - Device information fingerprint -->
7151<script type="text/javascript" src="https://www.funandmoving.com/assets/js/clientjs/client.min.js"></script>
vendor: 1 bytes, line 7151
7151
7152<script src="https://www.funandmoving.com/assets/js/us-map/lib/raphael.js"></script>
vendor: 1 bytes, line 7152
7152
7153<script src="https://www.funandmoving.com/assets/js/us-map/example/color.jquery.js"></script>
vendor: 1 bytes, line 7153
7153
7154<script src="https://www.funandmoving.com/assets/js/us-map/jquery.usmap.js"></script>
7154 7155 7156<!-------Bootstrap DatePicker-------->
7157<script src="https://www.funandmoving.com/admin_assets/vendor/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
7157 7158<!-------Bootstrap Date Range Picker-------->
7159<script type="text/javascript" src="https://www.funandmoving.com/admin_assets/js/daterangepicker/moment.min.js"></script>
vendor: 1 bytes, line 7159
7159
7160<script type="text/javascript" src="https://www.funandmoving.com/admin_assets/js/daterangepicker/daterangepicker.js"></script>
7160 7161<!---Shared fitness UI assets (also used by Health Connect views)------->
7162<script src="https://www.funandmoving.com/assets/google_fit/js/popper.min.js" type="text/javascript"></script>
vendor: 1 bytes, line 7162
7162
7163<script src="https://www.funandmoving.com/assets/google_fit/js/script.js" type="text/javascript"></script>
7163 7164<!----------> 7165<link rel="stylesheet" href="https://www.funandmoving.com/assets/css/sweetalert.css">
7166<script src="https://www.funandmoving.com/assets/js/sweetalert.js"></script>
7166 7167 7168<!---Input mask jquery-------> 7169<!--
7169<script src="https://www.funandmoving.com/assets/js/jquery.inputmask.min.js"></script>
7169 --> 7170 7171<!-- Remove By Sahejad 04/07/2026 --> 7172<!--
7172<script> 7173 (function() { 7174 const aboutButton = document.getElementById('about-button'); 7175 const dropdown = document.getElementById('about-menu'); 7176 let isOpen = false; 7177 7178 function openDropdown() { 7179 dropdown.classList.add('open'); 7180 aboutButton.setAttribute('aria-expanded', 'true'); 7181 isOpen = true; 7182 } 7183 7184 function closeDropdown() { 7185 dropdown.classList.remove('open'); 7186 aboutButton.setAttribute('aria-expanded', 'false'); 7187 isOpen = false; 7188 } 7189 7190 aboutButton.addEventListener('click', (e) => { 7191 e.stopPropagation(); 7192 if (isOpen) { 7193 closeDropdown(); 7194 } else { 7195 openDropdown(); 7196 } 7197 }); 7198 7199 // Prevent clicks inside dropdown from closing it 7200 dropdown.querySelector('.dropdown-menu').addEventListener('click', (e) => { 7201 e.stopPropagation(); 7202 }); 7203 7204 // Close dropdown when clicking outside 7205 document.addEventListener('click', () => { 7206 if (isOpen) { 7207 closeDropdown(); 7208 } 7209 }); 7210 7211 // Close dropdown on Escape key press 7212 document.addEventListener('keydown', (e) => { 7213 if (e.key === 'Escape' && isOpen) { 7214 closeDropdown(); 7215 aboutButton.focus(); 7216 } 7217 }); 7218 7219 $('#about-button').on('click', function() { 7220 $('.about_us_li').toggleClass('about_us_li_hide'); 7221 }); 7222 7223 /*---------------*/ 7224 /*---------------*/ 7225 7226 })(); 7227 7228//------------------------- 7229</script>
7229 --> 7230<!-- Remove By Sahejad 04/07/2026 --> 7231 7232<!-- Added By Sahejad 04/07/2026 -->
7233<script> 7234 (function() { 7235 const aboutButton = document.getElementById('about-button'); 7236 const dropdown = document.getElementById('about-menu'); 7237 const whoServeNavItem = document.querySelector('li.nav-who-serve'); 7238 const whoServeDropdown = whoServeNavItem ? whoServeNavItem.querySelector('.nav-who-serve') : document.querySelector('.nav-who-serve'); 7239 const whoServeLink = whoServeDropdown ? whoServeDropdown.querySelector('.who-serve-link') : null; 7240 const whoServePanel = whoServeDropdown ? whoServeDropdown.querySelector('.who-serve-panel') : null; 7241 let isOpen = false; 7242 let isWhoServeOpen = false; 7243 7244 function isWhoServeActuallyOpen() { 7245 return (whoServeNavItem && whoServeNavItem.classList.contains('open')) || 7246 (whoServeDropdown && whoServeDropdown.classList.contains('open')); 7247 } 7248 7249 function openDropdown() { 7250 if (!dropdown || !aboutButton) return; 7251 if (isWhoServeOpen || isWhoServeActuallyOpen()) { 7252 closeWhoServe(); 7253 } 7254 dropdown.classList.add('open'); 7255 aboutButton.setAttribute('aria-expanded', 'true'); 7256 isOpen = true; 7257 } 7258 7259 function closeDropdown() { 7260 if (!dropdown || !aboutButton) return; 7261 dropdown.classList.remove('open'); 7262 aboutButton.setAttribute('aria-expanded', 'false'); 7263 isOpen = false; 7264 } 7265 7266 if (aboutButton && dropdown) { 7267 aboutButton.addEventListener('click', (e) => { 7268 e.stopPropagation(); 7269 if (isOpen) { 7270 closeDropdown(); 7271 } else { 7272 openDropdown(); 7273 } 7274 }); 7275 7276 // Prevent clicks inside dropdown from closing it 7277 const aboutMenuEl = dropdown.querySelector('.dropdown-menu'); 7278 if (aboutMenuEl) { 7279 aboutMenuEl.addEventListener('click', (e) => { 7280 e.stopPropagation(); 7281 }); 7282 } 7283 } 7284 7285 function openWhoServe() { 7286 if (!whoServeDropdown || !whoServeLink) return; 7287 if (isOpen) { 7288 closeDropdown(); 7289 } 7290 if (whoServeNavItem) { 7291 whoServeNavItem.classList.add('open'); 7292 } 7293 if (whoServeDropdown) { 7294 whoServeDropdown.classList.add('open'); 7295 } 7296 whoServeLink.setAttribute('aria-expanded', 'true'); 7297 isWhoServeOpen = true; 7298 } 7299 7300 function closeWhoServe() { 7301 if (!whoServeDropdown || !whoServeLink) return; 7302 if (whoServeNavItem) { 7303 whoServeNavItem.classList.remove('open'); 7304 } 7305 if (whoServeDropdown) { 7306 whoServeDropdown.classList.remove('open'); 7307 } 7308 whoServeLink.setAttribute('aria-expanded', 'false'); 7309 isWhoServeOpen = false; 7310 } 7311 7312 // whoServeLink click is handled via delegated jQuery for mobile 7313 7314 // Close dropdown when clicking outside (robust check for mobile Safari) 7315 document.addEventListener('click', (e) => { 7316 const target = e.target; 7317 7318 // For About dropdown 7319 if (isOpen && dropdown && aboutButton) { 7320 if (!dropdown.contains(target) && !aboutButton.contains(target)) { 7321 closeDropdown(); 7322 } 7323 } 7324 7325 // For Who We Serve dropdown 7326 if (isWhoServeOpen || isWhoServeActuallyOpen()) { 7327 if (whoServeDropdown && whoServeLink) { 7328 if (!whoServeDropdown.contains(target) && !whoServeLink.contains(target)) { 7329 closeWhoServe(); 7330 } 7331 } else { 7332 if (whoServePanel && whoServePanel.contains(target)) { 7333 return; 7334 } 7335 if (whoServeLink && whoServeLink.contains(target)) { 7336 return; 7337 } 7338 closeWhoServe(); 7339 } 7340 } 7341 }); 7342 7343 // Close dropdown on Escape key press 7344 document.addEventListener('keydown', (e) => { 7345 if (e.key === 'Escape') { 7346 if (isOpen) { 7347 closeDropdown(); 7348 if (aboutButton) { 7349 aboutButton.focus(); 7350 } 7351 } 7352 if (isWhoServeOpen) { 7353 closeWhoServe(); 7354 if (whoServeLink) { 7355 whoServeLink.focus(); 7356 } 7357 } 7358 } 7359 }); 7360 7361 if (aboutButton) { 7362 $('#about-button').on('click', function() { 7363 $('.about_us_li').toggleClass('about_us_li_hide'); 7364 }); 7365 } 7366 7367 // Fallback: ensure Who we serve toggles in mobile hamburger, wrapped header, or non-redesign pages 7368 $('#onenav').on('click', '.who-serve-link', function(e) { 7369 var isWrappedHeader = document.querySelector('.header-lower.header-lower_redesign.nav-wrap-active'); 7370 var isNonRedesignHeader = !document.querySelector('.header-lower.header-lower_redesign'); 7371 if (window.matchMedia('(max-width: 991px)').matches || isWrappedHeader || isNonRedesignHeader) { 7372 e.preventDefault(); 7373 e.stopPropagation(); 7374 if (isWhoServeOpen) { 7375 closeWhoServe(); 7376 } else { 7377 openWhoServe(); 7378 } 7379 } 7380 }); 7381 7382 // Allow clicks inside panel so submenu toggles can bubble 7383 7384 // Toggle Who We Serve submenu items on click (default collapsed) 7385 function toggleWhoServeItem($item, $toggle) { 7386 var isOpen = $item.hasClass('is-open'); 7387 $item.toggleClass('is-open', !isOpen); 7388 if ($toggle && $toggle.length) { 7389 $toggle.attr('aria-expanded', (!isOpen).toString()); 7390 } 7391 } 7392 7393 $('#onenav').on('click', '.who-serve-toggle', function(e) { 7394 e.preventDefault(); 7395 e.stopPropagation(); 7396 var $item = $(this).closest('.who-serve-item'); 7397 toggleWhoServeItem($item, $(this)); 7398 }); 7399 7400 // Fallback: allow clicking the parent card to toggle (but not submenu links) 7401 $('#onenav').on('click', '.who-serve-item.has-children', function(e) { 7402 if ($(e.target).closest('.who-serve-item-sub-menu_inner').length) { 7403 return; 7404 } 7405 e.preventDefault(); 7406 e.stopPropagation(); 7407 var $item = $(this); 7408 var $toggle = $item.find('.who-serve-toggle').first(); 7409 toggleWhoServeItem($item, $toggle); 7410 }); 7411 7412 /*---------------*/ 7413 /*---------------*/ 7414 7415 })(); 7416 7417//------------------------- 7418</script>
7418 7419<!-- Added By Sahejad 04/07/2026 --> 7420
7421<script> 7422function corporate_content_auto_height_mng() { 7423 const classGroups = [ 7424 '.enter-corpa_front_inner-title', 7425 '.enter-corpa_front_inner-content', 7426 '.learn-more-btn_enter-corpa-content', 7427 '.proven-results_inner_title_inner', 7428 '.proven-results_inner_text_inner', 7429 '.health-economy_card_inne-title-inner', 7430 '.health-economy_card_inne-text-inner', 7431 '.health-economy_card_inne-title_inner', 7432 '.routine-list_header_top_link_des', 7433 '.routine-list_swiper_inner_title', 7434 '.routine-list_card', 7435 '.about-section_inner', 7436 '.v_detail_inner-title', 7437 '.health-economy_card_inne-text', 7438 '.enter-corpa_box_redesign', 7439 '.accessible_img', 7440 '.quick-link-card__meta-box', 7441 '.trainer_video_list_title' 7442 ]; 7443 7444 function setEqualHeightByRow(selector) { 7445 const $elements = $(selector).filter(':visible'); 7446 if (!$elements.length) { 7447 return; 7448 } 7449 7450 $elements.each(function () { 7451 this.style.setProperty('height', 'auto', 'important'); 7452 }); 7453 7454 const rows = {}; 7455 $elements.each(function () { 7456 const $el = $(this); 7457 const rowTop = Math.round($el.offset().top); 7458 7459 if (!rows[rowTop]) { 7460 rows[rowTop] = []; 7461 } 7462 rows[rowTop].push($el); 7463 }); 7464 7465 Object.keys(rows).forEach(function (rowKey) { 7466 let rowMaxHeight = 0; 7467 rows[rowKey].forEach(function ($el) { 7468 rowMaxHeight = Math.max(rowMaxHeight, $el.outerHeight()); 7469 }); 7470 7471 rows[rowKey].forEach(function ($el) { 7472 if ($el[0]) { 7473 $el[0].style.setProperty('height', rowMaxHeight + 'px', 'important'); 7474 } 7475 }); 7476 }); 7477 } 7478 7479 classGroups.forEach(selector => { 7480 if (selector === '.v_detail_inner-title' || selector === '.routine-list_swiper_inner_title' || selector === '.routine-list_card' || selector === '.trainer_video_list_title') { 7481 setEqualHeightByRow(selector); 7482 return; 7483 } 7484 7485 let maxHeight = 0; 7486 7487 $(selector).css('height', 'auto').each(function () { 7488 maxHeight = Math.max(maxHeight, $(this).outerHeight()); 7489 }); 7490 7491 $(selector).css('height', maxHeight + 'px'); 7492 }); 7493} 7494 7495function activate_device(type) { 7496 $('.level2').addClass('showClass').removeClass('hideClass'); 7497 $('.lavel1_devices').addClass('hideClass').removeClass('showClass'); 7498 if (type == 'smart_watch') { 7499 $('.lavel2_smarttv_devices').addClass('hideClass').removeClass('showClass'); 7500 $('.lavel2_smartwatch_devices').addClass('showClass').removeClass('hideClass'); 7501 } else { 7502 $('.lavel2_smartwatch_devices').addClass('hideClass').removeClass('showClass'); 7503 $('.lavel2_smarttv_devices').addClass('showClass').removeClass('hideClass'); 7504 } 7505 $('.back_btn').removeClass('active_level1').addClass('active_level2').addClass('showClass').removeClass( 7506 'hideClass'); 7507} 7508 7509function activate_smart_watch(type) { 7510 $('.level3').addClass('showClass').removeClass('hideClass'); 7511 // $('.lavel1_devices').addClass('hideClass').removeClass('showClass'); 7512 $('.lavel2_smartwatch_devices').addClass('hideClass').removeClass('showClass'); 7513 // $('.lavel2_smarttv_devices').addClass('hideClass').removeClass('showClass'); 7514 if (type == 'android') { 7515 $('.lavel3_android_instruction').addClass('showClass').removeClass('hideClass'); 7516 } else { 7517 $('.lavel3_apple_instruction').addClass('showClass').removeClass('hideClass'); 7518 } 7519 $('.back_btn').removeClass('active_level2').addClass('active_level3').addClass('showClass').removeClass('hideClass'); 7520} 7521 7522function back() { 7523 if ($('.back_btn').hasClass("active_level2")) { 7524 $(".lavel1_devices").addClass('showClass').removeClass('hideClass'); 7525 $('.lavel2_smarttv_devices').addClass('hideClass').removeClass('showClass'); 7526 $('.lavel2_smartwatch_devices').addClass('hideClass').removeClass('showClass'); 7527 $('.level2').addClass('hideClass').removeClass('showClass'); 7528 $('.back_btn').removeClass('active_level2').addClass('active_level1').removeClass('showClass').addClass( 7529 'hideClass'); 7530 } 7531 if ($('.back_btn').hasClass("active_level3")) { 7532 $(".lavel1_devices").addClass('hideClass').removeClass('showClass'); 7533 $('.lavel3_android_instruction').addClass('hideClass').removeClass('showClass'); 7534 $('.lavel3_apple_instruction').addClass('hideClass').removeClass('showClass'); 7535 $('.level3').addClass('hideClass').removeClass('showClass'); 7536 $('.level2').addClass('showClass').removeClass('hideClass'); 7537 $('.lavel2_smartwatch_devices').addClass('showClass').removeClass('hideClass'); 7538 $('.back_btn').removeClass('active_level3').addClass('active_level2'); 7539 7540 /*------inner steps set 1----*/ 7541 activeDeviceCurrentStep = 1; // Reset step to first step 7542 activeDeviceCurrentStepApple = 1; // Reset step to first step 7543 $(".step").hide(); 7544 $(".step-1").show(); 7545 updateProgressBar(); 7546 updateProgressBarApple(); 7547 // $("lavel3_android_instruction .step").hide(); 7548 // $("lavel3_android_instruction .step-1").show(); 7549 } 7550} 7551 7552function close_popup() { 7553 $('.lavel3_android_instruction').addClass('hideClass').removeClass('showClass'); 7554 $('.lavel3_apple_instruction').addClass('hideClass').removeClass('showClass'); 7555 $('.level3').addClass('hideClass').removeClass('showClass'); 7556 $('.level2').addClass('hideClass').removeClass('showClass'); 7557 $(".lavel1_devices").addClass('showClass').removeClass('hideClass'); 7558 $('.back_btn').removeClass('active_level2').removeClass('active_level3').addClass('active_level1').removeClass( 7559 'showClass').addClass('hideClass'); 7560 $('#ActicateDeviceModal').modal('hide'); 7561 /*------inner steps set 1----*/ 7562 activeDeviceCurrentStep = 1; // Reset step to first step 7563 activeDeviceCurrentStepApple = 1; // Reset step to first step 7564 $(".step").hide(); 7565 $(".step-1").show(); 7566 updateProgressBar(); 7567 updateProgressBarApple(); 7568} 7569 7570 7571// Create A New Client Object 7572var client = new ClientJS(); 7573 7574// Load Variables 7575var vEng = client.getEngine(); 7576//var fingerprint = client.getFingerprint(); 7577var ClientFingerprint = client.getFingerprint();
7578var vOS = client.getOS(); 7579var vOSV = client.getOSVersion(); 7580var vFont = client.getFonts(); 7581var vTZ = client.getTimeZone(); 7582var vLang = client.getLanguage(); 7583var vSysLang = client.getSystemLanguage(); 7584var vSP = client.getScreenPrint(); 7585var vCP = client.getCanvasPrint(); 7586var vCPU = client.getCPU(); 7587var vDevType = client.getDeviceType(); 7588var vDevice = client.getDevice(); 7589var vDeviceVendor = client.getDeviceVendor(); 7590var vColordepth = client.getColorDepth(); 7591var vCurrent_resoluation = client.getCurrentResolution(); 7592var vAvailable_resoluation = client.getAvailableResolution(); 7593let page = location.href.substring(location.href.lastIndexOf('/') + 1); 7594 7595 7596// you may want to use this to detect different device types 7597var vMobile = client.isMobile(); 7598//console.log(vOSV); 7599var vOSVNew = parseFloat(vOSV); 7600//console.log(vOSVNew.toFixed(2)); 7601 7602var fingerprint_json = { 7603 "operating_system": vOS, 7604 //"fingerprint_id": fingerprint, 7605 "operating_system_version": vOSVNew.toFixed(2), 7606 //"system_fonts": vFont, 7607 "system_timezone": vTZ, 7608 //"language": vLang, 7609 // "system_language" : vSysLang, 7610 // "canvas_print": vCP, 7611 "colordepth": vColordepth, 7612 "system_current_resolution": vCurrent_resoluation, 7613 "system_available_resolution": vAvailable_resoluation, 7614 "device_type": vDevType, 7615 "device": vDevice, 7616 "device_vendor": vDeviceVendor 7617}; 7618 7619function iOS() { 7620 var iOS = 7621 /iPhone/.test(navigator.userAgent) && 7622 !window.MSStream; 7623 return iOS; 7624} 7625 7626if (vMobile == true) { 7627 var fingerprint_id = client.getCustomFingerprint(vOS, vOSVNew, vTZ, vDevType, vDevice, vDeviceVendor, 7628 vAvailable_resoluation, vColordepth); // vFont 7629 7630 var device_detect = iOS(); 7631 7632 if (device_detect == true) { 7633 // console.log("Device is IOS : " + device_detect); 7634 $('#butInstall').addClass('hidden'); 7635 } else { 7636 // console.log("Device is NOT IOS : " + device_detect); 7637 $('#butInstall').removeClass('hidden'); 7638 } 7639} else { 7640 var fingerprint_id = client.getCustomFingerprint(vOS, vOSVNew, vTZ, vAvailable_resoluation, 7641 vColordepth); //vcp vFont 7642} 7643 7644// console.log("Device fingerprint = " + fingerprint_id); 7645// console.log(device_fingerprint_json = JSON.stringify(fingerprint_json)); 7646device_fingerprint_json = JSON.stringify(fingerprint_json) 7647$("#fingerprint_id").val(fingerprint_id); 7648$("#device_fingerprint_json").val(device_fingerprint_json); 7649 7650// $(".all_function_fingerprint").append("<p style='word-wrap:break-word;'> device_fingerprint_json = "+"<pre>"+device_fingerprint_json+"</pre></p>"); 7651 7652/*------ Amit Chauhan ---- direct logged in with fingerprint of this device -------*/ 7653var url = "https://www.funandmoving.com/ajax_direct_logged_on_with_fingerprint"; 7654var formData = { 7655 'fingerprint_id': fingerprint_id, 7656 'fingerprintData': device_fingerprint_json, 7657 'csrf_token': "382c49c05713ec02be9b9ec130d2e3b9" 7658}; 7659var chkUserurl = "https://www.funandmoving.com/ajax_getCheckUserVerify"; 7660$(document).ready(function() { 7661 //checkandGetfingerprintdataforLogin(); 7662 // setTimeout(function() { 7663 // callDirectLoggedInFunction(); 7664 // }, 500); 7665 }); 7666 7667function nhsUserDeviceRegister() 7668{ 7669 $.ajax({ 7670 type: 'POST', 7671 url: 'https://www.funandmoving.com/Sign_in/nhsUserDeviceRegister', 7672 data: formData, 7673 dataType: 'json', 7674 success: function(response) { 7675 // console.log("Success:", response); 7676 }, 7677 error: function(xhr) { 7678 // console.log("Error:", xhr.responseText); 7679 } 7680 }); 7681} 7682 7683function addUpdateFingerPrintId() { 7684 formData.fingerprintId = ClientFingerprint; 7685 7686 $.ajax({ 7687 type: 'POST', 7688 url: 'https://www.funandmoving.com/home/addUpdateFingerPrintId', 7689 data: formData, 7690 dataType: 'json', 7691 success: function(response) { 7692 // console.log("Success:", response); 7693 }, 7694 error: function(xhr) { 7695 // console.log("Error:", xhr.responseText); 7696 } 7697 }); 7698} 7699 7700function checkandGetfingerprintdataforLogin() { 7701 $.ajax({ 7702 type: 'POST', 7703 url: 'https://www.funandmoving.com/home/checkandGetfingerprintdataforLogin', 7704 data: formData, 7705 dataType: 'HTML', 7706 encode: true, 7707 success: function(response, status, xhr) { 7708 $(".loggedin ,.loggedout").last().append(response); 7709 } 7710 }); 7711} 7712 7713function ajaxCheckUserTrialperiodsEnd() { 7714 $.ajax({ 7715 type: 'POST', 7716 url: "https://www.funandmoving.com/user/ajaxCheckUserTrialperiodsEnd", 7717 data: formData, 7718 dataType: 'JSON', 7719 encode: true, 7720 success: function(response, status, xhr) { 7721 if (response.error_code == 1) { 7722 var userID = response.userID; 7723 //alert(device_pk_id); 7724 // window.location.href = ''+device_pk_id; 7725 window.location.href = 'https://www.funandmoving.com/trialSubscription/' + userID; 7726 } 7727 }, 7728 error: function(xhr, status, error) { 7729 console.log("something went wrong with ajax call."); 7730 // console.log("status = " + status); 7731 // console.log("error = " + error); 7732 } 7733 }); 7734} 7735 7736function ajax_getCheckUserVerify() { 7737 7738 $.ajax({ 7739 type: 'POST', 7740 url: chkUserurl, 7741 dataType: 'JSON', 7742 async: false, 7743 encode: true, 7744 success: function(response, status, xhr) { 7745 //console.log(response.error_code); 7746 //console.log("get user verify response = " + JSON.stringify(response)); 7747 }, 7748 complete: function(data) { 7749 // console.log(data); 7750 responseData = data.responseJSON; 7751 // console.log(responseData); 7752 7753 if (typeof responseData !== 'undefined') { 7754 if (responseData.error_code == 1) { 7755 // console.log("is email verified = " + responseData.data.verified_email); 7756 7757 if (responseData.data.verified_email == "No") { 7758 setTimeout(ajax_getCheckUserVerify, 5000); 7759 } else if (responseData.data.verified_email == "Yes") { 7760 $('#activation_popup').modal('hide'); 7761 window.location.href = 'https://www.funandmoving.com/home' 7762 return false;
7763 } 7764 } else { 7765 return false; 7766 } 7767 } 7768 }, 7769 error: function(xhr, status, error) { 7770 // console.log("********** checking user verification *********************"); 7771 console.log("something went wrong with ajax call."); 7772 // console.log("status = " + status); 7773 // console.log("error = " + error); 7774 } 7775 }); 7776} 7777 7778function callDirectLoggedInFunction() { 7779 // counter = counter + 1; 7780 // window.localStorage.setItem('counter', counter); 7781 7782 let page = location.href.substring(location.href.lastIndexOf('/') + 1); 7783 if (page == '') { 7784 page = "home"; 7785 } 7786 7787 $.ajax({ 7788 type: 'POST', 7789 url: url, 7790 data: formData, 7791 dataType: 'JSON', 7792 encode: true, 7793 success: function(response, status, xhr) { 7794 if (response.error_code == 1) { 7795 // console.log("logged in flag = " + response.data); 7796 // let isRedirected = sessionStorage.getItem(page); 7797 // if (!isRedirected) { 7798 // if (!(page == 'home' && response.is_page_reload == "0")) { 7799 // sessionStorage.setItem(page, true); 7800 window.location.reload(true); 7801 // } 7802 // } 7803 } 7804 }, 7805 error: function(xhr, status, error) { 7806 // console.log("********** checking device direct logged in *********************"); 7807 console.log("something went wrong with ajax call."); 7808 // console.log("status = " + status); 7809 // console.log("error = " + error); 7810 } 7811 }); 7812} 7813</script>
vendor: 1 bytes, line 7813
7813
7814<script> 7815console.log("IP Address: 104.234.32.1"); 7816$(window).on('load', function() { 7817 // setTimeout(function() { 7818 // }, 2000); // Delay in milliseconds (2000ms = 2 seconds) 7819}); 7820$("#approval_ok_btn").click(function() { 7821 }); 7822 7823// When the checkbox is clicked 7824$("#approve-1").on("change", function() { 7825 if ($(this).is(":checked")) { 7826 // Check if the checkbox is checked 7827 $("#exercise_approval_form").trigger("submit"); // Trigger form submission 7828 } 7829}); 7830 7831// Handle the form submission logic 7832$("#exercise_approval_form").submit(function(event) { 7833 var approve_1 = $("#exercise_approval_form input:checkbox:checked").val(); 7834 if (approve_1 != 'on') { 7835 $('#errorToShow1').html('<label for="cc-exp" class="error">Please select approval box.</label>'); 7836 $('#errorToShow1').css('display', 'block'); 7837 return false; 7838 } 7839 $('#errorToShow1').css('display', 'none'); 7840 $.ajax({ 7841 url: 'https://www.funandmoving.com/home/saveExerciseApproval', 7842 type: 'POST', 7843 data: $('#exercise_approval_form').serialize(), 7844 dataType: 'json', 7845 success: function(response) { 7846 $('#modalExerciseApproval').modal('hide'); 7847 // if (response.flag == false) { 7848 // location.reload(); 7849 // } else { 7850 // /*------for older step wizard video-----*/ 7851 // // window.location.href = ''; 7852 // } 7853 7854 if (response.flag == false) { 7855 // location.reload(); 7856 } else { 7857 /*------for older step wizard video-----*/ 7858 window.location.href = 'https://www.funandmoving.com/Home/customize_routine_plan'; 7859 } 7860 } 7861 }); 7862 event.preventDefault(); // Prevent default form submission 7863}); 7864</script>
vendor: 1 bytes, line 7864
7864
7865<script> 7866 7867$('.panel-collapse').on('show.bs.collapse', function() { 7868 $(this).siblings('.panel-heading').addClass('active'); 7869}); 7870 7871$('.panel-collapse').on('hide.bs.collapse', function() { 7872 $(this).siblings('.panel-heading').removeClass('active'); 7873}); 7874 7875function err_message() { 7876 swal({ 7877 text: "Please Upgrade Your Account To Unlock Additional Features.", 7878 }); 7879} 7880 7881/*Light bOX CODE*/ 7882$('body').append(` 7883 <div class="lightbox"> 7884 <a href="#lightbox" class="lightbox-close lightbox-toggle">X</a> 7885 <div class="lightbox-container"> 7886 <div class="row"> 7887 <div class="col-sm-12 lightbox-column"> 7888 7889 </div> 7890 </div> 7891 </div> 7892 </div> 7893 `); 7894 7895$('.lightbox-toggle').on('click', event => { 7896 event.preventDefault(); 7897 $('.lightbox').fadeToggle('fast'); 7898 7899 let context = $(event.currentTarget).attr('data-lightbox-type'); 7900 let content = $(event.currentTarget).attr('data-lightbox-content'); 7901 //console.log(event); 7902 if (context == 'video') { 7903 $('.lightbox-column').append(` 7904 <div class="lightbox-video"> 7905 <iframe src="${content}" frameborder="0" allowfullscreen> </iframe> 7906 </div> 7907 `); 7908 } else if (context == 'image') { 7909 $('.lightbox-column').append(` 7910 <img src="${content}" class="img-" frameborder="0" allowfullscreen> 7911 `); 7912 } 7913}); 7914 7915$('.lightbox-close').on('click', event => { 7916 event.preventDefault(); 7917 $('.lightbox-column > *').remove(); 7918}); 7919 7920</script>
vendor: 1 bytes, line 7920
7920
7921<script> 7922$(function() { 7923 if (typeof $.fn.datepicker === "function") { 7924 $(".datepicker").datepicker(); 7925 } 7926}); 7927 7928$('.uploadvid').hide(); 7929$("#input-uploadstatus").change(function() { 7930 var val = $(this).val(); 7931 if (val == '1') { 7932 $('.uploadvid').show(); 7933 $('.linkfield').hide(); 7934 } else if (val == '0') { 7935 $('.uploadvid').hide(); 7936 $('.linkfield').show(); 7937 } 7938}); 7939 7940$(document).ready(function() { 7941 /* Only for image height issue */ 7942 7943 setBackgroundImageHeight(); 7944 7945 $('body').on('hidden.bs.modal', '.modal', function() { 7946 7947 var memory = $(this).html(); 7948 $(this).html(memory); 7949 7950 /* Only for image height issue */ 7951 //setBackgroundImageHeight(); 7952 /* Only for image height issue */ 7953 }); 7954 7955 /* ------------ Mobile Bottom Menu navigation active deactive class logic - Amit Chauhan */ 7956 $('.nav_custom a').click(function() { 7957 //removing the previous selected menu state 7958 $('.nav_custom').find('a.nav__link_custom--active').removeClass('nav__link_custom--active'); 7959 //adding the state for this parent menu 7960 $(this).addClass('nav__link_custom--active'); 7961 var currTab = $(this).find("span.nav__text").text(); 7962 localStorage.setItem("currentTab", currTab); 7963 }); 7964 7965 7966 var lastSelectedTab = localStorage.getItem("currentTab"); 7967 var menu_anchor = $('.nav__link_custom').find("span.nav__text"); 7968 for (let i = 0; i < menu_anchor.length; i++) { 7969 text = menu_anchor[i]; 7970 7971 if (lastSelectedTab == $(text).text()) { 7972 $(text).closest('.nav__link_custom').addClass("nav__link_custom--active"); 7973 } 7974 } 7975 /* ------------ Mobile Bottom Menu navigation active deactive class logic - Amit Chauhan */ 7976 7977 7978 7979 /* Only for image height issue */ 7980 $(window).resize(function() { 7981 setBackgroundImageHeight(); 7982 }); 7983 /* Only for image height issue */ 7984 7985 7986 var today = new Date(); 7987 if (typeof $.fn.datepicker === "function") { 7988 $("#input-trial-end-date").datepicker({ 7989 minDate: today 7990 }); 7991 } 7992}); 7993/* Only for image height issue */ 7994function setBackgroundImageHeight() { 7995 var height = $(window).height(); 7996 7997 if (window.matchMedia("(orientation: portrait)").matches) { 7998 // console.log("Portrait mode"); 7999 //$("#homepage_slider,.homepage_slider").css("min-height", height + 55 + "px"); 8000 if ($(".come_join").length > 0) { 8001 // console.log("join =" + $(".come_join").height()); 8002 // console.log("muse video body = " + $(".muse-video-body").height()); 8003 // console.log("expert says = " + $(".expert-says").height()); 8004 8005 if ($("#zoneTVBar").length > 0 && typeof $("#zoneTVBar").offset() !== "undefined") { 8006 let top = $("#zoneTVBar").offset().top; 8007 $(".bgimg-1").css("min-height", top + "px"); 8008 } else { 8009 let top = ($(".expert-says").offset() || {top: 0}).top + ($(".come_join").height() || 0) + ($(".muse-video-body").height() || 0) + 8010 ($(".expert-says").height() || 0); 8011 $(".bgimg-1").css("min-height", top + "px"); 8012 } 8013 } else { 8014 8015 // console.log("Logged in....in portrait mode"); 8016 8017 //let top = $("#zoneTVBar").offset().top + $(".footer_bottom_section").height(); 8018 if ($("#zoneTVBar").length > 0 && typeof $("#zoneTVBar").offset() !== "undefined") { 8019 let top = $("#zoneTVBar").offset().top; 8020 $(".bgimg-1").css("min-height", top + "px"); 8021 } else { 8022 $(".bgimg-1").css("min-height", height + "px"); 8023 $("#aboutus").css("min-height", height + "px"); 8024 } 8025 } 8026 } 8027 if (window.matchMedia("(orientation: landscape)").matches) { 8028 // console.log("Landscape mode"); 8029 if ($(".come_join").length > 0) { 8030 // console.log("join =" + $(".come_join").height()); 8031 // console.log("muse video body = " + $(".muse-video-body").height()); 8032 // console.log("expert says = " + $(".expert-says").height()); 8033 8034 if ($("#zoneTVBar").length > 0 && typeof $("#zoneTVBar").offset() !== "undefined") { 8035 let top = $("#zoneTVBar").offset().top; 8036 $(".bgimg-1").css("min-height", top + "px"); 8037 } else { 8038 let fOffset = $(".footer_bottom_section").offset() || {top: 0}; 8039 let eOffset = $(".expert-says").offset() || {top: 0}; 8040 let footerTop = fOffset.top ? fOffset.top : eOff
8040set.top; 8041 let top = footerTop + ($(".footer_bottom_section").height() || 0) + ($(".come_join").height() || 0) + ($(".muse-video-body").height() || 0) + ($(".expert-says").height() || 0); 8042 $(".bgimg-1").css("min-height", top + "px"); 8043 } 8044 } else { 8045 if ($("#zoneTVBar").length > 0 && typeof $("#zoneTVBar").offset() !== "undefined") { 8046 let top = $("#zoneTVBar").offset().top; 8047 $(".bgimg-1").css("min-height", top + "px"); 8048 } else { 8049 let top = ($(".footer_bottom_section").offset() || {top: 0}).top + ($(".footer_bottom_section").height() || 0); 8050 $(".bgimg-1").css("min-height", top + "px"); 8051 } 8052 } 8053 } 8054 8055} 8056 8057function activateDevicePopup() { 8058 $("#ActicateDeviceModal").modal("show"); 8059} 8060 8061/*--------Change Profile----------*/ 8062function change_profile(id, user_type) { 8063 $.ajax({ 8064 url: "https://www.funandmoving.com/Home/change_profile", 8065 method: "POST", 8066 data: { 8067 id: id, 8068 user_type: user_type, 8069 csrf_token: "382c49c05713ec02be9b9ec130d2e3b9" 8070 }, 8071 dataType: 'json', 8072 success: function(response) { 8073 if (response) { 8074 swal({ 8075 title: response.msg, 8076 // text: response.msg, 8077 type: "success",
8078 showConfirmButton: false, 8079 showCancelButton: false, 8080 timer: 1000 8081 }, 8082 function() { 8083 window.location.reload(); 8084 }); 8085 } 8086 } 8087 }); 8088} 8089 8090function validate_date(dateString) { 8091 var pattern = /^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/\d{4}$/; 8092 return pattern.test(dateString); 8093} 8094/* Only for image height issue */ 8095</script>
8095 8096 8097<!-- Start Open Web Analytics Tracker -->
8098<script type="text/javascript"> 8099//<![CDATA[ 8100// var owa_baseUrl = 'https://analytics.funandmoving.com/'; 8101// var owa_cmds = owa_cmds || []; 8102// owa_cmds.push(['setSiteId', 'c36915d4e379706fd8b45254caf7a95f']); 8103// owa_cmds.push(['trackPageView']); 8104// owa_cmds.push(['trackClicks']); 8105 8106// (function () { 8107// var _owa = document.createElement('script'); _owa.type = 'text/javascript'; _owa.async = true; 8108// owa_baseUrl = ('https:' == document.location.protocol ? window.owa_baseSecUrl || owa_baseUrl.replace(/http:/, 'https:') : owa_baseUrl); 8109// _owa.src = owa_baseUrl + 'modules/base/js/owa.tracker-combined-min.js'; 8110// var _owa_s = document.getElementsByTagName('script')[0]; _owa_s.parentNode.insertBefore(_owa, _owa_s); 8111// }()); 8112//]]> 8113</script>
8113 8114<!-- End Open Web Analytics Code --> 8115
8116<script src="https://www.funandmoving.com/assets/js/cookie_consent.js?v=1"></script>
8116 8117 8118
8119<script id="rendered-js"> 8120(function($) { 8121 $(document).ready(function() { 8122 var customSelect = $(".custom-select"); 8123 8124 customSelect.each(function() { 8125 var thisCustomSelect = $(this), 8126 options = thisCustomSelect.find("option"), 8127 firstOptionText = options.first().text(); 8128 8129 var selectedItem = $("<div></div>", { 8130 class: "selected-item" 8131 }).appendTo(thisCustomSelect).text(firstOptionText); 8132 8133 var allItems = $("<div></div>", { 8134 class: "all-items all-items-hide" 8135 }).appendTo(thisCustomSelect); 8136 8137 var thisSelect = $(this), 8138 select = thisSelect.find("select"); 8139 8140 options.each(function() { 8141 var that = $(this), 8142 optionText = that.text(); 8143 8144 var item = $("<div></div>", { 8145 class: "item", 8146 on: { 8147 click: function() { 8148 var selectedOptionText = that.text(); 8149 // console.log(selectedOptionText); 8150 selectedItem.text(selectedOptionText).removeClass( 8151 "arrowanim"); 8152 8153 var selectedOptionval = that.val(); 8154 $(select).val(selectedOptionval); 8155 8156 allItems.addClass("all-items-hide"); 8157 } 8158 } 8159 }).appendTo(allItems).text(optionText); 8160 }); 8161 }); 8162 8163 var selectedItem = $(".selected-item"), 8164 allItems = $(".all-items"); 8165 selectedItem.on("click", function(e) { 8166 var currentSelectedItem = $(this), 8167 currentAllItems = currentSelectedItem.next(".all-items"); 8168 8169 allItems.not(currentAllItems).addClass("all-items-hide"); 8170 selectedItem.not(currentSelectedItem).removeClass("arrowanim"); 8171 8172 currentAllItems.toggleClass("all-items-hide"); 8173 currentSelectedItem.toggleClass("arrowanim"); 8174 8175 e.stopPropagation(); 8176 }); 8177 8178 $(document).on("click", function() { 8179 var opened = $(".all-items:not(.all-items-hide)"), 8180 index = opened.parent().index(); 8181 8182 customSelect. 8183 eq(index). 8184 find(".all-items"). 8185 addClass("all-items-hide"); 8186 8187 customSelect. 8188 eq(index). 8189 find(".selected-item"). 8190 removeClass("arrowanim"); 8191 }); 8192 }); 8193})(jQuery); 8194//# sourceURL=pen.js 8195</script>
vendor: 1 bytes, line 8195
8195
8196<script> 8197(function ($) { 8198 const $body = $('body'); 8199 8200 // Keep current behavior for the hamburger click 8201 $(document).on('click', '.navbar-toggle', function () { 8202 $body.toggleClass('open-navbar-toggle'); 8203 }); 8204 8205 // Ensure body class is removed when clicking anywhere outside the opened hamburger menu 8206 $(document).on('click', function (e) { 8207 if (!$body.hasClass('open-navbar-toggle')) return; 8208 8209 const $target = $(e.target); 8210 if ($target.closest('.navbar-toggle, .navbar-collapse, .driver-popover, .driver-overlay').length) return; 8211 8212 $body.removeClass('open-navbar-toggle'); 8213 }); 8214 8215 // Sync body class with actual Bootstrap collapse state (e.g. when menu closes on outside click) 8216 $(document).on('shown.bs.collapse', '.navbar-collapse', function () { 8217 $body.addClass('open-navbar-toggle'); 8218 }); 8219 8220 $(document).on('hidden.bs.collapse', '.navbar-collapse', function () { 8221 $body.removeClass('open-navbar-toggle'); 8222 }); 8223})(jQuery); 8224</script>
8224 8225 8226<!--
8226<script> 8227 $(document).ready(function() { 8228 $("#modal-wizard").modal("show"); 8229 }); 8230</script>
8230 --> 8231
8232<script> 8233// Code goes here 8234$(document).ready(function() { 8235 $('.start-here-preloader').css('display', 'none'); 8236 8237 $(document).ready(function() { 8238 $('.menu_arrow').click(function() { 8239 $(this).toggleClass('menu_arrow-active'); 8240 $('.tabs_admin_one_dropdown').toggle(); // No animation 8241 if ($('.navbar-toggle').is(':visible') && $('.navbar-collapse').hasClass('in')) { 8242 $('.navbar-toggle').click(); 8243 } 8244 }); 8245 8246 $('.custom_dropdown').click(function() { 8247 $('.tabs_admin_one_dropdown').hide(); // No animation 8248 $('.menu_arrow').removeClass('menu_arrow-active'); 8249 if ($('.navbar-toggle').is(':visible') && $('.navbar-collapse').hasClass('in')) { 8250 $('.navbar-toggle').click(); 8251 } 8252 }); 8253 }); 8254 $(document).on('click', '.first', function() { 8255 // $('.first').click(function () { 8256 $('#myWizard a:first').tab('show') 8257 }); 8258 8259 $('#login_switch_menu').click(function(event) { 8260 event.preventDefault(); // Prevent default anchor action 8261 // Show the modal popup 8262 $('#loginSwitchPopup').modal('show'); 8263 $('.modal-backdrop').addClass( 8264 'modal-backdrop_loginSwitchPopup'); // Update the modal backdrop class 8265 8266 // Event for closing the modal when the close button is clicked 8267 $('.close-modal-btn').click(function() { 8268 $('#loginSwitchPopup').modal('hide'); // Hide the modal popup 8269 }); 8270 }); 8271}); 8272 8273function change_routine_emails_status() { 8274 if ($('.wizard_email_checkbox').is(":checked")) { 8275 var routine_emails_status = 1; 8276 var msg = "Routine Finder turned on"; /** Routine Email turned On **/ 8277 } else { 8278 var routine_emails_status = 0; 8279 var msg = "Routine Finder turned off"; /** Routine Email turned off **/ 8280 } 8281 $.ajax({ 8282 url: "https://www.funandmoving.com/Home/step_wizard_email_turn_off", 8283 method: "POST", 8284 data: { 8285 'csrf_token': "382c49c05713ec02be9b9ec130d2e3b9", 8286 routine_emails_status 8287 }, 8288 success: function(res) { 8289 swal("Success!", msg, "success"); 8290 } 8291 }); 8292} 8293</script>
8293 8294
8295<script> 8296// Function to check if the dropdown menu is open 8297function isDropdownOpen() { 8298 return $('.tabs_admin_one_dropdown').is(':visible'); 8299} 8300 8301// Function to toggle the dropdown menu 8302function toggleDropdown() { 8303 $('.menu_arrow').toggleClass('menu_arrow-active'); 8304 $('.tabs_admin_one_dropdown').toggle(); 8305} 8306// Check if an element with class .switch exists before adding the event listener 8307if (document.querySelector('.switch')) { 8308 // Add an event listener to the label to toggle the dropdown menu 8309 document.querySelector('.switch').addEventListener('click', function(event) { 8310 event.stopPropagation(); // Prevent propagation to parent elements 8311 toggleDropdown(); 8312 }); 8313} 8314</script>
8314 8315
8316<script> 8317var activeDeviceCurrentStep = 1; 8318var activeDeviceCurrentStepApple = 1; 8319function updateProgressBarApple() { 8320 var progressPercentageApple = ((activeDeviceCurrentStepApple - 1) / 3) * 100; 8321 $(".lavel3_apple_instruction .progress-bar").css("width", progressPercentageApple + "%"); 8322 $(".lavel3_apple_instruction .step-circle").each(function(index) { 8323 if (index < activeDeviceCurrentStepApple) { 8324 $(this).css("background-color", "#B3B6FF").css("color", "#fff"); 8325 } else { 8326 $(this).css("background-color", "#ccc").css("color", "#000"); 8327 } 8328 }); 8329} 8330function updateProgressBar() { 8331 var progressPercentage = ((activeDeviceCurrentStep - 1) / 3) * 100; 8332 $(".lavel3_android_instruction .progress-bar").css("width", progressPercentage + "%"); 8333 8334 $(".lavel3_android_instruction .step-circle").each(function(index) { 8335 if (index < activeDeviceCurrentStep) { 8336 $(this).css("background-color", "#B3B6FF").css("color", "#fff"); 8337 } else { 8338 $(this).css("background-color", "#ccc").css("color", "#000"); 8339 } 8340 }); 8341} 8342$(document).ready(function() { 8343 $('#multi-step-form-apple').find('.step').slice(1).hide(); 8344 $('#multi-step-form').find('.step').slice(1).hide(); 8345 /*----For Apple---*/ 8346 $(document).on("click", ".lavel3_apple_instruction .active-device-next", function() { 8347 if (activeDeviceCurrentStepApple < 4) { 8348 $(".lavel3_apple_instruction .step").hide(); 8349 activeDeviceCurrentStepApple++; 8350 $(".lavel3_apple_instruction .step-" + activeDeviceCurrentStepApple).show().addClass( 8351 "animate__animated animate__fadeInRight"); 8352 updateProgressBarApple(); 8353 } 8354 }); 8355 $(document).on("click", ".lavel3_apple_instruction .active-device-prev", function() { 8356 if (activeDeviceCurrentStepApple > 1) { 8357 $(".lavel3_apple_instruction .step").hide(); 8358 activeDeviceCurrentStepApple--; 8359 $(".lavel3_apple_instruction .step-" + activeDeviceCurrentStepApple).show().addClass( 8360 "animate__animated animate__fadeInLeft"); 8361 updateProgressBarApple(); 8362 } 8363 }); 8364 8365 /*----For Android---*/ 8366 // Delegate click event to ensure it persists even after closing the modal 8367 $(document).on("click", ".lavel3_android_instruction .active-device-next", function() { 8368 if (activeDeviceCurrentStep < 4) { 8369 $(".lavel3_android_instruction .step").hide(); 8370 activeDeviceCurrentStep++; 8371 $(".lavel3_android_instruction .step-" + activeDeviceCurrentStep).show().addClass( 8372 "animate__animated animate__fadeInRight"); 8373 updateProgressBar(); 8374 } 8375 }); 8376 8377 $(document).on("click", ".lavel3_android_instruction .active-device-prev", function() { 8378 if (activeDeviceCurrentStep > 1) { 8379 $(".lavel3_android_instruction .step").hide(); 8380 activeDeviceCurrentStep--; 8381 $(".lavel3_android_instruction .step-" + activeDeviceCurrentStep).show().addClass( 8382 "animate__animated animate__fadeInLeft"); 8383 updateProgressBar(); 8384 } 8385 }); 8386 8387 // Reset modal state when it is closed 8388 $('#ActicateDeviceModal').on('hidden.bs.modal', function() { 8389 activeDeviceCurrentStep = 1; // Reset step to first step 8390 $("lavel3_android_instruction .step").hide(); 8391 $("lavel3_android_instruction .step-1").show(); 8392 updateProgressBar(); 8393 activeDeviceCurrentStepApple = 1; // Reset step to first step 8394 $("lavel3_apple_instruction .step").hide(); 8395 $("lavel3_apple_instruction .step-1").show(); 8396 updateProgressBarApple(); 8397 }); 8398 8399 // Initialize progress bar 8400 updateProgressBar(); 8401 updateProgressBarApple(); 8402}); 8403</script>
8403 8404 8405<!-- JavaScript for Slider Functionality -->
8406<script> 8407$(function () { 8408 $(".activate-device_slider").each(function () { 8409 var $slider = $(this); 8410 var $ul = $slider.find("ul"); 8411 var $li = $ul.find("li"); 8412 var slideCount = $li.length; 8413 var slideWidth = $li.width(); 8414 var slideHeight = $li.height(); 8415 var currentStep = 1; 8416 8417 // Step number update (linked with this slider only) 8418 var $stepNumber = $slider.next(".slider_step").find("#stepNumber"); 8419 var $totalSteps = $slider.next(".slider_step").find("#totalSteps"); 8420 8421 $stepNumber.text(currentStep); 8422 $totalSteps.text(slideCount); 8423 8424 $slider.css({ 8425 "max-width": slideWidth, 8426 "height": slideHeight 8427 }); 8428 8429 $ul.css({ 8430 "width": slideCount * slideWidth, 8431 "margin-left": "-5px" 8432 }); 8433 $ul.find("li:last-child").prependTo($ul); 8434 8435 function updateStepNumber(stepChange) { 8436 currentStep += stepChange; 8437 if (currentStep > slideCount) currentStep = 1; 8438 if (currentStep < 1) currentStep = slideCount; 8439 $stepNumber.text(currentStep); 8440 } 8441 8442 function moveLeft() { 8443 $ul.stop().animate({ 8444 left: +slideWidth 8445 }, 700, function () { 8446 $ul.find("li:last-child").prependTo($ul); 8447 $ul.css("left", ""); 8448 updateStepNumber(-1); 8449 }); 8450 } 8451 8452 function moveRight() { 8453 $ul.stop().animate({ 8454 left: -slideWidth 8455 }, 700, function () { 8456 $ul.find("li:first-child").appendTo($ul); 8457 $ul.css("left", ""); 8458 updateStepNumber(1); 8459 }); 8460 } 8461 8462 $slider.find(".next").on("click", function () { 8463 moveRight(); 8464 }); 8465 8466 $slider.find(".prev").on("click", function () { 8467 moveLeft(); 8468 }); 8469 }); 8470 }); 8471</script>
8471 8472
8473<script> 8474function getRandomLightColor() { 8475 let r = Math.floor(Math.random() * 106) + 150; // Light Red (150-255) 8476 let g = Math.floor(Math.random() * 106) + 150; // Light Green (150-255) 8477 let b = Math.floor(Math.random() * 106) + 150; // Light Blue (150-255) 8478 return `rgb(${r}, ${g}, ${b})`; 8479} 8480 8481document.querySelectorAll(".fa-circle").forEach(icon => { 8482 icon.style.color = getRandomLightColor(); 8483}); 8484</script>
8484 8485
8486<script> 8487 (function () { 8488 // Move the Corporate "Learn More" modals outside the Swiper DOM (Swiper uses transforms that can clip/fix-position descendants) 8489 document.querySelectorAll('.enter-corpa_box_inner .enter-corpa-modal-overlay').forEach(modal => { 8490 if (modal && modal.parentElement !== document.body) { 8491 document.body.appendChild(modal); 8492 } 8493 }); 8494 8495 let activeModal = null; 8496 8497 function trapFocus(element) { 8498 if (!element || element.dataset.focusTrapBound === '1') return; 8499 element.dataset.focusTrapBound = '1'; 8500 8501 element.addEventListener('keydown', function trap(e) { 8502 if (e.key !== 'Tab') return; 8503 8504 const focusableElements = element.querySelectorAll( 8505 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex="-1"])' 8506 ); 8507 if (!focusableElements.length) return; 8508 8509 const firstFocusable = focusableElements[0]; 8510 const lastFocusable = focusableElements[focusableElements.length - 1]; 8511 8512 if (e.shiftKey) { 8513 if (document.activeElement === firstFocusable) { 8514 e.preventDefault(); 8515 lastFocusable.focus(); 8516 } 8517 } else { 8518 if (document.activeElement === lastFocusable) { 8519 e.preventDefault(); 8520 firstFocusable.focus(); 8521 } 8522 } 8523 }); 8524 } 8525 8526 function bindModalEvents(modal) { 8527 if (!modal || modal.dataset.bound === '1') return; 8528 modal.dataset.bound = '1'; 8529 8530 const closeBtn = modal.querySelector('.modal-close-btn'); 8531 if (closeBtn) { 8532 closeBtn.addEventListener('click', () => closeModal(modal)); 8533 } 8534 8535 modal.addEventListener('click', (e) => { 8536 if (e.target === modal) { 8537 closeModal(modal); 8538 } 8539 }); 8540 } 8541 8542 function openModal(modal, btn) { 8543 if (!modal) return; 8544 8545 if (activeModal && activeModal !== modal) { 8546 closeModal(activeModal); 8547 } 8548 8549 activeModal = modal; 8550 bindModalEvents(modal); 8551 trapFocus(modal); 8552 8553 modal.classList.add('active'); 8554 modal.setAttribute('aria-hidden', 'false'); 8555 8556 if (btn) { 8557 modal.dataset.openerBtnId = btn.id || ''; 8558 btn.setAttribute('aria-expanded', 'true'); 8559 } 8560 8561 modal.focus(); 8562 } 8563 8564 function closeModal(modal, btn) { 8565 if (!modal) return; 8566 8567 modal.classList.remove('active'); 8568 modal.setAttribute('aria-hidden', 'true'); 8569 8570 const openerBtnId = modal.dataset.openerBtnId; 8571 const openerBtn = btn || (openerBtnId ? document.getElementById(openerBtnId) : null); 8572 if (openerBtn) { 8573 openerBtn.setAttribute('aria-expanded', 'false'); 8574 openerBtn.focus(); 8575 } 8576 8577 if (activeModal === modal) { 8578 activeModal = null; 8579 } 8580 } 8581 8582 document.addEventListener('keydown', (e) => { 8583 if (e.key === 'Escape' && activeModal) { 8584 closeModal(activeModal); 8585 } 8586 }); 8587 8588 document.querySelectorAll('.learn-more-btn').forEach(btn => { 8589 btn.addEventListener('click', () => { 8590 const modalId = btn.getAttribute('aria-controls'); 8591 const modal = modalId ? document.getElementById(modalId) : null; 8592 if (modal) { 8593 openModal(modal, btn); 8594 } else { 8595 console.warn('Modal not found for button:', btn); 8596 } 8597 }); 8598 }); 8599 8600 })(); 8601</script>
8601 8602
8603<script> 8604 function checkHeightAndAddClass() { 8605 8606 /** Added By Sahejad 24/04/2026 For Header **/ 8607 if (typeof window.updateResponsiveHeaderMenuState === 'function') { 8608 window.updateResponsiveHeaderMenuState(); 8609 return; 8610 } 8611 /** Added By Sahejad 24/04/2026 For Header **/ 8612 8613 var target = $('.header_logo-menu-btn'); 8614 // alert(target.outerHeight()); 8615 if (target.outerHeight() > 75) { 8616 target.addClass('header_logo-menu-btn_res'); 8617 } else { 8618 target.removeClass('header_logo-menu-btn_res'); 8619 } 8620 } 8621 8622 /** Added By Codex 03/06/2026 Keep main top spacing in sync with header height **/ 8623 function getHeaderElement() { 8624 return document.querySelector('.header-lower') || document.querySelector('.main-header'); 8625 } 8626 8627 function getMainElement() { 8628 return document.querySelector('.main'); 8629 } 8630 8631 function applyMainMarginFromHeader() { 8632 var header = getHeaderElement(); 8633 var main = getMainElement(); 8634 if (!header || !main) { 8635 return; 8636 } 8637 8638 var height = Math.ceil(header.getBoundingClientRect().height || 0); 8639 main.style.marginTop = height + 'px'; 8640 document.body.style.visibility = 'visible'; 8641 } 8642 8643 function setMainMargin() { 8644 applyMainMarginFromHeader(); 8645 } 8646 8647 (function setupMainMarginSync() { 8648 var rafId = null; 8649 var resizeObserver = null; 8650 var mutationObserver = null; 8651 8652 function scheduleMainMarginSync() { 8653 if (rafId) { 8654 cancelAnimationFrame(rafId); 8655 } 8656 8657 rafId = requestAnimationFrame(function() { 8658 applyMainMarginFromHeader(); 8659 // Re-check once more after layout settles. 8660 requestAnimationFrame(applyMainMarginFromHeader); 8661 }); 8662 } 8663 8664 window.scheduleMainMarginSync = scheduleMainMarginSync; 8665 8666 scheduleMainMarginSync(); 8667 setTimeout(scheduleMainMarginSync, 150); 8668 setTimeout(scheduleMainMarginSync, 600); 8669 setTimeout(scheduleMainMarginSync, 1200); 8670 8671 window.addEventListener('load', scheduleMainMarginSync); 8672 window.addEventListener('resize', scheduleMainMarginSync); 8673 window.addEventListener('orientationchange', scheduleMainMarginSync); 8674 window.addEventListener('pageshow', scheduleMainMarginSync); 8675 8676 if (document.fonts && document.fonts.ready) { 8677 document.fonts.ready.then(scheduleMainMarginSync); 8678 } 8679 8680 if (typeof ResizeObserver !== 'undefined') { 8681 resizeObserver = new ResizeObserver(function() { 8682 scheduleMainMarginSync(); 8683 }); 8684 var header = getHeaderElement(); 8685 if (header) { 8686 resizeObserver.observe(header); 8687 } 8688 } 8689 8690 if (typeof MutationObserver !== 'undefined') { 8691 mutationObserver = new MutationObserver(function() { 8692 scheduleMainMarginSync(); 8693 }); 8694 mutationObserver.observe(document.body, { 8695 childList: true, 8696 subtree: true, 8697 attributes: true, 8698 attributeFilter: ['class', 'style'] 8699 }); 8700 } 8701 })(); 8702 /** Added By Codex 03/06/2026 Keep main top spacing in sync with header height **/ 8703 8704 $(window).on('load', function() { 8705 setTimeout(function() { 8706 checkHeightAndAddClass(); 8707 corporate_content_auto_height_mng(); 8708 if (typeof window.scheduleMainMarginSync === 'function') { 8709 window.scheduleMainMarginSync(); 8710 } else { 8711 setMainMargin(); 8712 } 8713 }, 1000); 8714 }); 8715 8716 $(window).resize(function() { 8717 checkHeightAndAddClass(); 8718 corporate_content_auto_height_mng(); 8719 if (typeof window.scheduleMainMarginSync === 'function') { 8720 window.scheduleMainMarginSync(); 8721 } else { 8722 setMainMargin(); 8723 } 8724 }); 8725 8726 (function() { 8727 let startTime = Date.now(); 8728 window.userId = ""; 8729 8730 function sendTimeSpent() { 8731 let durationMs = Date.now() - startTime; 8732 let durationSec = Math.round(durationMs / 1000); 8733 8734 // Build payload object with CSRF token 8735 let payloadObj = { 8736 user_id: window.userId || null, 8737 page_url: window.location.pathname, 8738 time_spent: durationSec, 8739 fingerprintData: formData.fingerprintData, 8740 "csrf_token": "382c49c05713ec02be9b9ec130d2e3b9" 8741 }; 8742 8743 // Convert to form-urlencoded, because CI parses that easily 8744 let payload = new URLSearchParams(payloadObj); 8745 8746 // Send via sendBeacon 8747 navigator.sendBeacon('https://www.funandmoving.com/Home/track_user_time_spend', payload); 8748 } 8749 8750 // Fire before unload 8751 window.addEventListener("beforeunload", sendTimeSpent); 8752 })(); 8753</script>
8753 8754
8755<script src="https://www.funandmoving.com/assets/js/driverjs/js/driver.js.iife.js"></script>
vendor: 1 bytes, line 8755
8755
8756<script id="rendered-js"> 8757 let tgRoutine; 8758 let tgProgress; 8759 let tgChatbot; 8760 8761 const FAM_IS_USER_LOGGED_IN = false; 8762 window.FAM_IS_USER_LOGGED_IN = FAM_IS_USER_LOGGED_IN; 8763 8764 const $ = window.jQuery || window.$; 8765 8766 function famIsRoutineListPath(pathname) { 8767 const p = String(pathname || '').toLowerCase(); 8768 if (p.indexOf('routine_list') !== -1) { 8769 return true; 8770 } 8771 return /(^|\/)routines(\/|$)/.test(p); 8772 } 8773 8774 function famIsActivityLogPath(pathname) { 8775 return String(pathname || '').toLowerCase().indexOf('customer_progress_report') !== -1; 8776 } 8777 8778 window.famIsRoutineListPath = famIsRoutineListPath; 8779 window.famIsActivityLogPath = famIsActivityLogPath; 8780 8781 function IsResponsiveScreen() 8782 { 8783 var is_reseponsive_scrn = 'false'; 8784 if ($('.navbar-toggle').is(':visible')) { 8785 is_reseponsive_scrn = 'true'; 8786 } 8787 return is_reseponsive_scrn; 8788 } 8789 8790 function createTourGuideInstance(steps = []) { 8791 var driverFactory = (window.driver && window.driver.js && window.driver.js.driver) ? window.driver.js.driver : null; 8792 if (!driverFactory) { 8793 console.error('Driver.js failed to load'); 8794 return null; 8795 } 8796 8797 var onFinishCallbacks = []; 8798 var onExitCallbacks = []; 8799 var onBeforeStepCallbacks = []; 8800 var onAfterStepCallbacks = []; 8801 var driverObj = null; 8802 8803 function isRealElement(selector) { 8804 if (!selector) return false; 8805 var s = String(selector).toLowerCase().trim(); 8806 if (s === 'body' || s === 'html' || s === '#body' || s === '#html') return false; 8807 try { 8808 var el = document.querySelector(selector); 8809 if (!el || el === document.body || el === document.documentElement) return false; 8810 return true; 8811 } catch (e) { 8812 return false; 8813 } 8814 } 8815 8816 function checkAndApplyCenter() { 8817 setTimeout(function () { 8818 var popoverEl = document.querySelector('.driver-popover'); 8819 if (!popoverEl) return; 8820 var idx = driverObj ? driverObj.getActiveIndex() : 0; 8821 var currentStep = driverSteps[idx]; 8822 var hasTarget = currentStep && isRealElement(currentStep.element); 8823 if (!hasTarget) { 8824 popoverEl.classList.add('driver-popover-center'); 8825 } else { 8826 popoverEl.classList.remove('driver-popover-center'); 8827 } 8828 }, 10); 8829 } 8830 8831 function setDriverPrevDisabled(isDisabled) { 8832 setTimeout(function () { 8833 var prevBtn = document.querySelector('.driver-popover-prev-btn'); 8834 if (!prevBtn) return; 8835 prevBtn.disabled = !!isDisabled; 8836 prevBtn.classList.toggle('driver-popover-btn-disabled', !!isDisabled); 8837 prevBtn.setAttribute('aria-disabled', isDisabled ? 'true' : 'false'); 8838 }, 20); 8839 } 8840 8841 async function applyStepEnter(nextStep, previousStep) { 8842 if (nextStep && typeof nextStep.beforeEnter === 'function') { 8843 try { 8844 await nextStep.beforeEnter(nextStep, previousStep); 8845 } catch (e) {} 8846 } 8847 onAfterStepCallbacks.forEach(function (cb) { cb(nextStep, previousStep); }); 8848 setDriverPrevDisabled(driverObj ? driverObj.getActiveIndex() <= 0 : false); 8849 checkAndApplyCenter(); 8850 } 8851 8852 var driverSteps = steps.map(function (step, index) { 8853 var rawTarget = step.target; 8854 var selector = null; 8855 if (rawTarget) { 8856 var s = String(rawTarget).trim(); 8857 var lower = s.toLowerCase(); 8858 if (lower !== 'body' && lower !== 'html' && lower !== '#body' && lower !== '#html') { 8859 if (/^([#[.]|\[)/.test(s)) { 8860 selector = s; 8861 } else { 8862 selector = '#' + s; 8863 } 8864 } 8865 } 8866 8867 var dStep = { 8868 popover: { 8869 title: step.title || '', 8870 description: step.content || '', 8871 side: 'right', 8872 align: 'start', 8873 popoverClass: 'common-tour-popover', 8874 onNextClick: async function () { 8875 var nextIndex = index + 1; 8876 var nextStep = steps[nextIndex] || null; 8877 if (typeof step.beforeLeave === 'function') { 8878 try { 8879 await step.beforeLeave(step, nextStep); 8880 } catch (e) {} 8881 } 8882 onBeforeStepCallbacks.forEach(function (cb) { cb(); }); 8883 if (nextIndex >= steps.length) { 8884 driverObj.moveNext(); 8885 await applyStepEnter(null, step); 8886 return; 8887 } 8888 driverObj.moveNext(); 8889 await applyStepEnter(nextStep, step); 8890 }, 8891 onPrevClick: async function () { 8892 var prevIndex = index - 1; 8893 var prevStep = steps[prevIndex] || null; 8894 if (typeof step.beforeLeave === 'function') { 8895 try { 8896 await step.beforeLeave(step, prevStep); 8897 } catch (e) {} 8898 } 8899 onBeforeStepCallbacks.forEach(function (cb) { cb(); }); 8900 if (prevIndex < 0) { 8901 return; 8902 } 8903 driverObj.movePrevious(); 8904 await applyStepEnter(prevStep, step); 8905 } 8906 }, 8907 onHighlightStarted: function () { 8908 checkAndApplyCenter(); 8909 } 8910 }; 8911 8912 if (isRealElement(selector)) { 8913 dStep.element = selector; 8914 dStep.stagePadding = typeof step.stagePadding === 'number' ? step.stagePadding : 8; 8915 } 8916 8917 return dStep; 8918 }); 8919 8920 driverObj = driverFactory({ 8921 showProgress: true, 8922 animate: true, 8923 allowClose: true, 8924 overlayOpacity: 0.75, 8925 stagePadding: 8, 8926 stageRadius: 10, 8927 popoverOffset: 24, 8928 popoverClass: 'common-tour-popover', 8929 nextBtnText: 'Next', 8930 prevBtnText: 'Back', 8931 doneBtnText: 'Done', 8932 progressText: '{{current}}/{{total}}', 8933 steps: driverSteps,
8934 onPopoverRender: function () { 8935 checkAndApplyCenter(); 8936 }, 8937 onDestroyed: function () { 8938 onFinishCallbacks.forEach(function (cb) { cb(); }); 8939 onExitCallbacks.forEach(function (cb) { cb(); }); 8940 } 8941 }); 8942 8943 return { 8944 driverObj: driverObj, 8945 get activeStep() { 8946 return driverObj ? driverObj.getActiveIndex() : 0; 8947 }, 8948 start: async function () { 8949 if (driverObj) { 8950 driverObj.drive(0); 8951 await applyStepEnter(steps[0] || null, null); 8952 } 8953 }, 8954 exit: function () { 8955 if (driverObj) { 8956 driverObj.destroy(); 8957 } 8958 }, 8959 destroy: function () { 8960 if (driverObj) { 8961 driverObj.destroy(); 8962 } 8963 }, 8964 refreshDialog: function () { 8965 if (driverObj) { 8966 try { 8967 driverObj.refresh(); 8968 checkAndApplyCenter(); 8969 } catch (e) {} 8970 } 8971 }, 8972 onFinish: function (cb) { 8973 if (typeof cb === 'function') onFinishCallbacks.push(cb); 8974 }, 8975 onAfterExit: function (cb) { 8976 if (typeof cb === 'function') onExitCallbacks.push(cb); 8977 }, 8978 onBeforeStepChange: function (cb) { 8979 if (typeof cb === 'function') onBeforeStepCallbacks.push(cb); 8980 }, 8981 onAfterStepChange: function (cb) { 8982 if (typeof cb === 'function') onAfterStepCallbacks.push(cb); 8983 } 8984 }; 8985 } 8986 8987 function isCurrentPageHome() { 8988 try { 8989 const base = new URL('https://www.funandmoving.com/'); 8990 const basePath = (base.pathname || '/').replace(/\/+$/, '') || '/'; 8991 const currentPath = (window.location.pathname || '/').replace(/\/+$/, '') || '/'; 8992 if (currentPath === basePath) return true; 8993 if (currentPath === `${basePath}/home`) return true; 8994 if (currentPath === '/home' || currentPath === '/index.php' || currentPath === '/') return true; 8995 return false; 8996 } catch (e) { 8997 const p = (window.location.pathname || '/').replace(/\/+$/, '') || '/'; 8998 return p === '/' || p === '/home' || p === '/index.php'; 8999 } 9000 } 9001 9002 function elementExists(selector) { 9003 const element = document.querySelector(selector); 9004 return !!element; 9005 } 9006 9007 function isElementVisible(selector) { 9008 const element = document.querySelector(selector); 9009 if (!element) return false; 9010 const style = window.getComputedStyle(element); 9011 if (style.display === 'none' || style.visibility === 'hidden') return false; 9012 return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); 9013 } 9014 9015 function waitForMs(duration = 200) { 9016 return new Promise(resolve => setTimeout(resolve, duration)); 9017 } 9018 9019 function isChatbotTourLoggedIn() { 9020 if (typeof window.isChatUserLoggedIn === 'function') { 9021 return window.isChatUserLoggedIn(); 9022 } 9023 return typeof window.userId !== 'undefined' && window.userId && window.userId !== "null" && window.userId !== "0"; 9024 } 9025 9026 async function activateChatbotScreen(screenKey) { 9027 const showChatButton = document.getElementById('show-chat-btn'); 9028 const menuDropdown = document.getElementById('chat-header-menu-dropdown'); 9029 const menuAllConversations = document.getElementById('menu-all-conversations'); 9030 9031 if (menuDropdown) { 9032 menuDropdown.style.setProperty('display', 'none', 'important'); 9033 menuDropdown.style.visibility = 'hidden'; 9034 menuDropdown.style.opacity = '0'; 9035 } 9036 if (typeof window.closeMenuDropdown === 'function') { 9037 try { window.closeMenuDropdown(); } catch (e) {} 9038 } 9039 9040 if (screenKey === 'welcome') { 9041 if (typeof window.showWelcomePanel === 'function') { 9042 window.showWelcomePanel(); 9043 } 9044 await waitForMs(150); 9045 return; 9046 } 9047 9048 if (screenKey === 'chat') { 9049 if (typeof window.showChatPanel === 'function') { 9050 window.showChatPanel(); 9051 } else if (showChatButton && isElementVisible('#show-chat-btn')) { 9052 showChatButton.click(); 9053 } 9054 await waitForMs(300); 9055 return; 9056 } 9057 9058 if (screenKey === 'menu') { 9059 await activateChatbotScreen('chat'); 9060 const menuButton = document.getElementById('chat-header-menu-btn'); 9061 if (menuButton && isElementVisible('#chat-header-menu-btn') && menuDropdown) { 9062 menuDropdown.style.setProperty('display', 'block', 'important'); 9063 menuDropdown.style.visibility = 'visible'; 9064 menuDropdown.style.opacity = '1'; 9065 } 9066 await waitForMs(220); 9067 return; 9068 } 9069 9070 if (screenKey === 'conversation') { 9071 if (!isChatbotTourLoggedIn()) { 9072 await activateChatbotScreen('chat'); 9073 return; 9074 } 9075 if (typeof window.showConversationPanel === 'function') { 9076 window.showConversationPanel(); 9077 } else { 9078 await activateChatbotScreen('menu'); 9079 if (menuAllConversations && isElementVisible('#menu-all-conversations')) { 9080 menuAllConversations.click(); 9081 } 9082 } 9083 await waitForMs(320); 9084 return; 9085 } 9086 } 9087 9088 const chatbot_tour_guide_steps = Object.values([{"step_id":"18","page_id":"3","title":"Chatbot Toggle","description":"<p>Click here to open the chatbot and start the tour.<\/p>","status":"1","target_id":"#chat-toggle","responsive_target_id":"#chat-toggle","sort":"1","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"welcome","requires_auth":"0"}
9088,{"step_id":"19","page_id":"3","title":"Welcome Screen","description":"<p>This is the chatbot welcome screen where users begin before opening the full chat panel.<\/p>","status":"1","target_id":"#chat-history-toggle","responsive_target_id":"#chat-history-toggle","sort":"2","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"welcome","requires_auth":"0"},{"step_id":"35","page_id":"3","title":"Continue My Plan","description":"<p>Return straight to your saved custom plan from here whenever you want to keep going.<\/p>","status":"1","target_id":"#alfie-continue-my-plan-btn","responsive_target_id":"#alfie-continue-my-plan-btn","sort":"3","created_at":"2026-05-21 06:38:01","updated_at":"2026-05-21 06:38:01","screen":"welcome","requires_auth":"1"},{"step_id":"36","page_id":"3","title":"Routine Tour Button","description":"<p>Use this shortcut to open the Routine Tour and explore how routines are organised.<\/p>","status":"1","target_id":"#alfie-routine-tour-btn","responsive_target_id":"#alfie-routine-tour-btn","sort":"4","created_at":"2026-05-21 06:38:01","updated_at":"2026-05-21 06:38:01","screen":"welcome","requires_auth":"0"},{"step_id":"37","page_id":"3","title":"Activity Log Tour Button","description":"<p>Open the Activity Log Tour here to review goals, activity progress and medals.<\/p>","status":"1","target_id":"#alfie-activity-log-tour-btn","responsive_target_id":"#alfie-activity-log-tour-btn","sort":"5","created_at":"2026-05-21 06:38:01","updated_at":"2026-05-21 06:38:01","screen":"welcome","requires_auth":"1"},{"step_id":"20","page_id":"3","title":"Chat With Uncle Alfie","description":"<p>Click this button to open the main chatbot screen and begin conversation.<\/p>","status":"1","target_id":"#show-chat-btn","responsive_target_id":"#show-chat-btn","sort":"7","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"welcome","requires_auth":"0"},{"step_id":"21","page_id":"3","title":"Chat Header","description":"<p>This header stays visible while chatting and gives access to bot controls.<\/p>","status":"1","target_id":"#chat-header","responsive_target_id":"#chat-header","sort":"8","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"0"},{"step_id":"22","page_id":"3","title":"Message Area","description":"<p>All user and bot replies appear in this message area.<\/p>","status":"1","target_id":"#chat-messages","responsive_target_id":"#chat-messages","sort":"9","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"0"},{"step_id":"23","page_id":"3","title":"Message Input","description":"<p>Type your query or health concern here.<\/p>","status":"1","target_id":"#message","responsive_target_id":"#message","sort":"10","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"0"},{"step_id":"24","page_id":"3","title":"Send Button","description":"<p>Use this button to submit the typed message.<\/p>","status":"1","target_id":"#chat-input .send-btn","responsive_target_id":"#chat-input .send-btn","sort":"11","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"0"},{"step_id":"25","page_id":"3","title":"Back To Welcome","description":"<p>Use this back arrow to return from chat screen to the welcome screen.<\/p>","status":"1","target_id":"#chat-back-arrow","responsive_target_id":"#chat-back-arrow","sort":"12","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"0"},{"step_id":"26","page_id":"3","title":"Voice Input","description":"<p>Use voice input when microphone mode is enabled.<\/p>","status":"1","target_id":"#voiceBtn","responsive_target_id":"#voiceBtn","sort":"13","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"0"},{"step_id":"27","page_id":"3","title":"Chat Menu","description":"<p>Open this menu for conversation management actions.<\/p>","status":"1","target_id":"#chat-header-menu-btn","responsive_target_id":"#chat-header-menu-btn","sort":"14","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"1"},{"step_id":"28","page_id":"3","title":"Menu Options","description":"<p>These menu options let you create a new chat or open saved conversations.
9088<\/p>","status":"1","target_id":"#chat-header-menu-dropdown","responsive_target_id":"#chat-header-menu-dropdown","sort":"15","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"menu","requires_auth":"1"},{"step_id":"29","page_id":"3","title":"New Conversation","description":"<p>Start a fresh conversation with this action.<\/p>","status":"1","target_id":"#menu-new-conversation","responsive_target_id":"#menu-new-conversation","sort":"16","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"menu","requires_auth":"1"},{"step_id":"30","page_id":"3","title":"All Conversations","description":"<p>Open this to view previous conversation threads.<\/p>","status":"1","target_id":"#menu-all-conversations","responsive_target_id":"#menu-all-conversations","sort":"17","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"menu","requires_auth":"1"},{"step_id":"31","page_id":"3","title":"Conversations Screen","description":"<p>This screen lists all saved conversation threads.<\/p>","status":"1","target_id":"#conversation-panel","responsive_target_id":"#conversation-panel","sort":"18","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"conversation","requires_auth":"1"},{"step_id":"32","page_id":"3","title":"Conversation List","description":"<p>Select any thread from this list to continue that conversation.<\/p>","status":"1","target_id":"#conversation-list","responsive_target_id":"#conversation-list","sort":"19","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"conversation","requires_auth":"1"},{"step_id":"33","page_id":"3","title":"Back To Chat","description":"<p>Use back to return from conversations screen to chat.<\/p>","status":"1","target_id":"#chat-back-arrow","responsive_target_id":"#chat-back-arrow","sort":"20","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"conversation","requires_auth":"1"},{"step_id":"34","page_id":"3","title":"Close Chatbot","description":"<p>Use this close icon to hide the chatbot window.<\/p>","status":"1","target_id":"#chat-header-close-icon","responsive_target_id":"#chat-header-close-icon","sort":"21","created_at":"2026-03-07 11:47:43","updated_at":"2026-03-07 11:47:43","screen":"chat","requires_auth":"0"}]); 9089 9090 function getChatbotTourSteps() { 9091 const isLoggedIn = isChatbotTourLoggedIn(); 9092 const useDbSteps = Array.isArray(chatbot_tour_guide_steps) && chatbot_tour_guide_steps.length > 0; 9093 9094 if (useDbSteps) { 9095 const isResponsive = IsResponsiveScreen() === 'true'; 9096 return chatbot_tour_guide_steps 9097 .filter(step => !(step.requires_auth == 1) || isLoggedIn) 9098 .filter(step => { 9099 const sel = (isResponsive && step.responsive_target_id) ? step.responsive_target_id : (step.target_id || step.target); 9100 return sel && elementExists(sel); 9101 }) 9102 .map(step => { 9103 const sel = (isResponsive && step.responsive_target_id) ? step.responsive_target_id : (step.target_id || step.target); 9104 return { 9105 title: step.title || '', 9106 content: step.description || step.title || '', 9107 target: sel, 9108 screen: step.screen || 'chat' 9109 }; 9110 }); 9111 } 9112 9113 const steps = [ 9114 { title: 'Chatbot Toggle', content: 'Click here to open the chatbot and start the tour.', target: '#chat-toggle', screen: 'welcome' }, 9115 { title: 'Welcome Screen', content: 'This is the chatbot welcome screen where users begin before opening the full chat panel.', target: '#chat-history-toggle', screen: 'welcome' }, 9116 { title: 'Continue My Plan', content: 'Return straight to your saved custom plan from here whenever you want to keep going.', target: '#alfie-continue-my-plan-btn', screen: 'welcome', requiresAuth: true }, 9117 { title: 'Routine Tour Button', content: 'Use this shortcut to open the Routine Tour and explore how rout
9117ines are organised.', target: '#alfie-routine-tour-btn', screen: 'welcome' }, 9118 { title: 'Activity Log Tour Button', content: 'Open the Activity Log Tour here to review goals, activity progress and medals.', target: '#alfie-activity-log-tour-btn', screen: 'welcome', requiresAuth: true }, 9119 { title: "See What's New", content: 'Select this option to view the latest updates, announcements and new platform highlights.', target: '#alfie-whats-new-btn', screen: 'welcome' }, 9120 { title: 'Chat With Uncle Alfie', content: 'Click this button to open the main chatbot screen and begin conversation.', target: '#show-chat-btn', screen: 'welcome' }, 9121 { title: 'Chat Header', content: 'This header stays visible while chatting and gives access to bot controls.', target: '#chat-header', screen: 'chat' }, 9122 { title: 'Message Area', content: 'All user and bot replies appear in this message area.', target: '#chat-messages', screen: 'chat' }, 9123 { title: 'Message Input', content: 'Type your query or health concern here.', target: '#message', screen: 'chat' }, 9124 { title: 'Send Button', content: 'Use this button to submit the typed message.', target: '#chat-input .send-btn', screen: 'chat' }, 9125 { title: 'Back To Welcome', content: 'Use this back arrow to return from chat screen to the welcome screen.', target: '#chat-back-arrow', screen: 'chat' }, 9126 { title: 'Voice Input', content: 'Use voice input when microphone mode is enabled.', target: '#voiceBtn', screen: 'chat' }, 9127 { title: 'Chat Menu', content: 'Open this menu for conversation management actions.', target: '#chat-header-menu-btn', screen: 'chat', requiresAuth: true }, 9128 { title: 'Menu Options', content: 'These menu options let you create a new chat or open saved conversations.', target: '#chat-header-menu-dropdown', screen: 'menu', requiresAuth: true }, 9129 { title: 'New Conversation', content: 'Start a fresh conversation with this action.', target: '#menu-new-conversation', screen: 'menu', requiresAuth: true }, 9130 { title: 'All Conversations', content: 'Open this to view previous conversation threads.', target: '#menu-all-conversations', screen: 'menu', requiresAuth: true }, 9131 { title: 'Conversations Screen', content: 'This screen lists all saved conversation threads.', target: '#conversation-panel', screen: 'conversation', requiresAuth: true }, 9132 { title: 'Conversation List', content: 'Select any thread from this list to continue that conversation.', target: '#conversation-list', screen: 'conversation', requiresAuth: true }, 9133 { title: 'Back To Chat', content: 'Use back to return from conversations screen to chat.', target: '#chat-back-arrow', screen: 'conversation', requiresAuth: true }, 9134 { title: 'Close Chatbot', content: 'Use this close icon to hide the chatbot window.', target: '#chat-header-close-icon', screen: 'chat' } 9135 ]; 9136 9137 return steps 9138 .filter(step => !step.requiresAuth || isLoggedIn) 9139 .filter(step => step.target && elementExists(step.target)) 9140 .map(step => ({ title: step.title, content: step.content, target: step.target, screen: step.screen || 'chat' })); 9141 } 9142 9143 async function ensureChatbotPanelClosed() { 9144 const chatbotToggleButton = document.getElementById('chat-toggle'); 9145 const chatbotBox = document.getElementById('chat-box'); 9146 if (!chatbotToggleButton || !chatbotBox) { 9147 return false; 9148 } 9149 const isChatbotOpen = window.getComputedStyle(chatbotBox).display !== 'none'; 9150 if (isChatbotOpen) { 9151 chatbotToggleButton.click(); 9152 await waitForMs(600); 9153 } 9154 return true; 9155 } 9156 9157 async function prepareChatbotTourLayout(startScreen = 'welcome') { 9158 const chatbotToggleButton = document.getElementById('chat-toggle'); 9159 const chatbotBox = document.getElementById('chat-box'); 9160 9161 if (!chatbotToggleButton || !chatbotBox) { 9162 return false; 9163 } 9164 9165 const isChatbotClosed = window.getComputedStyle(chatbotBox).display === 'none'; 9166 if (isChatbotClosed) { 9167 if (startScreen === 'welcome') {
9168 window.chatbotTourForceWelcome = true; 9169 } 9170 chatbotToggleButton.click(); 9171 const maxWait = 1200; 9172 const step = 50; 9173 let elapsed = 0; 9174 while (elapsed < maxWait) { 9175 await waitForMs(step); 9176 elapsed += step; 9177 const visible = window.getComputedStyle(chatbotBox).display === 'flex' && 9178 (chatbotBox.style.visibility !== 'hidden'); 9179 if (visible) break; 9180 } 9181 if (startScreen === 'welcome' && window.chatbotTourForceWelcome) { 9182 window.chatbotTourForceWelcome = false; 9183 if (typeof window.showWelcomePanel === 'function') { 9184 window.showWelcomePanel(); 9185 } 9186 } 9187 await activateChatbotScreen(startScreen); 9188 } else { 9189 await activateChatbotScreen(startScreen); 9190 } 9191 9192 return true; 9193 } 9194 9195 async function stopTourInstance(tourInstance) { 9196 if (tourInstance && typeof tourInstance.exit === 'function') { 9197 try { 9198 tourInstance.exit(); 9199 } catch (error) { 9200 // no-op: keep flow resilient if instance is already closed 9201 } 9202 await waitForMs(120); 9203 } 9204 } 9205 9206 async function stopOtherTours() { 9207 await stopTourInstance(tgRoutine); 9208 tgRoutine = null; 9209 await stopTourInstance(tgProgress); 9210 tgProgress = null; 9211 await stopTourInstance(tgChatbot); 9212 tgChatbot = null; 9213 await waitForMs(150); 9214 } 9215 9216 /* Tour completion is not persisted in localStorage (callers may still check these hooks). */ 9217 window.famHasRoutineTourBeenCompleted = function () { 9218 return false; 9219 }; 9220 window.famHasActivityLogTourBeenCompleted = function () { 9221 return false; 9222 }; 9223 9224 function famTourStepCopy(step) { 9225 const title = (step.title != null && String(step.title).trim() !== '') ? String(step.title) : 'Tour'; 9226 let content = step.description; 9227 if (content == null || String(content).trim() === '') { 9228 content = '<p>Use the highlighted area to explore this page.</p>'; 9229 } else { 9230 content = String(content); 9231 } 9232 return { title, content }; 9233 } 9234 9235 function famNormalizeTourSelector(raw) { 9236 if (raw === undefined || raw === null) { 9237 return ''; 9238 } 9239 const s = String(raw).trim(); 9240 if (!s) { 9241 return ''; 9242 } 9243 const lower = s.toLowerCase(); 9244 if (lower === 'body' || lower === 'html' || lower === '#body' || lower === '#html') { 9245 return ''; 9246 } 9247 if (/^([#[.]|\[)/.test(s)) { 9248 return s; 9249 } 9250 return '#' + s; 9251 } 9252 9253 function famTourTargetString(row, isResponsive) { 9254 const raw = isResponsive === 'true' 9255 ? (row.responsive_target_id || row.target_id) 9256 : (row.target_id || row.responsive_target_id); 9257 const sel = famNormalizeTourSelector(raw); 9258 if (!sel) { 9259 return undefined; 9260 } 9261 try { 9262 const el = document.querySelector(sel); 9263 if (!el || el === document.body || el === document.documentElement) { 9264 return undefined; 9265 } 9266 return sel; 9267 } catch (e) { 9268 return undefined; 9269 } 9270 } 9271 9272 function famPurgeTourGuideDom() { 9273 try { 9274 document.querySelectorAll('.tg-dialog,.tg-backdrop,.driver-popover,.driver-overlay').forEach((el) => el.remove()); 9275 } catch (e) {} 9276 } 9277 9278 function famSetRoutineTourResponsiveNav(step) { 9279 if (IsResponsiveScreen() !== 'true') { 9280 return; 9281 } 9282 9283 const target = step && step.target ? step.target : ''; 9284 let shouldOpen = false; 9285 if (target) { 9286 try { 9287 const el = document.querySelector(target); 9288 shouldOpen = !!(el && el.closest('.main_dropdown_menu, .navbar-collapse')); 9289 } catch (e) { 9290 shouldOpen = false;
9291 } 9292 } 9293 9294 if (shouldOpen) { 9295 pauseOutsideNavbarListener(); 9296 $('.main_dropdown_menu, .navbar-collapse').addClass('in'); 9297 $('body').addClass('open-navbar-toggle'); 9298 } else { 9299 $('.main_dropdown_menu, .navbar-collapse').removeClass('in'); 9300 $('body').removeClass('open-navbar-toggle'); 9301 resumeOutsideNavbarListener(); 9302 } 9303 } 9304 9305 function famResolveRoutineVideoTarget(target) { 9306 if (target !== '#video_list_div' && target !== '#video_list_div_three') { 9307 return target; 9308 } 9309 9310 // On tablet/mobile (â¤1024px), the 4-card first-row wrapper (#video_list_div_three) 9311 // only shows 1-2 cards per visible row, so highlight the whole grid instead. 9312 if (window.innerWidth <= 1024) { 9313 const videoGridTarget = document.querySelector('#video_list_div'); 9314 if (videoGridTarget) { 9315 return '#video_list_div'; 9316 } 9317 return target; 9318 } 9319 9320 const firstRowTarget = document.querySelector('#video_list_div_three'); 9321 if (firstRowTarget && firstRowTarget.getClientRects().length) { 9322 return '#video_list_div_three'; 9323 } 9324 9325 const videoGridTarget = document.querySelector('#video_list_div'); 9326 if (videoGridTarget) { 9327 return '#video_list_div'; 9328 } 9329 9330 return target; 9331 } 9332 9333 async function showRoutineListTour(forceStart) { 9334 await stopTourInstance(tgRoutine); 9335 tgRoutine = null; 9336 await waitForMs(200); 9337 famPurgeTourGuideDom(); 9338 9339 var is_rspnsv_scrn = IsResponsiveScreen(); 9340 if (is_rspnsv_scrn == 'true') { 9341 pauseOutsideNavbarListener(); 9342 $(".main_dropdown_menu").addClass('in'); 9343 $('body').addClass('open-navbar-toggle'); 9344 } 9345 9346 let user_tour_guide_steps = Object.values([{"step_id":"1","page_id":"1","title":"Welcome to Our Routines!","description":"\u003Cp\u003EExplore our new design of the \u0026quot;Our Routines\u0026quot; page. This new sleek design will make it easier to navigate the 1700 routines available to you.\u003C\/p\u003E\r\n","status":"1","target_id":"#all_routines_lnk","responsive_target_id":"#all_routines_lnk","sort":"1","created_at":"2025-07-14 08:30:24","updated_at":"2026-07-21 07:42:29","screen":null,"requires_auth":"0"},{"step_id":"2","page_id":"1","title":"Choose Your Topic","description":"\u003Cp\u003ESelect from different areas of specialty like Start Moving, Diabetes and Chronic Illness, Bed Routines, Memory, Workplace and more.\u003C\/p\u003E\r\n","status":"1","target_id":".routine_classlist_cls","responsive_target_id":".routine_classlist_cls","sort":"2","created_at":"2025-07-14 09:26:45","updated_at":"2025-07-14 20:39:49","screen":null,"requires_auth":"0"},{"step_id":"3","page_id":"1","title":"Filter by Category","description":"\u003Cp\u003EUse the category filter to find specific types of workouts that match your goals.\u003C\/p\u003E\r\n","status":"1","target_id":".routine-list_header_bottom_left","responsive_target_id":".routine-list_header_bottom_left","sort":"3","created_at":"2025-07-14 09:26:45","updated_at":"2025-07-13 20:58:26","screen":null,"requires_auth":"0"},{"step_id":"4","page_id":"1","title":"Set Intensity Level","description":"\u003Cp\u003EChoose your preferred intensity level - Beginner, Intermediate, or Advanced.\u003C\/p\u003E\r\n","status":"1","target_id":".routine-list_header_bottom_right","responsive_target_id":".routine-list_header_bottom_right","sort":"4","created_at":"2025-07-14 09:26:45","updated_at":"2025-07-13 20:58:29","screen":null,"requires_auth":"0"},{"step_id":"5","page_id":"1","title":"Browse Routines","description":"\u003Cp\u003EView routines with descriptions, duration, and trainer information.\u003C\/p\u003E\r\n","status":"1","target_id":"#video_list_div","responsive_target_id":".routine-list_card_new","sort":"5","created_at":"2025-07-14 09:26:45","updated_at":"2025-07-16 06:37:03","screen":null,"requires_auth":"0"},{"step_id":"6","page_id":"1","title":"Video Player","description":"\u003Cp\u003EClick on any play button to watch the full routine with our integrated video player.\u003C\/p\u003E\r\n","status":"1","target_id":".v_box","responsive_target_id":".v_box","sort":"6","created_at":"2025-07-14 09:26:45","updated_at":"2025-07-16 06:37:25","screen":null,"requires_auth":"0"},{"step_id":"8","page_id":"1","title":"Show All","description":"\u003Cp\u003EClick \u0026quot;Show All\u0026quot; to redirect to the original style of displaying our routines.\u003C\/p\u003E\r\n","status":"1","target_id":".routine-list_header_top_right","responsive_target_id":".routine-list_header_top_right","sort":"8","created_at":"2025-07-14 09:26:45","updated_at":"2025-07-16 06:39:02","screen":null,"requires_auth":"0"},{"step_id":"9","page_id":"1","title":"You\u0027re All Set!","de
9346scription":"\u003Cp\u003EStart exploring routines that match your fitness goals and preferences. Happy training!\u003C\/p\u003E\r\n","status":"1","target_id":"body","responsive_target_id":"body","sort":"10","created_at":"2025-07-14 09:26:45","updated_at":"2025-07-16 06:39:48","screen":null,"requires_auth":"0"}]); 9347 if (!user_tour_guide_steps.length) { 9348 user_tour_guide_steps = [ 9349 { title: 'Routines', description: '<p>Use <strong>Routines</strong> in the menu to return to this library anytime.</p>', target_id: '#all_routines_lnk', responsive_target_id: '#all_routines_lnk' }, 9350 { title: 'Categories', description: '<p>Choose a category to filter videos. Swipe sideways on small screens.</p>', target_id: '#class_slider', responsive_target_id: '#class_slider' }, 9351 { title: 'Videos', description: '<p>Open a card to watch a routine.</p>', target_id: '#video_list_div', responsive_target_id: '#video_list_div' } 9352 ]; 9353 } 9354 9355 const built = []; 9356 user_tour_guide_steps.forEach((step, i) => { 9357 const copy = famTourStepCopy(step); 9358 let target = famTourTargetString(step, is_rspnsv_scrn); 9359 9360 target = famResolveRoutineVideoTarget(target); 9361 9362 built.push({ 9363 title: copy.title, 9364 content: copy.content, 9365 order: i, 9366 target, 9367 stagePadding: 8, 9368 beforeEnter: async (nextStep) => { 9369 famSetRoutineTourResponsiveNav(nextStep); 9370 // On mobile (<768px), the Show All link uses position:absolute top:-44px 9371 // which hides it above the viewport. Temporarily make it visible. 9372 if (window.innerWidth < 768 && nextStep && nextStep.target) { 9373 try { 9374 const el = document.querySelector(nextStep.target); 9375 if (el) { 9376 const rect = el.getBoundingClientRect(); 9377 // Element is above viewport or overlapping header 9378 if (rect.top < 60 || rect.height < 4) { 9379 el.style.setProperty('position', 'relative', 'important'); 9380 el.style.setProperty('top', 'auto', 'important'); 9381 el.style.setProperty('display', 'inline-block', 'important'); 9382 el.setAttribute('data-tour-style-reset', '1'); 9383 } 9384 } 9385 } catch(e) {} 9386 } 9387 await waitForMs(100); 9388 }, 9389 beforeLeave: async (currentStep, nextStep) => { 9390 // Restore any elements we patched 9391 if (window.innerWidth < 768 && currentStep && currentStep.target) { 9392 try { 9393 const el = document.querySelector(currentStep.target); 9394 if (el && el.getAttribute('data-tour-style-reset')) { 9395 el.style.removeProperty('position'); 9396 el.style.removeProperty('top'); 9397 el.style.removeProperty('display'); 9398 el.removeAttribute('data-tour-style-reset'); 9399 } 9400 } catch(e) {} 9401 } 9402 famSetRoutineTourResponsiveNav(nextStep); 9403 await waitForMs(100); 9404 } 9405 }); 9406 }); 9407 9408 tgRoutine = createTourGuideInstance(built); 9409 await waitForMs(280); 9410 9411 const currUrl = window.location.pathname; 9412 tgRoutine.onAfterStepChange((nextStep) => { 9413 famSetRoutineTourResponsiveNav(nextStep); 9414 }); 9415 tgRoutine.onFinish(() => { 9416 tgRoutine = null; 9417 $('.main_dropdown_menu, .navbar-collapse').removeClass('in'); 9418 $('body').removeClass('open-navbar-toggle'); 9419 resumeOutsideNavbarListener(); 9420 if (currUrl.includes('routine_list/email')) { 9421 window.location.href = 'https://www.funandmoving.com/Routine/routine_list'; 9422 } 9423 }); 9424 tgRoutine.onAfterExit(() => { 9425 tgRoutine = null; 9426 $('.main_dropdown_menu, .navbar-collapse').removeClass('in'); 9427 $('body').removeClass('open-navbar-toggle'); 9428 resumeOutsideNavbarListener(); 9429 if (currUrl.includes('routine_list/email')) { 9430 window.location.href = 'https://www.funandmoving.com/Routine/routine_list'; 9431 } 9432 }); 9433 9434 try { 9435 await tgRoutine.start(); 9436 } catch (e) { 9437 console.warn('TourGuide routine start', e); 9438 } 9439 } 9440 9441 async function showProgressReportTour(forceStart) { 9442 await stopTourInstance(tgProgress); 9443 tgProgress = null; 9444 await waitForMs(200); 9445 famPurgeTourGuideDom(); 9446 9447 $(".menu_arrow").addClass('menu_arrow-active'); 9448 $(".tabs_admin_one_dropdown").show(); 9449 9450 let user_tour_guide_steps = Object.values([{"step_id":"10","page_id":"2","title":"Welcome to Your Progress Report!","description":"\u003Cp\u003ETrack your workout history, see your achievements, and download or print your activity report.\u003C\/p\u003E\r\n","status":"1","target_id":".activity_log_lnk","responsive_target_id":".activity_log_lnk_res","sort":"1","created_at":"2025-07-14 09:44:02","updated_at":"2025-07-13 22:30:50","screen":null,"requires_auth":"0"}
9450,{"step_id":"11","page_id":"2","title":"Profile Tabs","description":"\u003Cp\u003ESwitch between different profiles to view individual progress.\u003C\/p\u003E\r\n","status":"1","target_id":".report_activity_tabs_inner","responsive_target_id":".report_activity_tabs_inner","sort":"2","created_at":"2025-07-14 09:44:02","updated_at":"2025-07-13 22:30:53","screen":null,"requires_auth":"0"},{"step_id":"12","page_id":"2","title":"Medallions","description":"\u003Cp\u003EEarn medallions for your achievements and milestones.\u003C\/p\u003E\r\n","status":"1","target_id":".customer-progress-report_medallions","responsive_target_id":".customer-progress-report_medallions","sort":"3","created_at":"2025-07-14 09:44:02","updated_at":"2025-07-13 22:30:57","screen":null,"requires_auth":"0"},{"step_id":"13","page_id":"2","title":"Date Filter","description":"\u003Cp\u003EFilter your activity by date range to see specific periods.\u003C\/p\u003E\r\n","status":"1","target_id":".filter_slider","responsive_target_id":".filter_slider","sort":"4","created_at":"2025-07-14 09:44:02","updated_at":"2025-07-13 22:31:02","screen":null,"requires_auth":"0"},{"step_id":"14","page_id":"2","title":"Progress Table","description":"\u003Cp\u003ESee all your watched videos, types, intensity, and minutes watched.\u003C\/p\u003E\r\n","status":"1","target_id":".profile-content","responsive_target_id":".profile-content","sort":"5","created_at":"2025-07-14 09:44:02","updated_at":"2025-07-13 22:31:07","screen":null,"requires_auth":"0"},{"step_id":"15","page_id":"2","title":"Download or Print","description":"\u003Cp\u003EDownload or print your progress report for your records or to share with your trainer.\u003C\/p\u003E\r\n","status":"1","target_id":".filter_box .dwn_report_btn","responsive_target_id":".filter_box .dwn_report_btn","sort":"6","created_at":"2025-07-14 09:44:02","updated_at":"2025-07-13 22:31:12","screen":null,"requires_auth":"0"},{"step_id":"16","page_id":"2","title":"That\u0027s it!","description":"\u003Cp\u003EKeep up the great work and track your fitness journey here anytime.\u003C\/p\u003E\r\n","status":"1","target_id":"body","responsive_target_id":"body","sort":"7","created_at":"2025-07-14 09:44:02","updated_at":"2025-07-13 22:31:16","screen":null,"requires_auth":"0"}]); 9451 if (!user_tour_guide_steps.length) { 9452 user_tour_guide_steps = [ 9453 { title: 'Activity & goals', description: '<p>Track minutes toward your weekly goal on this page.</p>', target_id: '#main_div_150_min' }, 9454 { title: 'Medals', description: '<p>Your medals reflect milestones as you stay active.</p>', target_id: '#fam_workout_medallions_id' }, 9455 { title: 'Date range', description: '<p>Use filters to view activity for a chosen period.</p>', target_id: '#filter_activity_form' } 9456 ]; 9457 } 9458 9459 const built = []; 9460 user_tour_guide_steps.forEach((step, i) => { 9461 const copy = famTourStepCopy(step); 9462 const target = famTourTargetString(step, 'false'); 9463 built.push({ 9464 title: copy.title, 9465 content: copy.content, 9466 order: i, 9467 target, 9468 beforeLeave: async (currentStep, nextStep) => { 9469 const ord = nextStep && typeof nextStep.order === 'number' ? nextStep.order : null; 9470 if (ord === 0) { 9471 await new Promise((resolve) => setTimeout(resolve, 100)); 9472 $(document).find(".menu_arrow").addClass('menu_arrow-active'); 9473 $(document).find(".tabs_admin_one_dropdown").show(); 9474 $("#tg-dialog-prev-btn").prop('disabled', true); 9475 } else { 9476 $("#tg-dialog-prev-btn").prop('disabled', false); 9477 $(document).find(".menu_arrow").removeClass('menu_arrow-active'); 9478 $(document).find(".tabs_admin_one_dropdown").hide(); 9479 } 9480 } 9481 }); 9482 }); 9483 9484 await waitForMs(280); 9485 9486 tgProgress = createTourGuideInstance(built); 9487 9488 tgProgress.onFinish(() => { 9489 tgProgress = null; 9490 $(".menu_arrow").removeClass('menu_arrow-active'); 9491 $(".tabs_admin_one_dropdown").hide(); 9492 }); 9493 tgProgress.onAfterExit(() => { 9494 tgProgress = null; 9495 $(".menu_arrow").removeClass('menu_arrow-active'); 9496 $(".tabs_admin_one_dropdown").hide(); 9497 }); 9498 9499 try { 9500 await tgProgress.start(); 9501 } catch (e) { 9502 console.warn('TourGuide progress start', e); 9503 } 9504 } 9505 9506 window.showRoutineListTour = showRoutineListTour; 9507 window.showProgressReportTour = showProgressReportTour; 9508 9509 async function showChatbotTour() { 9510 await stopTourInstance(tgChatbot); 9511 tgChatbot = null; 9512 await waitForMs(200); 9513 famPurgeTourGuideDom(); 9514 9515 const chatbotTourSteps = getChatbotTourSteps(); 9516 if (!chatbotTourSteps.length) { 9517 return; 9518 } 9519 9520 const screens = chatbotTourSteps.map((s) => s.screen || 'chat'); 9521 const built = []; 9522 chatbotTourSteps.forEach((step, i) => { 9523 const copy = famTourStepCopy({ title: step.title, description: step.content }); 9524 let target = step.target; 9525 if (typeof target === 'string') { 9526 const sel = famNormalizeTourSelector(target); 9527 try { 9528 target = document.querySelector(sel) ? sel : undefined; 9529 } catch (e) { 9530 target = undefined; 9531 } 9532 } 9533 built.push({ 9534 title: copy.title, 9535 content: copy.content, 9536 order: i, 9537 target, 9538 beforeLeave: async (currentStep, nextStep) => { 9539 const ord = nextStep && typeof nextStep.order === 'number' ? nextStep.order : null; 9540 if (ord === 1) { 9541 await prepareChatbotTourLayout('welcome'); 9542 } else if (ord === 0) { 9543 await ensureChatbotPanelClosed(); 9544 } else if (ord != null && ord >= 0) { 9545 await activateChatbotScreen(screens[ord] || 'chat'); 9546 } else { 9547 await activateChatbotScreen('chat'); 9548 } 9549 9550 9551 9552 if (ord === 0) { 9553 await waitForMs(100); 9554 $("#tg-dialog-prev-btn").prop('disabled', true); 9555 } else { 9556 $("#tg-dialog-prev-btn").prop('disabled', false); 9557 } 9558 } 9559 }); 9560 }); 9561 9562 await waitForMs(280); 9563 tgChatbot = createTourGuideInstance(built); 9564 9565 tgChatbot.onFinish(() => { 9566 tgChatbot = null; 9567 const menuDropdown = document.getElementById('chat-header-menu-dropdown'); 9568 if (menuDropdown) { 9569 menuDropdown.style.setProperty('display', 'none', 'important'); 9570 } 9571 }); 9572 tgChatbot.onAfterExit(() => { 9573 tgChatbot = null; 9574 const menuDropdown = document.getElementById('chat-header-menu-dropdown'); 9575 if (menuDropdown) { 9576 menuDropdown.style.setProperty('display', 'none', 'important'); 9577 } 9578 }); 9579 9580 try { 9581 await tgChatbot.start(); 9582 } catch (e) { 9583 console.warn('TourGuide chatbot start', e); 9584 } 9585 9586 setTimeout(() => { 9587 if (tgChatbot?.activeStep === 0) { 9588 $("#tg-dialog-prev-btn").prop('disabled', true); 9589 } 9590 }, 100); 9591 } 9592 9593 async function refreshChatbotTour() { 9594 sessionStorage.removeItem('showChatbotTour'); 9595 const panelClosed = await ensureChatbotPanelClosed(); 9596 if (!panelClosed) { 9597 return; 9598 } 9599 await stopTourInstance(tgChatbot); 9600 tgChatbot = null; 9601 await showChatbotTour(); 9602 } 9603 9604 function refreshTourguide() { 9605 const currentUrl = window.location.pathname; 9606 9607 if (famIsRoutineListPath(currentUrl)) { 9608 if (tgRoutine && typeof tgRoutine.refreshDialog === 'function') { 9609 try { 9610 tgRoutine.refreshDialog(); 9611 } catch (e) {} 9612 var is_rspnsv_scrn = IsResponsiveScreen(); 9613 if (is_rspnsv_scrn == 'true') { 9614 pauseOutsideNavbarListener(); 9615 $(".main_dropdown_menu").addClass('in'); 9616 } 9617 setTimeout(() => { 9618 if (tgRoutine?.activeStep === 0) { 9619 $("#tg-dialog-prev-btn").prop('disabled', true); 9620 } 9621 }, 100); 9622 } 9623 } else if (famIsActivityLogPath(currentUrl)) { 9624 if (tgProgress && typeof tgProgress.refreshDialog === 'function') { 9625 setTimeout(function () { 9626 try { 9627 tgProgress.refreshDialog(); 9628 } catch (e) {} 9629 $(".menu_arrow").addClass('menu_arrow-active'); 9630 $(".tabs_admin_one_dropdown").show(); 9631 setTimeout(() => { 9632 if (tgProgress?.activeStep === 0) { 9633 $("#tg-dialog-prev-btn").prop('disabled', true); 9634 } 9635 }, 100); 9636 }, 1000); 9637 } 9638 } 9639 } 9640 9641 $(document).ready(() => { 9642 const isLoggedIn = FAM_IS_USER_LOGGED_IN; 9643 const currentUrl = window.location.pathname; 9644 9645 if (currentUrl.includes('routine_list/email')) { 9646 refreshTourguide(); 9647 } 9648 9649 // header click tour trigger
9650 $('#take-tour-btn').on('click', e => { 9651 e.preventDefault(); 9652 $('#tourChoiceModal').modal('show'); 9653 }); 9654 9655 // handle modal tour option buttons 9656 $(document).on('click', '#routineListTourBtn', async () => { 9657 $('#tourChoiceModal').modal('hide'); 9658 await stopOtherTours(); 9659 const pathNow = window.location.pathname || ''; 9660 if (famIsRoutineListPath(pathNow)) { 9661 setTimeout(function () { 9662 void showRoutineListTour(true).catch(() => {}); 9663 }, 200); 9664 } else { 9665 sessionStorage.setItem('showRoutineTour', 'true'); 9666 window.location.href = 'https://www.funandmoving.com/Routine/routine_list'; 9667 } 9668 }); 9669 9670 $(document).on('click', '#activityLogTourBtn', async () => { 9671 $('#tourChoiceModal').modal('hide'); 9672 await stopOtherTours(); 9673 const pathNow = window.location.pathname || ''; 9674 if (famIsActivityLogPath(pathNow)) { 9675 setTimeout(function () { 9676 void showProgressReportTour(true).catch(() => {}); 9677 }, 200); 9678 } else { 9679 sessionStorage.setItem('showProgressReportTour', 'true'); 9680 window.location.href = 'https://www.funandmoving.com/customer_progress_report'; 9681 } 9682 }); 9683 9684 $(document).on('click', '#chatbotTourBtn', async () => { 9685 $('#tourChoiceModal').modal('hide'); 9686 await stopOtherTours(); 9687 sessionStorage.setItem('showChatbotTour', 'true'); 9688 if (isCurrentPageHome()) { 9689 sessionStorage.removeItem('showChatbotTour'); 9690 await refreshChatbotTour(); 9691 } else { 9692 window.location.href = 'https://www.funandmoving.com/'; 9693 } 9694 }); 9695 9696 // redirect trigger (only auto-start guided tour the first time) 9697 if (sessionStorage.getItem('showRoutineTour') === 'true') { 9698 sessionStorage.removeItem('showRoutineTour'); 9699 setTimeout(() => { 9700 void showRoutineListTour().catch(() => {}); 9701 }, 2500); 9702 } 9703 9704 if (sessionStorage.getItem('showProgressReportTour') === 'true') { 9705 sessionStorage.removeItem('showProgressReportTour'); 9706 setTimeout(() => { 9707 void showProgressReportTour().catch(() => {}); 9708 }, 1000); 9709 } 9710 9711 if (sessionStorage.getItem('showChatbotTour') === 'true') { 9712 sessionStorage.removeItem('showChatbotTour'); 9713 setTimeout(refreshChatbotTour, 1000); 9714 } 9715 9716 document.addEventListener('keydown', function handleTourKeys(e) { 9717 var popover = document.querySelector('.driver-popover'); 9718 if (!popover) return; 9719 if (e.target && (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA' || e.target.tagName === 'SELECT')) return; 9720 var nextBtn = popover.querySelector('.driver-popover-next-btn'); 9721 var prevBtn = popover.querySelector('.driver-popover-prev-btn'); 9722 var closeBtn = popover.querySelector('.driver-popover-close-btn'); 9723 if (e.key === 'Enter' || e.key === 'ArrowUp') { 9724 e.preventDefault(); 9725 e.stopPropagation(); 9726 if (nextBtn) nextBtn.click(); 9727 } else if (e.key === 'Backspace' || e.key === 'ArrowDown') { 9728 e.preventDefault(); 9729 e.stopPropagation(); 9730 if (prevBtn) prevBtn.click(); 9731 } else if (e.key === 'Escape') { 9732 e.preventDefault(); 9733 e.stopPropagation(); 9734 if (closeBtn) closeBtn.click(); 9735 } 9736 }, true); 9737 }); 9738 9739 //hide hamburger dropdown on outside element click 9740 function handleOutsideClickToCloseNavbar() { 9741 $(document).on('click.outsideNavbar', function (event) { 9742 const $target = $(event.target); 9743 if ( 9744 !$target.closest('.navbar-collapse').length && 9745 !$target.closest('.navbar-toggle').length && 9746 !$target.closest('.driver-popover').length && 9747 !$target.closest('.driver-overlay').length && 9748 $('.navbar-collapse').hasClass('in') 9749 ) { 9750 $('.navbar-collapse').removeClass('in'); 9751 } 9752 }); 9753 } 9754 9755 function pauseOutsideNavbarListener() { 9756 $(document).off('click.outsideNavbar'); 9757 } 9758 9759 function resumeOutsideNavbarListener() { 9760 handleOutsideClickToCloseNavbar(); 9761 } 9762 9763 handleOutsideClickToCloseNavbar(); 9764 9765</script>
9765 9766
9767<script> 9768 $(document).ready(function () { 9769 var currentUrl = window.location.href; 9770 9771 $('.nav-link').each(function () { 9772 if (this.href === currentUrl) { 9773 $('.nav-link').removeClass('nav-about-current'); 9774 $(this).addClass('nav-about-current'); 9775 } 9776 }); 9777 9778 if (currentUrl.includes("/about")) { 9779 $("#about-menu .nav-link").addClass("nav-about-current"); 9780 } 9781 9782 var currentPath = window.location.pathname; 9783 if (currentPath === "/" || currentPath === "") { 9784 $('.nav-about .nav-link').first().addClass('nav-about-current'); 9785 } 9786 }); 9787</script>
9787 9788 9789 9790</body> 9791 9792</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.