1<!DOCTYPE html> 2<!--[if IE 9]><html class="lt-ie10" lang="en"> <![endif]--> 3<html lang="en"> 4<head> 5 <style> 6 /* ========================================================= 7 UNIFIED CONTENT DESIGN SYSTEM 8 One consistent "card" + "section heading" treatment used 9 across Description, Gallery, Services, Products, Features, 10 Coupons, Reviews, Social Links, Hours, Service Area, 11 Download section, and the sidebar blocks. Neutral palette 12 (white cards on light grey) with the sitewide amber accent 13 (#ffb400) â safe across addyp.com / wehelp.in / bharathlisting.com. 14 ========================================================= */ 15 :root { 16 --dp-bg: #f3f4f6; 17 --dp-card-bg: #ffffff; 18 --dp-card-radius: 14px; 19 --dp-card-padding: 28px; 20 --dp-card-padding-sm: 18px; 21 --dp-card-shadow: 0 2px 14px rgba(15, 23, 42, .07); 22 --dp-card-border: 1px solid rgba(15, 23, 42, .06); 23 --dp-card-gap: 22px; 24 --dp-accent: #ffb400; 25 --dp-heading-color: #22262e; 26 --dp-text-color: #4b5563; 27 } 28 29 body.tpl-listing { 30 background: var(--dp-bg); 31 } 32 33 body.tpl-listing #business-header, 34 body.tpl-listing .jd-navbar { 35 background: #fff; 36 } 37 38 .content-card { 39 background: var(--dp-card-bg); 40 border-radius: var(--dp-card-radius); 41 border: var(--dp-card-border); 42 box-shadow: var(--dp-card-shadow); 43 padding: var(--dp-card-padding); 44 margin: 0 0 var(--dp-card-gap); 45 } 46 47 .content-card > hr.heading-divider { 48 display: none; 49 } 50 51 .content-card:last-child { 52 margin-bottom: 0; 53 } 54 55 .section-heading { 56 font-size: 19px !important; 57 font-weight: 700 !important; 58 letter-spacing: .2px; 59 color: var(--dp-heading-color) !important; 60 margin: 0 0 18px !important; 61 padding-bottom: 12px; 62 border-bottom: 3px solid var(--dp-accent); 63 display: inline-block; 64 } 65 66 @media (max-width: 768px) { 67 .content-card { 68 padding: var(--dp-card-padding-sm); 69 border-radius: 12px; 70 margin-bottom: 16px; 71 } 72 73 .section-heading { 74 font-size: 17px !important; 75 } 76 } 77 78 .other-cities-chips { 79 display: flex; 80 flex-wrap: wrap; 81 gap: 8px; 82 } 83 84 .other-cities-chip { 85 font-size: 13.5px; 86 color: #444; 87 background: #f5f5f5; 88 border: 1px solid #eee; 89 border-radius: 50px; 90 padding: 6px 14px; 91 transition: background .15s ease, color .15s ease; 92 } 93 94 @media (hover: hover) and (pointer: fine) { 95 .other-cities-chip:hover { 96 background: var(--dp-accent); 97 color: #1a1a1a; 98 text-decoration: none; 99 } 100 } 101 102 .show-contacts { 103 position: relative; 104 height: 150px; 105 } 106 107 .show-contacts div { 108 position: absolute; 109 top: 0; 110 bottom: 0; 111 left: 0; 112 right: 0; 113 text-align: center; 114 } 115 116 .show-contacts img { 117 height: 100%; 118 filter: blur(2px); 119 -webkit-filter: blur(2px); 120 } 121 122 .show-contacts button { 123 position: relative; 124 left: 20%; 125 top: 39%; 126 } 127 128 .extra-blur { 129 filter: blur(5px); 130 pointer-events: none; 131 user-select: none; 132 } 133 .contact-actions { 134 display: flex; 135 flex-wrap: wrap; 136 gap: 15px; 137} 138 139.action-btn { 140 display: flex; 141 align-items: center; 142 gap: 6px; 143 padding: 8px 14px; 144 border-radius: 8px; 145 background: #f1f3f4; 146 color: #111; 147 font-weight: 500; 148 text-decoration: none; 149 transition: 0.2s; 150} 151 152.action-btn i { 153 font-size: 18px; 154} 155 156@media (hover: hover) and (pointer: fine) { 157 .action-btn:hover { 158 background: #e2e6ea; 159 } 160} 161 162.action-btn.whatsapp { 163 background: #e6f4ea; 164 color: #25D366; 165} 166 167.social-links a { 168 margin-left: 10px; 169 font-size: 22px; 170 color: #555; 171 transition: 0.2s; 172} 173 174@media (hover: hover) and (pointer: fine) { 175 .social-links a:hover { 176 color: #000; 177 } 178} 179.contact-group { 180 display: flex; 181 flex-wrap: wrap; 182 align-items: center; 183 gap: 10px; 184 padding-right: 14px; 185 margin-right: 4px; 186 border-right: 1px solid #e5e7eb; 187} 188 189.contact-group:last-child { 190 border-right: none; 191 padding-right: 0; 192 margin-right: 0; 193} 194 195@media (max-width: 576px) { 196 .contact-group {
197 border-right: none; 198 padding-right: 0; 199 margin-right: 0; 200 padding-bottom: 8px; 201 margin-bottom: 4px; 202 border-bottom: 1px solid #e5e7eb; 203 width: 100%; 204 } 205 206 .contact-group:last-child { 207 border-bottom: none; 208 padding-bottom: 0; 209 margin-bottom: 0; 210 } 211} 212 213.action-btn.primary-cta { 214 background: var(--dp-accent); 215 color: #1a1a1a; 216 font-weight: 700; 217 box-shadow: 0 2px 8px rgba(255, 180, 0, 0.35); 218} 219 220@media (hover: hover) and (pointer: fine) { 221 .action-btn.primary-cta:hover { 222 background: #e6a400; 223 } 224} 225 226/* Tertiary/utility actions (Book Now, Order Online, Calendar) - kept 227 visually smaller so they don't compete with the primary CTAs. */ 228.contact-group-compact .action-btn { 229 padding: 5px 10px; 230 font-size: 13px; 231 gap: 4px; 232} 233 234.contact-group-compact .action-btn i { 235 font-size: 14px; 236} 237 238.header-identity-card { 239 padding-top: var(--dp-card-padding-sm); 240 padding-bottom: var(--dp-card-padding-sm); 241 position: relative; 242 overflow: hidden; 243} 244 245.premium-ribbon { 246 position: absolute; 247 top: 18px; 248 right: -34px; 249 transform: rotate(45deg); 250 background: var(--dp-accent); 251 color: #1a1a1a; 252 font-size: 11px; 253 font-weight: 700; 254 text-transform: uppercase; 255 letter-spacing: .5px; 256 white-space: nowrap; 257 padding: 4px 40px; 258 box-shadow: 0 2px 6px rgba(0, 0, 0, .25); 259 z-index: 3; 260} 261 262.verified-badge { 263 display: inline-flex; 264 align-items: center; 265 gap: 4px; 266 font-size: 13px; 267 font-weight: 700; 268 letter-spacing: .2px; 269 color: #fff; 270 background: #1877f2; 271 padding: 3px 12px 3px 9px; 272 border-radius: 50px; 273 vertical-align: middle; 274 margin-left: 8px; 275 white-space: nowrap; 276 box-shadow: 0 2px 6px rgba(24, 119, 242, .35); 277} 278 279.verified-badge i { 280 font-size: 15px; 281} 282 283.established-eyebrow { 284 display: inline-block; 285 font-size: 12px; 286 font-weight: 700; 287 letter-spacing: .5px; 288 text-transform: uppercase; 289 color: #b8860b; 290 background: rgba(255, 193, 7, 0.12); 291 border: 1px solid rgba(255, 193, 7, 0.35); 292 border-radius: 50px; 293 padding: 3px 12px; 294 margin-bottom: 8px; 295} 296 297.faq-accordion { 298 border-top: 1px solid #eee; 299} 300 301.faq-item { 302 border-bottom: 1px solid #eee; 303} 304 305.faq-question { 306 display: flex; 307 align-items: center; 308 justify-content: space-between; 309 gap: 12px; 310 width: 100%; 311 background: none; 312 border: none; 313 text-align: left; 314 padding: 16px 4px; 315 font-size: 16px; 316 font-weight: 600; 317 color: var(--dp-heading-color, #22262e); 318 cursor: pointer; 319} 320 321/* :hover only for real pointer devices - on touch devices a :hover rule 322on a clickable element means the first tap only shows the hover state and 323a second tap is needed to actually trigger the click, which is why FAQ 324items can appear to randomly not open on mobile */ 325@media (hover: hover) and (pointer: fine) { 326 .faq-question:hover { 327 color: #b8860b; 328 } 329} 330 331.faq-caret { 332 flex-shrink: 0; 333 transition: transform .2s ease; 334 color: #999; 335} 336 337.faq-question[aria-expanded="true"] .faq-caret { 338 transform: rotate(180deg); 339 color: var(--dp-accent); 340} 341 342.faq-answer { 343 padding: 0 4px 18px; 344 color: var(--dp-text-color, #4b5563); 345 line-height: 1.6; 346} 347 348/* Muted, neutral treatment for the service-location badges â kept 349 separate from the amber accent so amber stays reserved for primary 350 CTAs, heading underlines, and the category flag below. */ 351.logo-wrap { 352 position: relative; 353} 354 355.category-flag { 356 position: absolute; 357 top: 8px; 358 left: 8px; 359 z-index: 2; 360 background: rgba(20, 20, 20, 0.72); 361 color: #fff; 362 font-size: 11px; 363 font-weight: 700; 364 text-transform: uppercase; 365 letter-spacing: .3px; 366 padding: 4px 10px; 367 border-radius: 4px; 368 box-shadow: 0 2px 6px rgba(0, 0, 0, .2); 369} 370 371@media (hover: hover) and (pointer: fine) { 372 .category-flag:hover { 373 color: #fff; 374 text-decoration: none; 375 background: rgba(20, 20, 20, 0.88); 376 } 377} 378 379.service-area-badges.bg-warning { 380 background-color: #eef0f2 !important; 381 color: #333 !important; 382 border: 1px solid #e0e2e5; 383} 384 385.location-cluster { 386 display: flex; 387 flex-wrap: wrap; 388 align-items: center; 389 gap: 6px 16px; 390 color: var(--dp-text-color); 391 margin-bottom: 4px; 392 max-width: 100%; 393} 394 395.location-cluster .location-item { 396 display: inline-flex; 397 align-items: center; 398 gap: 6px; 399 min-width: 0; 400 max-width: 100%; 401 word-break: break-word;
402 overflow-wrap: anywhere; 403} 404 405.location-cluster button.location-item { 406 font-size: 13px; 407 gap: 4px; 408 flex-shrink: 0; 409 white-space: nowrap; 410} 411 412.location-panel { 413 background: #f9fafb; 414 border: 1px solid #eef0f2; 415 border-radius: 12px; 416 padding: 12px 16px; 417 margin-top: 10px; 418 margin-bottom: 14px !important; 419} 420 421.location-panel .location-item i { 422 color: var(--dp-accent); 423} 424 425.location-panel button.location-item { 426 background: #fff; 427 border: 1px solid #ddd; 428 border-radius: 50px; 429 padding: 5px 12px; 430} 431 432 433body{ 434 margin:0; 435 padding-bottom:70px; /* space for the floating bar */ 436 font-family: Arial, sans-serif; 437} 438 439/* Floating Bar - a single compact row at every screen size (was 2-3 440stacked rows on mobile, ~140px tall). Buttons drop their text label 441below 400px and keep icon+tooltip only, so the bar never needs to wrap. */ 442.bottom-action-bar{ 443 position:fixed; 444 bottom:0; 445 left:0; 446 width:100%; 447 background:#fff; 448 border-top:1px solid #eee; 449 box-shadow:0 -6px 24px rgba(0,0,0,.1); 450 z-index:999; 451 padding-left:env(safe-area-inset-left); 452 padding-right:env(safe-area-inset-right); 453 padding-bottom:env(safe-area-inset-bottom); 454} 455 456.bar-inner{ 457 max-width:1200px; 458 margin:auto; 459 display:flex; 460 align-items:center; 461 justify-content:space-between; 462 padding:8px 16px; 463 gap:10px; 464} 465 466/* Plan pill + "View Benefits" - one link, one tap target, instead of a 467pill plus a separate adjacent link */ 468.plan-box{ 469 flex-shrink:0; 470 display:flex; 471 align-items:center; 472 gap:6px; 473 text-decoration:none; 474} 475@media (hover: hover) and (pointer: fine) { .plan-box:hover .plan-link{ color:#333; text-decoration:underline; } } 476 477.plan-pill{ 478 display:inline-flex; 479 align-items:center; 480 gap:6px; 481 background:#eef2ff; 482 color:#3949ab; 483 font-weight:700; 484 font-size:11px; 485 letter-spacing:.3px; 486 text-transform:uppercase; 487 padding:5px 10px; 488 border-radius:50px; 489 white-space:nowrap; 490} 491 492.plan-link{ 493 font-size:12px; 494 font-weight:600; 495 color:#666; 496 white-space:nowrap; 497 display:flex; 498 align-items:center; 499 gap:4px; 500} 501 502/* Buttons */ 503.floating-actions{ 504 display:flex; 505 align-items:center; 506 gap:8px; 507 flex:1; 508 justify-content:flex-end; 509 min-width:0; 510} 511 512.floating.btn{ 513 display:flex; 514 align-items:center; 515 justify-content:center; 516 gap:6px; 517 padding:9px 16px; 518 border-radius:50px; 519 text-decoration:none; 520 font-weight:700; 521 font-size:13px; 522 white-space:nowrap; 523 transition:transform .15s ease, box-shadow .15s ease; 524} 525 526.floating.btn-edit{ 527 border:1px solid #ddd; 528 color:#333; 529 background:#fff; 530} 531@media (hover: hover) and (pointer: fine) { .floating.btn-edit:hover{ background:#f8f9fb; color:#333; } } 532 533.floating.btn-upgrade{ 534 background:linear-gradient(135deg, #ff9800 0%, #ff5722 100%); 535 color:#fff; 536 box-shadow:0 6px 18px rgba(255,87,34,.35); 537} 538@media (hover: hover) and (pointer: fine) { 539 .floating.btn-upgrade:hover{ 540 color:#fff; 541 transform:translateY(-2px); 542 box-shadow:0 10px 24px rgba(255,87,34,.45); 543 } 544} 545 546.floating.btn-unlock-contacts{ 547 background:linear-gradient(135deg, #dc3545 0%, #a71d2a 100%); 548 color:#fff; 549 box-shadow:0 6px 18px rgba(220,53,69,.35); 550} 551@media (hover: hover) and (pointer: fine) { 552 .floating.btn-unlock-contacts:hover{ 553 color:#fff; 554 transform:translateY(-2px); 555 box-shadow:0 10px 24px rgba(220,53,69,.45); 556 } 557} 558 559/* Visitor bar variants (Call / WhatsApp / Get Quote) - same colors as the 560inline "Contact Actions" buttons higher up the page, so the floating and 561in-page versions of the same action always look like the same button. */ 562.floating.btn-call, 563.floating.btn-getquote{ 564 background:var(--dp-accent);
565 color:#1a1a1a; 566 box-shadow:0 2px 8px rgba(255,180,0,.35); 567} 568@media (hover: hover) and (pointer: fine) { 569 .floating.btn-call:hover, 570 .floating.btn-getquote:hover{ 571 background:#e6a400; 572 color:#1a1a1a; 573 } 574} 575 576.floating.btn-whatsapp-float{ 577 background:#e6f4ea; 578 color:#25D366; 579} 580@media (hover: hover) and (pointer: fine) { 581 .floating.btn-whatsapp-float:hover{ 582 background:#d7ecdf; 583 color:#25D366; 584 } 585} 586 587/* Unlike the owner's bar, this one has no plan-pill to balance against - 588the buttons are the only content, so they stretch to fill the full width 589evenly on every screen size instead of clustering to one side. */ 590.visitor-action-bar .bar-inner{ 591 justify-content:stretch; 592} 593.visitor-action-bar .floating-actions{ 594 width:100%; 595 justify-content:center; 596} 597.visitor-action-bar .floating.btn{ 598 flex:1; 599} 600 601/* Mobile - stays one row: buttons share the remaining width evenly and 602shrink their own padding/font first; only the two text labels (View 603Benefits, then the button labels) drop off as space runs out, never the 604layout itself. */ 605@media(max-width:768px){ 606 html, body{ overflow-x:hidden; } 607 body{ padding-bottom:66px; } 608 609 .bar-inner{ padding:8px 12px; gap:6px; } 610 .floating-actions{ gap:6px; } 611 .floating.btn{ flex:1; padding:9px 8px; font-size:12px; gap:4px; } 612} 613 614@media(max-width:480px){ 615 .plan-link .text{ display:none; } /* pill + chevron alone is still a clear, tappable "view plan" affordance */ 616} 617 618@media(max-width:399px){ 619 .floating.btn .text{ display:none; } 620 .floating.btn{ padding:10px; } 621 .floating.btn i{ font-size:15px; } 622} 623.profile-thumb { 624 width: 50px; 625 height: 50px; 626} 627 628.avatar { 629 display: flex; 630 align-items: center; 631 justify-content: center; 632 633 color: #fff; 634 font-weight: bold; 635 font-size: 16px; 636 text-decoration: none !important; 637} 638.avatar-link { 639 text-decoration: none !important; 640} 641/* Navbar wrapper */ 642.jd-navbar { 643 border-bottom: 1px solid #eee; 644 padding: 0; 645 646} 647 648/* Nav list */ 649.jd-nav { 650 /* display: flex; */ 651 /* flex-direction: row; */ 652 overflow-x: auto; 653 white-space: nowrap; 654 list-style: none; 655 padding: 0; 656 margin: 0; 657 font-size: 15px; 658} 659 660/* Each link */ 661.jd-nav li a { 662 display: inline-block; 663 padding: 14px 14px; 664 color: #555; 665 font-weight: 600; 666 text-decoration: none; 667 position: relative; 668 font-size: 15px; 669} 670 671/* Hover */ 672@media (hover: hover) and (pointer: fine) { 673 .jd-nav li a:hover { 674 color: #000; 675 } 676} 677 678/* Active tab underline */ 679.jd-nav li a.active { 680 color: #000; 681 font-weight: 700; 682} 683 684.jd-nav li a.active::after { 685 content: ""; 686 position: absolute; 687 left: 10px; 688 right: 10px; 689 bottom: 0; 690 height: 5px; 691 background-color: #e3a500;; 692 /* border-radius: 2px; */ 693} 694 695/* Hide scrollbar (optional) */ 696.jd-nav::-webkit-scrollbar {
697 display: none; 698} 699 700#overview, #about, #why-choose, #contact-details,#reviews, #photos,#faq { 701 702 scroll-margin-top: 60px; 703 704 705} 706 707@media (max-width: 768px) { 708 .jd-navbar { 709 position: -webkit-sticky !important; 710 position: sticky !important; 711 top: 0; 712 z-index: 9999; 713 background: #fff; 714 } 715 716 /* Fallback for browsers where the mobile-only "overflow-x: hidden" on 717 html/body (added to stop horizontal scroll bounce) breaks native 718 position:sticky - a well-known CSS interaction, not a DevTools-only 719 quirk. jd-navbar.js-stuck mimics sticky via a scroll listener below. */ 720 .jd-navbar.js-stuck { 721 position: fixed !important; 722 top: 0; 723 left: 0; 724 width: 100%; 725 z-index: 9999; 726 background: #fff; 727 } 728 729 .jd-navbar-spacer { 730 display: none; 731 } 732 733 .jd-navbar-spacer.active { 734 display: block; 735 } 736} 737.jd-nav::-webkit-scrollbar { 738 display: none; 739} 740a.badge-primary:focus { 741 background-color: #111111; 742 border: 0px !important; 743} 744@media (hover: hover) and (pointer: fine) { 745 a.badge-primary:hover { 746 background-color: #111111; 747 border: 0px !important; 748 } 749} 750 751.add-review-btn { 752 display: inline-flex; 753 align-items: center; 754 gap: 6px; 755 padding: 6px 12px; 756 border-radius: 20px; 757 background: #f1f3f4; 758 color: #0f0e0e !important; 759 font-size: 14px; 760 font-weight: 500; 761 text-decoration: none; 762 transition: all 0.3s ease; 763 box-shadow: 0 2px 6px rgba(0,0,0,0.1); 764} 765 766@media (hover: hover) and (pointer: fine) { 767 .add-review-btn:hover { 768 background: #f1f3f4; 769 transform: translateY(-2px); 770 box-shadow: 0 4px 10px rgba(0,0,0,0.15); 771 text-decoration: none; 772 } 773} 774 775.add-review-btn:active { 776 transform: scale(0.96); 777} 778.review-login-box { 779 background: #fff8e1; 780 border: 1px solid #e3a500; 781 padding: 15px 20px; 782 border-radius: 8px; 783 text-align: center; 784 margin: 20px 0; 785} 786 787.review-login-box p { 788 margin: 0 0 10px; 789 color: #333; 790 font-weight: 500; 791} 792 793.btn-login { 794 display: inline-block; 795 background: #e3a500; 796 color: #080808 !important; 797 padding: 10px 18px; 798 border-radius: 5px; 799 text-decoration: none !important; 800 font-weight: 600; 801 transition: 0.3s ease; 802} 803 804@media (hover: hover) and (pointer: fine) { 805 .btn-login:hover { 806 background: #c89000; 807 color: #0f0e0e; 808 } 809} 810 811/* ========================= 812 MODAL MAIN 813========================= */ 814 815#serviceModal .modal-content{ 816 border:none; 817 border-radius:20px; 818 overflow:hidden; 819 box-shadow:0 15px 45px rgba(0,0,0,0.18); 820} 821 822/* ========================= 823 HEADER 824========================= */ 825 826#serviceModal .modal-header{ 827 padding:18px 28px; 828 border-bottom:1px solid #ededed; 829} 830 831#serviceModal .modal-title{ 832 font-size:14px; 833 font-weight:700; 834 color:#222; 835} 836 837/* close button intentionally left at Bootstrap's default size (1.5rem = 838 21px with this theme's 14px root, opacity .5) - the 34px override made 839 it look oversized next to the now-14px title */ 840 841/* ========================= 842 BODY 843========================= */ 844 845#serviceModal .modal-body{ 846 padding:24px 30px; 847} 848 849/* ========================= 850 IMAGE SECTION 851========================= */ 852 853.popup-gallery{ 854 position:relative; 855 border-radius:24px; 856 overflow:hidden; 857} 858 859.popup-img{ 860 width:100%; 861 height:370px; 862 object-fit:cover; 863 border-radius:24px; 864} 865 866/* ========================= 867 PRICE LABEL 868========================= */ 869 870#popupPrice{ 871 position:absolute; 872 top:30px; 873 right:40px; 874 margin:0 !important; 875 background:#fff; 876 padding:14px 18px; 877 border-radius:16px; 878 box-shadow:0 4px 15px rgba(0,0,0,0.12); 879 color:#1d2b53; 880 font-size:22px; 881 font-weight:700; 882 line-height:1.1; 883 z-index:5; 884} 885 886#popupPrice::before{ 887 display:block; 888 font-size:10px; 889 font-weight:600; 890 color:#666; 891 letter-spacing:.7px; 892 margin-bottom:5px; 893} 894 895/* ========================= 896 DESCRIPTION 897========================= */ 898 899#popupText{ 900 margin-top:28px; 901 font-size:14px; 902 line-height:1.9; 903 color:#444; 904} 905 906#popupText p{ 907 margin-bottom:18px; 908} 909 910/* ========================= 911 BUTTONS 912========================= */ 913 914.video-wrap{ 915 display:flex; 916 justify-content:flex-end; 917 gap:14px; 918 margin-top:25px; 919} 920 921#popupYoutube{ 922 border:none !important; 923 color:#fff !important; 924 border-radius:12px; 925 padding:12px 24px; 926 font-weight:600; 927 box-shadow:none; 928} 929 930#popupSerDetailsLink{ 931 background:#626d7d !important; 932 border:none !important; 933 color:#fff !important; 934 border-radius:12px; 935 padding:12px 24px; 936 font-weight:600; 937} 938 939/* ========================= 940 FOOTER 941========================= */ 942 943#serviceModal .modal-footer{ 944 padding:22px 30px; 945 border-top:1px solid #ededed; 946} 947 948#serviceModal .modal-footer .btn{ 949 border-radius:12px; 950 padding:11px 20px; 951 font-weight:500; 952} 953 954/* ========================= 955 IMAGE NAVIGATION 956========================= */ 957 958#prevImg, 959#nextImg{ 960 position:absolute; 961 top:50%; 962 transform:translateY(-50%); 963 width:54px; 964 height:54px; 965 border:none; 966 border-radius:50%; 967 background:rgba(255,255,255,0.95); 968 font-size:34px; 969 color:#333; 970 cursor:pointer; 971 z-index:3; 972 box-shadow:0 3px 10px rgba(0,0,0,0.12); 973} 974 975#prevImg{ 976 left:16px; 977} 978 979#nextImg{ 980 right:16px; 981} 982 983/* ========================= 984 PRODUCT MODAL DESIGN 985========================= */ 986 987#productModal .modal-content{ 988 border:none; 989 border-radius:20px; 990 overflow:hidden; 991 box-shadow:0 15px 45px rgba(0,0,0,0.18); 992} 993 994/* HEADER */ 995#productModal .modal-header{ 996 padding:18px 28px; 997 border-bottom:1px solid #ededed; 998} 999 1000#productModal .modal-title{ 1001 font-size:14px; 1002 font-weight:700; 1003 color:#222; 1004} 1005 1006/* close button intentionally left at Bootstrap's default size - same 1007 reasoning as #serviceModal above */ 1008 1009/* BODY */ 1010#productModal .modal-body{ 1011 padding:24px 30px; 1012} 1013 1014/* IMAGE */ 1015#productModal .popup-gallery{ 1016 position:relative; 1017 border-radius:24px; 1018 overflow:hidden; 1019} 1020 1021#productModal .popup-img{ 1022 width:100%; 1023 height:370px; 1024 object-fit:cover; 1025 border-radius:24px; 1026} 1027 1028/* PRICE LABEL */ 1029#productPopupPrice{ 1030 position:absolute; 1031 top:30px; 1032 right:40px; 1033 margin:0 !important; 1034 background:#fff; 1035 padding:14px 18px; 1036 border-radius:16px; 1037 box-shadow:0 4px 15px rgba(0,0,0,0.12); 1038 color:#1d2b53; 1039 font-size:22px; 1040 font-weight:700; 1041 line-height:1.1; 1042 z-index:5; 1043} 1044 1045#productPopupPrice::before{ 1046 display:block; 1047 font-size:10px; 1048 font-weight:600; 1049 color:#666; 1050 letter-spacing:.7px; 1051 margin-bottom:5px; 1052} 1053 1054/* DESCRIPTION */ 1055#productPopupText{ 1056 margin-top:28px; 1057 font-size:14px; 1058 line-height:1.9; 1059 color:#444; 1060} 1061 1062#productPopupText p{ 1063 margin-bottom:18px; 1064} 1065 1066/* BUTTONS */ 1067#productModal .video-wrap{ 1068 display:flex; 1069 justify-content:flex-end; 1070 gap:14px; 1071 margin-top:25px; 1072} 1073 1074#productPopupLink{ 1075 border:none !important; 1076 color:#fff !important; 1077 border-radius:12px; 1078 padding:12px 24px; 1079 font-weight:600; 1080} 1081 1082#productDetailsLink{ 1083 background:#626d7d !important; 1084 border:none !important; 1085 color:#fff !important; 1086 border-radius:12px; 1087 padding:12px 24px; 1088 font-weight:600; 1089} 1090 1091/* FOOTER */ 1092#productModal .modal-footer{ 1093 padding:22px 30px; 1094 border-top:1px solid #ededed; 1095} 1096 1097#productModal .modal-footer .btn{ 1098 border-radius:12px; 1099 padding:11px 20px; 1100 font-weight:500; 1101} 1102 1103/* phoneModal / Get Quote / Request Callback deliberately have no custom 1104 font-size override here - the theme's own default (14px, matching 1105 serviceModal/productModal above) already applies to all three, so 1106 nothing extra is needed to keep every popup on this page the same size. */ 1107 1108/* IMAGE ARROWS */ 1109#prevProductImg, 1110#nextProductImg{ 1111 position:absolute; 1112 top:50%; 1113 transform:translateY(-50%); 1114 width:54px; 1115 height:54px; 1116 border:none; 1117 border-radius:50%; 1118 background:rgba(255,255,255,0.95); 1119 font-size:34px; 1120 color:#333; 1121 cursor:pointer; 1122 z-index:3; 1123 box-shadow:0 3px 10px rgba(0,0,0,0.12); 1124} 1125 1126#prevProductImg{ 1127 left:16px; 1128} 1129 1130#nextProductImg{ 1131 right:16px; 1132} 1133 1134/* Whichever section ends up first in the main column (About, Photos, 1135Services...depends on which data this listing actually has) shouldn't carry 1136its own top margin - the sidebar's first element has none, so that margin 1137was pushing the main column visibly lower than the sidebar at the top. */ 1138.col-lg-8 > .mt-3:first-child { 1139 margin-top: 0 !important; 1140} 1141</style> 1142 1143 1144 <title>Savra - Suit Shop in Jaipur in Jaipur, Rajasthan - Best Others near me</title> 1145 1146 <!-- SplideJS CSS --> 1147 <link rel="stylesheet" hreflang="en-us" href="https://addyp.com/templates/js/splide_2.4.21/splide.min.css"> 1148 1149 1150 1151 1152 1153 1154 <!-- Bootstrap Lightbox --> 1155 <link rel="stylesheet" hreflang="en-us" href="https://addyp.com/templates/js/lightbox-master/dist/ekko-lightbox.css"> 1156 1157 <meta charset="utf-8"> 1158<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 1159 1160<!-- favicon --> 1161 <link rel="apple-touch-icon-precomposed" href="/assets/favicon/favicon-152.png"> 1162 <link rel="icon" type="image/png" href="/assets/favicon/favicon.png"> 1163 <meta name="msapplication-TileColor" content="#ffffff"> 1164 <meta name="msapplication-TileImage" content="/assets/favicon/favicon-144.png"> 1165 1166 <!-- css --> 1167 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> 1168 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.8/css/select2.min.css"> 1169 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/raty/2.7.1/jquery.raty.min.css">
vendor: 139 bytes, lines 1169-1170
1169 1170 <script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="5be3242ed37c14fc3d069643-|49"></script>
1170<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/line-awesome/1.3.0/line-awesome/css/line-awesome.min.css" media="print" onload="this.media='all'; this.onload=null;"> 1171 <link rel="stylesheet" href="/templates/css/styles.css?v=1790182373"> 1172 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css"> 1173 1174 <!-- javascript --> 1175
1175<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
1175 1176
1176<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.8/js/select2.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
1176 1177 1178<!-- rss --> 1179 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="/sitemaps/rss.xml"> 1180 1181<!-- CSRF -->
1182<script type="5be3242ed37c14fc3d069643-text/javascript"> 1183// add CSRF token in the headers of all requests 1184$.ajaxSetup({ 1185 headers: { 1186 'X-CSRF-Token': 'kqv7krpkt5d5cephdgu21u4bcd', 1187 'X-Ajax-Setup': 1 1188 } 1189}); 1190</script>
1190 1191 1192<!-- baseurl -->
1193<script type="5be3242ed37c14fc3d069643-text/javascript"> 1194var baseurl = 'https://addyp.com'; 1195</script>
1195 1196 1197<!-- custom functions -->
1198<script type="5be3242ed37c14fc3d069643-text/javascript"> 1199// iframe escape 1200if (top != self) top.location.replace(location); 1201 1202// test if cookie is enabled 1203function cookieEnabled() { 1204 // Quick test if browser has cookieEnabled host property 1205 if (navigator.cookieEnabled) { 1206 return true; 1207 } 1208 1209 // Create cookie 1210 document.cookie = "cookietest=1"; 1211 var ret = document.cookie.indexOf("cookietest=") != -1; 1212 1213 // Delete cookie 1214 document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT"; 1215 1216 return ret; 1217} 1218 1219// test if localstorage is available 1220function lsTest(){ 1221 var test = 'test'; 1222 try { 1223 localStorage.setItem(test, test); 1224 localStorage.removeItem(test); 1225 return true; 1226 } catch(e) { 1227 return false; 1228 } 1229} 1230 1231// createCookie 1232function createCookie(name, value, days) { 1233 var expires; 1234 var cookie_path; 1235 var path = "/"; 1236 1237 if (days) { 1238 var date = new Date(); 1239 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 1240 expires = "; expires=" + date.toUTCString(); 1241 } else { 1242 expires = ""; 1243 } 1244 1245 if (path != '') { 1246 cookie_path = "; path=" + path; 1247 } else { 1248 cookie_path = ""; 1249 } 1250 1251 document.cookie = name + "=" + value + expires + cookie_path; 1252} 1253 1254// delete_cookie 1255function delete_cookie(name) { 1256 createCookie(name, "", -100); 1257} 1258 1259// getCookie 1260function getCookie(name) { 1261 var nameEQ = name + "="; 1262 var ca = document.cookie.split(';'); 1263 1264 for(var i=0;i < ca.length;i++) { 1265 var c = ca[i]; 1266 while (c.charAt(0)==' ') c = c.substring(1,c.length); 1267 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 1268 } 1269 1270 return null; 1271} 1272 1273// check if string is JSON 1274function IsJsonString(str) { 1275 try { 1276 JSON.parse(str); 1277 } catch (e) { 1278 return false; 1279 } 1280 1281 return true; 1282} 1283 1284// add to Favorites 1285function addToFavorites() { 1286 $('.add-to-favorites').on('click', function(e){ 1287 window.location.href = 'https://addyp.com/user/sign-in'; 1288 }); 1289} 1290</script>
1290 1291 1292<!-- Maps -->
1293<script type="5be3242ed37c14fc3d069643-text/javascript"> 1294 // CartoDB Maps options - no API key needed, unlike map_provider_options 1295 // wasn't even being declared for this exact value before (only the 1296 // dot-variant names below were handled), so L.tileLayer.provider() below 1297 // referenced an undefined variable and threw, silently killing the rest 1298 // of the map init script. 1299 var map_provider_options = { 1300 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors © <a href="https://carto.com/attributions">CARTO</a>' 1301 } 1302 </script>
1302 <!-- CSS --> 1303 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.css"> 1304 1305 <!-- Javascript --> 1306
1306<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
1306 1307
1307<script src="/assets/js/leaflet-providers.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
1307 1308 1309 1310 <!-- Meta data --> 1311 1312 <!-- Canonical URL --> 1313 <link rel="canonical" hreflang="en-us" href="https://addyp.com/listing/rajasthan/jaipur/others/savra-suit-shop-in-jaipur"> 1314 1315 <meta name="description" content="Best Others near me in Jaipur, Rajasthan. From graceful suits and festive outfits to stylish traditional wear, our collection is designed for women who appreciate quality, comfort, and refined fashion. If you are looking for a trusted suit shop in Jaipur, Savra offers a carefully selected range of designs suitable for weddings, festivals, family functions, and everyday ethnic styling. Explore elegant patterns, fine fabrics, and fashionable designs that bring tradition and modern style together. Visit Savra and find ethnic wear that makes every occasion feel special."> 1316 1317 <!-- Open Graph data --> 1318 <meta property="og:title" content="Savra - Suit Shop in Jaipur in Jaipur, Rajasthan - Best Others near me"> 1319 <meta property="og:url" content="https://addyp.com/listing/rajasthan/jaipur/others/savra-suit-shop-in-jaipur"> 1320 <meta property="og:type" content="place"> 1321 <meta property="og:description" content="Best Others near me in Jaipur, Rajasthan. From graceful suits and festive outfits to stylish traditional wear, our collection is designed for women who appreciate quality, comfort, and refined fashion. If you are looking for a trusted suit shop in Jaipur, Savra offers a carefully selected range of designs suitable for weddings, festivals, family functions, and everyday ethnic styling. Explore elegant patterns, fine fabrics, and fashionable designs that bring tradition and modern style together. Visit Savra and find ethnic wear that makes every occasion feel special."> 1322 <!-- Twitter data --> 1323 <meta name="twitter:card" content="summary_large_image"> 1324<meta name="twitter:title" content="Savra - Suit Shop in Jaipur in Jaipur, Rajasthan - Best Others near me"> 1325<meta name="twitter:description" content="Best Others near me in Jaipur, Rajasthan. From graceful suits and festive outfits to stylish traditional wear, our collection is designed for women who appreciate quality, comfort, and refined fashion. If you are looking for a trusted suit shop in Jaipur, Savra offers a carefully selected range of designs suitable for weddings, festivals, family functions, and everyday ethnic styling. Explore elegant patterns, fine fabrics, and fashionable designs that bring tradition and modern style together. Visit Savra and find ethnic wear that makes every occasion feel special."> 1326 <meta property="og:image" content="https://addyp.com/pictures/logo/6a/6ab4f3321a6e8.png"> 1327 <meta name="twitter:image" content="https://addyp.com/pictures/logo/6a/6ab4f3321a6e8.png"> 1328 </head> 1329 1330<body data-spy="scroll" data-target="#navbar-example2" data-offset="75" class="tpl-listing"> 1331 1332 1333 <div itemscope itemtype="https://schema.org/LocalBusiness"> 1334 <div id="fb-root"></div>
1335<script type="5be3242ed37c14fc3d069643-text/javascript">(function(d, s, id) { 1336 var js, fjs = d.getElementsByTagName(s)[0]; 1337 if (d.getElementById(id)) return; 1338 js = d.createElement(s); js.id = id; 1339 js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.1'; 1340 fjs.parentNode.insertBefore(js, fjs); 1341}(document, 'script', 'facebook-jssdk'));</script>
1341 1342
1343<script type="5be3242ed37c14fc3d069643-text/javascript">window.twttr = (function(d, s, id) { 1344 var js, fjs = d.getElementsByTagName(s)[0], 1345 t = window.twttr || {}; 1346 if (d.getElementById(id)) return t; 1347 js = d.createElement(s); 1348 js.id = id; 1349 js.src = "https://platform.twitter.com/widgets.js"; 1350 fjs.parentNode.insertBefore(js, fjs); 1351 1352 t._e = []; 1353 t.ready = function(f) { 1354 t._e.push(f); 1355 }; 1356 1357 return t; 1358}(document, "script", "twitter-wjs"));</script>
1358 <!-- Preloader --> 1359<div class="preloader"></div> 1360<!-- Loader --> 1361<div id="loader"> 1362 1363 <div class="spinner"></div> 1364 <div class="progress-bar"> 1365 <div class="progress-bar-inner"></div> 1366 </div> 1367 <div class="loading-text">Loading... Please wait</div> 1368</div> 1369
1370<script type="5be3242ed37c14fc3d069643-text/javascript"> 1371(function () { 1372 1373 // Runs immediately (not on DOMContentLoaded) since the loader markup 1374 // above is already in the DOM by the time this script executes - 1375 // waiting for DOMContentLoaded ties the dismiss timer to every 1376 // synchronous script on the page finishing (including slow CDN 1377 // scripts further down), which is exactly what this loader is 1378 // supposed to NOT wait for. 1379 1380 const messages = [ 1381 "Fetching Do-Follow Lists...", 1382 "Optimizing SEO...", 1383 "Got 2.5 Million Lists...", 1384 "Rendering Business Lists...", 1385 "Just a moment..." 1386 ]; 1387 1388 const loadingText = document.querySelector(".loading-text"); 1389 const progressBar = document.querySelector(".progress-bar-inner"); 1390 const loader = document.getElementById("loader"); 1391 1392 let index = 0; 1393 let progress = 0; 1394 1395 // Rotate messages 1396 const msgInterval = setInterval(() => { 1397 loadingText.innerText = messages[index]; 1398 index = (index + 1) % messages.length; 1399 }, 1200); 1400 1401 // Smooth fake progress 1402 const progInterval = setInterval(() => { 1403 if (progress < 80) { 1404 progress += Math.random() * 6; 1405 progressBar.style.width = progress + "%"; 1406 } 1407 }, 100); 1408 1409 /* 1410 IMPORTANT PART: 1411 Hide loader as soon as UI is ready 1412 NOT waiting for images/CDN 1413 */ 1414 1415 setTimeout(() => { 1416 1417 clearInterval(msgInterval); 1418 clearInterval(progInterval); 1419 1420 progressBar.style.width = "100%"; 1421 1422 loader.style.opacity = "0"; 1423 1424 setTimeout(() => { 1425 loader.style.display = "none"; 1426 }, 250); 1427 1428 }, 300); // tiny delay for smooth UX 1429 1430})(); 1431</script>
1431 1432 1433<!-- Navbar --> 1434 <!-- Icons CDN --> 1435<link href="https://cdnjs.cloudflare.com/ajax/libs/line-awesome/1.3.0/line-awesome/css/line-awesome.min.css" rel="stylesheet"> 1436<nav id="header-nav" class="navbar navbar-expand-md fixed-top transparent" style="display:none;"></nav> 1437 <header class="main-header"> 1438 <div class="nav-container"> 1439 1440 <!-- Logo --> 1441 <a class="logo" href="https://addyp.com"> 1442 <img class="logo1" src="/assets/imgs/logo.png" alt="AddYP.com" 1443 width="135"> 1444 </a> 1445 <div class="listing-minimal-actions"> 1446 <a href="/categories/">Browse Business Categories</a> 1447 <a href="/user/select-plan" class="btn-primary">+ Add Your Business - FREE</a> 1448 </div> 1449 1450 <!-- Notification (Always visible) --> 1451 <a href="/user/enquiries/" class="header-notif"> 1452 <i class="las la-envelope"></i> 1453 <span class="badge">0</span> 1454 </a> 1455 1456 1457 <!-- Mobile Toggle --> 1458 <button class="nav-toggle" id="navToggle"> 1459 <i class="las la-bars"></i> 1460 </button> 1461 1462 <!-- Navigation --> 1463 <nav class="nav" id="mainNav"> 1464 <a href="javascript:void(0)" data-toggle="modal" data-target="#languageModal" title="Google Translator"> 1465 <i class="las la-language" style="font-size:20px;"></i> 1466 </a> 1467 <a href="/categories/">Business Categories</a> 1468 <a href="/coupons/">Coupons</a> 1469 <a href="/services/">Services</a> 1470 <a href="/products/">Products</a> 1471 1472 <a href="/user/sign-in"><i class="las la-sign-in-alt"></i> Sign in</a> 1473 <a href="/user/select-plan" class="btn-primary"> 1474 <i class="las la-plus"></i> Add Business â FREE 1475 </a> 1476 </nav> 1477 1478 </div> 1479 </header> 1480 <!-- Language Modal --> 1481 <div class="modal fade" id="languageModal" tabindex="-1" role="dialog" aria-labelledby="languageModalLabel" 1482 aria-hidden="true"> 1483 <div class="modal-dialog modal-sm modal-dialog-centered" role="document"> 1484 <div class="modal-content"> 1485 <div class="modal-header"> 1486 <h5 class="modal-title" id="languageModalLabel"> 1487 ð Select Language 1488 </h5> 1489 <button type="button" class="close" data-dismiss="modal"> 1490 <span>×</span> 1491 </button> 1492 </div> 1493 1494 <div class="modal-body text-center"> 1495 <div id="google_translate_element"></div> 1496 </div> 1497 </div> 1498 </div> 1499 </div> 1500
1500<script type="5be3242ed37c14fc3d069643-text/javascript"> 1501 document.getElementById('navToggle').onclick = function() { 1502 document.getElementById('mainNav').classList.toggle('show'); 1503 }; 1504 </script>
vendor: 144 bytes, lines 1504-1506
1504 1505 1506<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="5be3242ed37c14fc3d069643-|49" defer></script>
1506<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a400f750f8d0117f',t:'MTc5MDI0NDI3Nw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
1506<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"d2105b86e8744b1bbef862aa650d68b8","r":1,"spa":2}' crossorigin="anonymous"></script>
1506 1507</body> 1508 1509</html>
1510<script type="5be3242ed37c14fc3d069643-text/javascript"> 1511document.getElementById('userToggle').onclick = function(e) { 1512 e.stopPropagation(); 1513 document.getElementById('userMenu').classList.toggle('show'); 1514}; 1515 1516document.addEventListener('click', function() { 1517 document.getElementById('userMenu').classList.remove('show'); 1518}); 1519</script>
vendor: 1 bytes, line 1519
1519
1520<script type="5be3242ed37c14fc3d069643-text/javascript"> 1521(function() { 1522 // shrinks the sticky header once the page scrolls, to give content 1523 // more room - see .header-scrolled in templates/css/styles.css. 1524 // .tpl-listing already drops sticky positioning entirely for its own 1525 // header (position: relative !important), so this is a no-op there, 1526 // not a conflict. 1527 var header = document.querySelector('.main-header'); 1528 if (!header) return; 1529 1530 // hysteresis (different enter/exit points, not one shared threshold) - 1531 // shrinking the header changes its own height, which nudges scrollY by 1532 // a pixel or two right as the class flips; a single threshold lets that 1533 // nudge immediately flip it back, so the class (and the header size) 1534 // vibrates on every scroll tick near the boundary. A gap between the 1535 // two thresholds absorbs that nudge instead of reacting to it. 1536 var isScrolled = false; 1537 var ticking = false; 1538 function updateHeader() { 1539 if (!isScrolled && window.scrollY > 60) { 1540 isScrolled = true; 1541 } else if (isScrolled && window.scrollY < 20) { 1542 isScrolled = false; 1543 } 1544 header.classList.toggle('header-scrolled', isScrolled); 1545 ticking = false; 1546 } 1547 window.addEventListener('scroll', function() { 1548 if (!ticking) { 1549 window.requestAnimationFrame(updateHeader); 1550 ticking = true; 1551 } 1552 }); 1553 updateHeader(); 1554})(); 1555</script>
vendor: 1 bytes, line 1555
1555
1556<script type="5be3242ed37c14fc3d069643-text/javascript"> 1557function googleTranslateElementInit() { 1558 new google.translate.TranslateElement( 1559 { pageLanguage: 'en' }, 1560 'google_translate_element' 1561 ); 1562} 1563 1564</script>
vendor: 1 bytes, line 1564
1564
1565<script src="https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" defer type="5be3242ed37c14fc3d069643-text/javascript"></script>
1565 1566 1567<div id="mainSearch" class="container-fluid p-2 fixed-top bg-light" style="display:none"> 1568 <form action="/results" class="form-row" method="get"> 1569 <div class="form-row container-fluid"> 1570 <div class="col-md-5 mb-2 mb-md-0"> 1571 <div class="input-group mr-md-2"> 1572 <div class="input-group-prepend"> 1573 <span class="input-group-text bg-white"><i class="las la-search"></i></span> 1574 </div> 1575 <input type="text" id="s" class="form-control form-control-lg" name="s" placeholder="Ex: pizza, hotel, car sale (Location: USA, UK, UAE, India...etc)"> 1576 </div> 1577 </div> 1578 1579 <div class="col-md-5 mb-2 mb-md-0"> 1580 <div class="input-group mr-md-2 text-left"> 1581 <select id="city-input" class="form-control form-control-lg" name="city"> 1582 <option value="" disabled selected>City</option> 1583 </select> 1584 </div> 1585 </div> 1586 1587 <div class="col-md-2 mb-2 mb-md-0"> 1588 <button type="submit" class="btn btn-lg btn-primary btn-block">Search</button> 1589 </div> 1590 </div> 1591 </form> 1592</div> 1593 1594 <!-- Language Modal --> 1595 <div class="modal fade" id="languageModal" tabindex="-1" role="dialog" aria-labelledby="languageModalLabel" 1596 aria-hidden="true"> 1597 <div class="modal-dialog modal-sm modal-dialog-centered" role="document"> 1598 <div class="modal-content"> 1599 <div class="modal-header"> 1600 <h5 class="modal-title" id="languageModalLabel"> 1601 ð Select Language 1602 </h5> 1603 <button type="button" class="close" data-dismiss="modal"> 1604 <span>×</span> 1605 </button> 1606 </div> 1607 1608 <div class="modal-body text-center"> 1609 <div id="google_translate_element"></div> 1610 </div> 1611 </div> 1612 </div> 1613 </div> 1614 1615
1616<script type="5be3242ed37c14fc3d069643-text/javascript"> 1617function googleTranslateElementInit() { 1618new google.translate.TranslateElement({pageLanguage: 'en'}, 'google_translate_element'); [24] 1619} 1620 1621</script>
vendor: 1 bytes, line 1621
1621
1622<script src="https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" type="5be3242ed37c14fc3d069643-text/javascript"></script>
1622 1623 1624<style> 1625/* Hide Google branding */ 1626.goog-logo-link, 1627.goog-te-gadget span { 1628 display: none !important; 1629} 1630 1631/* Remove top translate banner */ 1632.goog-te-banner-frame.skiptranslate, 1633iframe.goog-te-banner-frame { 1634 display: none !important; 1635} 1636 1637body { 1638 top: 0 !important; 1639} 1640 1641/* Dropdown styling */ 1642.goog-te-gadget { 1643 font-size: 0; 1644} 1645 1646.goog-te-gadget select { 1647 width: 100%; 1648 height: 36px; 1649 font-size: 14px !important; 1650 padding: 6px; 1651 border-radius: 6px; 1652} 1653 1654</style> 1655 1656 <!-- Business Header --> 1657 <div id="business-header" class="container-fluid bg-default pt-3"> 1658 1659 <section id="overview" class="container mt-3"> 1660 <input type="hidden" value="overview"> 1661 </section> 1662 1663 <!-- Breadcrumbs --> 1664 <div class="container breadcrumbs"> 1665 <a href="https://addyp.com/">Home</a> 1666 1667 > <a href="https://addyp.com/listings/rajasthan">Rajasthan</a> 1668 > <a href="https://addyp.com/listings/rajasthan/jaipur">Jaipur</a> 1669 > <a 1670 href="https://addyp.com/listings/rajasthan/jaipur/others">Others</a> 1671 ><a href="https://addyp.com/listing/rajasthan/jaipur/others/savra-suit-shop-in-jaipur"> 1672 Savra - Suit Shop in Jaipur </a> 1673 </div> 1674 1675 1676 1677 <!-- Business Title Area --> 1678 <div class="container mt-3 content-card header-identity-card" data-spy="scroll"> 1679 1680 <div class="row"> 1681 <div class="col-12 col-md-12"> 1682 <div class="form-row"> 1683 <div class="col-12 col-lg-3"> 1684 <div class="logo-wrap"> 1685 <a href="https://addyp.com/listings/rajasthan/jaipur/others" class="category-flag">Others</a> 1686 <img class="rounded pb-2" src="https://addyp.com/pictures/logo/6a/6ab4f3321a6e8.png" alt="Savra - Suit Shop in Jaipur" 1687 title="Savra - Suit Shop in Jaipur"> 1688 </div> 1689 </div> 1690 1691 <div class="col-12 col-lg-9"> 1692 <!-- verified --> 1693 1694 1695 <div class="established-eyebrow">Since 2002</div> 1696 <h1 id="place-id-478984"> 1697 Savra - Suit Shop in Jaipur <span style="font-size:0.55em; font-weight:500; text-transform: capitalize; color: #8e5f35;">- Others in Jaipur, Rajasthan</span> 1698 </h1> 1699 <div class="item-rating-wrap d-flex align-items-center"> 1700 1701 <!-- no reviews with an actual star rating yet - showing 1702 "0.0â " here would misleadingly read as a bad rating 1703 rather than "not enough data" --> 1704 <div class="ml-0 d-flex align-items-center flex-wrap"> 1705 <span class="text-muted">No ratings yet</span> 1706 1707 <a href="#review-form-wrapper" class="add-review-btn ml-3"> 1708 âï¸ Add Review 1709 </a> 1710 </div> 1711 1712 </div> 1713 1714 <div class="recommend-widget mb-3" data-place-id="478984" data-my-vote=""> 1715 <div class="d-flex flex-wrap align-items-center justify-content-between"> 1716 <strong>Do you recommend this business?</strong> 1717 <div class="recommend-buttons"> 1718 <button type="button" class="btn btn-light recommend-btn" data-vote="yes">Yes</button> 1719 <button type="button" class="btn btn-light recommend-btn" data-vote="no">No</button> 1720 <button type="button" class="btn btn-light recommend-btn" data-vote="maybe">Maybe</button> 1721 </div> 1722 </div> 1723 <div class="recommend-counts small text-muted mt-2"> 1724 <span class="recommend-count-yes">0</span> Yes · 1725 <span class="recommend-count-no">0</span> No · 1726 <span class="recommend-count-maybe">0</span> Maybe 1727 (<span class="recommend-count-total">0</span> total) 1728 </div> 1729 </div> 1730 <style> 1731 .recommend-widget{padding:14px 0;border-top:1px solid #eee;border-bottom:1px solid #eee;} 1732 .recommend-buttons{display:flex;gap:8px;} 1733 .recommend-btn{min-width:70px;} 1734 .recommend-btn.is-voted{font-weight:700;color:#fff;} 1735 .recommend-btn.is-voted[data-vote="yes"]{background:#28a745!important;border-color:#28a745!important;} 1736 .recommend-btn.is-voted[data-vote="no"]{background:#d33b43!important;border-color:#d33b43!important;} 1737 .recommend-btn.is-voted[data-vote="maybe"]{background:#ffb400!important;border-color:#ffb400!important;} 1738 </style> 1739
1739<script type="5be3242ed37c14fc3d069643-text/javascript"> 1740 (function () { 1741 var $widget = $('.recommend-widget[data-place-id="478984"]'); 1742 var placeId = 478984; 1743 1744 function setActive(vote) { 1745 $widget.find('.recommend-btn').removeClass('is-voted'); 1746 if (vote) { 1747 $widget.find('.recommend-btn[data-vote="' + vote + '"]').addClass('is-voted'); 1748 } 1749 } 1750 1751 function updateCounts(counts) { 1752 $widget.find('.recommend-count-yes').text(counts.yes); 1753 $widget.find('.recommend-count-no').text(counts.no); 1754 $widget.find('.recommend-count-maybe').text(counts.maybe); 1755 $widget.find('.recommend-count-total').text(counts.yes + counts.no + counts.maybe); 1756 } 1757 1758 setActive($widget.data('my-vote')); 1759 1760 $widget.on('click', '.recommend-btn', function () { 1761 var vote = $(this).data('vote'); 1762 1763 setActive(vote); 1764 1765 $.ajax({ 1766 url: 'https://addyp.com/process-recommend-vote.php', 1767 type: 'POST', 1768 contentType: 'application/json', 1769 data: JSON.stringify({ place_id: placeId, vote: vote }), 1770 success: function (response) { 1771 if (response && response.status === 'success') { 1772 updateCounts(response.counts); 1773 } 1774 } 1775 }); 1776 }); 1777 })(); 1778 </script>
1778 1779 1780 <!-- <div class="item-rating" data-rating="0"> --> 1781 <!-- <div class="item-rating" itemprop="aggregateRating" data-rating="0"> --> 1782 <!-- raty plugin placeholder --> 1783 <!-- </div> --> 1784 1785 1786 <!--end verified --> 1787 1788 <div> 1789 <div class="mb-3 mt-3"> 1790 <!-- ===== CONTACT ACTIONS (Google Style) ===== --> 1791 <div class="contact-actions text-md-right"> 1792 1793 <div class="contact-group"> 1794 <a href="tel:9460192284" class="action-btn primary-cta contact-blur" data-click-track="call" data-click-place="478984" data-click-detail="9460192284"> 1795 <i class="las la-phone"></i> 1796 <span>Call</span> 1797 </a> 1798 1799 <a href="https://wa.me/919460192284?text=Hello%2C+I+found+your+listing+on+addyp.com" 1800 target="_blank" class="action-btn whatsapp contact-blur" data-click-track="whatsapp" data-click-place="478984" data-click-detail="919460192284"> 1801 <i class="lab la-whatsapp"></i> 1802 <span>WhatsApp</span> 1803 </a> 1804 <button type="button" class="action-btn primary-cta" data-toggle="modal" 1805 data-target="#contact-user-modal"><i class="las la-comments"></i> Get Quote</button> 1806 1807 <button type="button" class="action-btn" data-toggle="modal" 1808 data-target="#request-callback-modal"><i class="las la-phone-volume"></i> Request a Callback</button> 1809 </div> 1810 1811 <div class="contact-group"> 1812 <a href="https://www.savrajaipur.com/" target="_blank" class="action-btn contact-blur" data-click-track="website" data-click-place="478984" data-click-detail="https://www.savrajaipur.com/"> 1813 <i class="las la-globe"></i> 1814 <span>Website</span> 1815 </a> 1816 </div> 1817 1818 1819 <div class="contact-group contact-group-compact"> 1820 <!-- Book Now Button --> 1821 1822 <!-- Order Online Button --> 1823 1824 <!-- Calendar Button --> 1825 </div> 1826 1827 </div> 1828 </div> 1829 <div class="location-cluster location-panel"> 1830 <span itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> 1831 <span class="location-item"><i class="las la-address-card"></i> <span itemprop="streetAddress">Plot No 171 3, Haldighati Marg, opp. Mewar Appartment, Sanganer, Sector 17, Pratap Nagar,</span></span> 1832 <span class="location-item"><i class="las la-map-marked-alt"></i> <strong itemprop="addressLocality">Jaipur</strong></span> 1833 <span class="location-item"><i class="las la-map-marker-alt"></i> <strong> 1834 <span itemprop="addressRegion">Rajasthan</span>,<span itemprop="addressCountry">India</span> 1835 </strong></span> 1836 </span> 1837 <!-- Get Location Button --> 1838 1839 <button onclick="if (!window.__cfRLUnblockHandlers) return false; openCityMap()" class="btn btn-sm btn-outline-dark location-item" title="Get Directions" data-click-track="directions" data-click-place="478984" data-cf-modified-5be3242ed37c14fc3d069643-=""> 1840 <i class="las la-location-arrow"></i> Directions 1841 </button> 1842 </div> 1843 1844 <div class="d-flex align-items-center flex-wrap mt-2" style="gap:15px;"> 1845 <!-- Service Area --> 1846 <div class="d-flex align-items-center flex-wrap"> 1847 1848 <strong class="me-2">Service Location:</strong> 1849 1850 <span class="badge bg-warning text-dark me-1 service-area-badges"> 1851 india </span> 1852 </div> 1853 1854 </div> 1855 <!-- ===== SOCIAL LINKS (Secondary) ===== --> 1856 <div class="social-links text-md-left mt-3 contact-blur" data-click-track-group="social" data-click-place="478984"> 1857 1858 1859 1860 1861 1862 1863 <a href="https://maps.app.goo.gl/jeFYqpfc4HSyUgm47" target="_blank" data-click-detail="Google Business"> 1864 <i class="lab la-google"></i> 1865 </a> 1866 1867 </div> 1868 1869 1870 </div> 1871 1872 </div> 1873 1874 1875 1876 1877 1878 1879 1880<div class="form-row mt-3">
1881<script type="5be3242ed37c14fc3d069643-text/javascript"> 1882function copyShareLink() { 1883 const link = window.location.href; 1884 navigator.clipboard.writeText(link).then(function() { 1885 alert("Link copied to clipboard!"); 1886 }); 1887} 1888</script>
1888 1889 1890 1891 1892 1893</div> 1894 1895 1896 </div> 1897 </div> 1898 </div> 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 </div> 1909 </div> 1910 1911 <!-- Floating Bottom Bar --> 1912 1913 <!-- Same idea as the owner's bar above, but for everyone else: 1914 the actions that actually matter for THIS listing (contact the 1915 business) shouldn't disappear on scroll while a generic sitewide 1916 "Enquiries/Add Business/Manage" nav (irrelevant to a visitor 1917 reading someone else's listing) stays put - so this replaces 1918 that nav here instead of stacking alongside it. --> 1919 <div class="bottom-action-bar visitor-action-bar"> 1920 <div class="bar-inner"> 1921 <div class="floating-actions"> 1922 <a href="tel:9460192284" class="floating btn btn-call contact-blur" data-click-track="call" data-click-place="478984" data-click-detail="9460192284" title="Call"> 1923 <i class="las la-phone"></i> 1924 <span class="text">Call</span> 1925 </a> 1926 1927 <a href="https://wa.me/919460192284?text=Hello%2C+I+found+your+listing+on+addyp.com" target="_blank" class="floating btn btn-whatsapp-float contact-blur" data-click-track="whatsapp" data-click-place="478984" data-click-detail="919460192284" title="WhatsApp"> 1928 <i class="lab la-whatsapp"></i> 1929 <span class="text">WhatsApp</span> 1930 </a> 1931 1932 <button type="button" class="floating btn btn-getquote" data-toggle="modal" data-target="#contact-user-modal" title="Get Quote"> 1933 <i class="las la-comments"></i> 1934 <span class="text">Get Quote</span> 1935 </button> 1936 </div> 1937 </div> 1938 </div> 1939 1940 <style>.mobile-buttons{ display:none !important; }</style> 1941 1942 </div> 1943 1944<nav id="navbar-example2" class="jd-navbar sticky-top bg-white" aria-label="Listing section navigation"> 1945 <div class="container"> 1946 <ul class="jd-nav d-flex" id="listingNav"> 1947 <li> 1948 <a class="nav-link active" 1949 href="#overview" 1950 aria-label="Go to Overview section" 1951 title="Overview of Savra - Suit Shop in Jaipur" 1952 aria-current="true"> 1953 Overview 1954 </a> 1955 </li> 1956 <li> 1957 <a class="nav-link" 1958 href="#about" 1959 aria-label="Go to About section" 1960 title="About Savra - Suit Shop in Jaipur"> 1961 About 1962 </a> 1963 </li> 1964 <li> 1965 <a class="nav-link" 1966 href="#faq" 1967 aria-label="Go to FAQ section" 1968 title="Frequently asked questions about Savra - Suit Shop in Jaipur"> 1969 FAQ 1970 </a> 1971 </li> 1972 <li> 1973 <a class="nav-link" 1974 href="#working-hrs" 1975 aria-label="Go to Working Hours section" 1976 title="Working Hours Savra - Suit Shop in Jaipur"> 1977 Working Hours 1978 </a> 1979 </li> 1980 <li> 1981 <a class="nav-link" 1982 href="#why-us" 1983 aria-label="Go to Why Us section" 1984 title="Why us Savra - Suit Shop in Jaipur"> 1985 Why Us 1986 </a> 1987 </li> 1988 1989 <li> 1990 <a class="nav-link" 1991 href="#contact-details" 1992 aria-label="Go to Contact section" 1993 title="Contact details of Savra - Suit Shop in Jaipur"> 1994 Contact 1995 </a> 1996 </li> 1997 <li> 1998 <a class="nav-link" 1999 href="#place-map-wrapper" 2000 aria-label="Go to Location section" 2001 title="Location of Savra - Suit Shop in Jaipur"> 2002 Location 2003 </a> 2004 </li> 2005 <li> 2006 <a class="nav-link" 2007 href="#reviews" 2008 aria-label="Go to Reviews section" 2009 title="Customer reviews of Savra - Suit Shop in Jaipur"> 2010 Reviews 2011 </a> 2012 </li> 2013 </ul> 2014 </div> 2015 </nav> 2016 <div class="jd-navbar-spacer" id="navbarSpacer"></div> 2017 2018 <!-- Main Information --> 2019 <div class="container mt-3"> 2020 2021 2022 <div class="row"> 2023 <div class="col-md-6 col-lg-8" > 2024 2025 <!-- Description -->
2026 <section id="about" class="mt-3 content-card"> 2027 <h2 class="text-dark text-uppercase section-heading">About Us</h2> 2028 <p class="text-muted mb-2"><i class="las la-calendar-alt"></i> Established in 2002</p> 2029 <!-- Short Description --> 2030 <div class="description mb-3" style="font-size: 17px; font-weight: 500;"> 2031 From graceful suits and festive outfits to stylish traditional wear, our collection is designed for women who appreciate quality, comfort, and refined fashion. If you are looking for a trusted suit shop in <a href="/listings/rajasthan/jaipur">Jaipur</a>, Savra offers a carefully selected range of designs suitable for weddings, festivals, family functions, and everyday ethnic styling. Explore elegant patterns, fine fabrics, and fashionable designs that bring tradition and modern style together. Visit Savra and find ethnic wear that makes every occasion feel special. </div> 2032 <div class="description"> 2033 <p>Discover timeless style and elegant craftsmanship at Savra, your destination for beautiful ethnic wear in <a href="/listings/rajasthan/jaipur">Jaipur</a>. From graceful suits and festive outfits to stylish traditional wear, our collection is designed for women who appreciate quality, comfort, and refined fashion. If you are looking for a trusted suit shop in Jaipur, Savra offers a carefully selected range of designs suitable for weddings, festivals, family functions, and everyday ethnic styling. Explore elegant patterns, fine fabrics, and fashionable designs that bring tradition and modern style together. Visit Savra and find ethnic wear that makes every occasion feel special.</p> </div> 2034 <!-- Download Section --> 2035 2036 </section> 2037 <section id="faq" class="mt-3 content-card"> 2038 <h2 class="text-dark text-uppercase section-heading">Frequently Asked Questions</h2> 2039 <hr class="heading-divider"> 2040 <div class="faq-accordion" id="faqAccordion"> 2041 <div class="faq-item"> 2042 <button class="faq-question" type="button" data-toggle="collapse" data-target="#faqAnswer0" aria-expanded="true" aria-controls="faqAnswer0"> 2043 <span>What services does Savra - Suit Shop in Jaipur offer?</span> 2044 <i class="las la-angle-down faq-caret"></i> 2045 </button> 2046 <div id="faqAnswer0" class="collapse show" data-parent="#faqAccordion"> 2047 <div class="faq-answer">Savra - Suit Shop in Jaipur provides Others services in India. Contact the business directly to confirm specific requirements and availability.</div> 2048 </div> 2049 </div> 2050 <div class="faq-item"> 2051 <button class="faq-question" type="button" data-toggle="collapse" data-target="#faqAnswer1" aria-expanded="false" aria-controls="faqAnswer1"> 2052 <span>How can I contact Savra - Suit Shop in Jaipur?</span> 2053 <i class="las la-angle-down faq-caret"></i> 2054 </button> 2055 <div id="faqAnswer1" class="collapse" data-parent="#faqAccordion"> 2056 <div class="faq-answer">You can contact Savra - Suit Shop in Jaipur using the phone number, WhatsApp, email, or website listed on this page.</div> 2057 </div> 2058 </div> 2059 <div class="faq-item"> 2060 <button class="faq-question" type="button" data-toggle="collapse" data-target="#faqAnswer2" aria-expanded="false" aria-controls="faqAnswer2"> 2061 <span>Where is Savra - Suit Shop in Jaipur located?</span> 2062 <i class="las la-angle-down faq-caret"></i> 2063 </button> 2064 <div id="faqAnswer2" class="collapse" data-parent="#faqAccordion"> 2065 <div class="faq-answer">Savra - Suit Shop in Jaipur is located in Jaipur, Rajasthan. You can view the exact location on the map provided in this listing.</div> 2066 </div> 2067 </div> 2068 <div class="faq-item"> 2069 <button class="faq-question" type="button" data-toggle="collapse" data-target="#faqAnswer3" aria-expanded="false" aria-controls="faqAnswer3"> 2070 <span>What areas does Savra - Suit Shop in Jaipur serve?</span> 2071 <i class="las la-angle-down faq-caret"></i> 2072 </button> 2073 <div id="faqAnswer3" class="collapse" data-parent="#faqAccordion"> 2074 <div class="faq-answer">Savra - Suit Shop in Jaipur serves india.</div> 2075 </div> 2076 </div> 2077 <div class="faq-item"> 2078 <button class="faq-question" type="button" data-toggle="collapse" data-target="#faqAnswer4" aria-expanded="false" aria-controls="faqAnswer4"> 2079 <span>Is Savra - Suit Shop in Jaipur open today?</span> 2080 <i class="las la-angle-down faq-caret"></i> 2081 </button> 2082 <div id="faqAnswer4" class="collapse" data-parent="#faqAccordion"> 2083 <div class="faq-answer">Please check the opening hours section on this page, or call <span class="contact-blur"><a href="tel:9460192284"><strong>9460192284</strong></a></span> directly for confirmation.</div> 2084 </div> 2085 </div> 2086 <div class="faq-item"> 2087 <button class="faq-question" type="button" data-toggle="collapse" data-target="#faqAnswer5" aria-expanded="false" aria-controls="faqAnswer5"> 2088 <span>How long has Savra - Suit Shop in Jaipur been in business?</span> 2089 <i class="las la-angle-down faq-caret"></i> 2090 </button> 2091 <div id="faqAnswer5" class="collapse" data-parent="#faqAccordion"> 2092 <div class="faq-answer">Savra - Suit Shop in Jaipur was established in 2002, giving it 24+ years of experience in the Others category.</div> 2093 </div> 2094 </div> 2095 <div class="faq-item"> 2096 <button class="faq-question" type="button" data-toggle="collapse" data-target="#faqAnswer6" aria-expanded="false" aria-controls="faqAnswer6"> 2097 <span>Is this listing on addyp.com free to use?</span> 2098 <i class="las la-angle-down faq-caret"></i> 2099 </button> 2100 <div id="faqAnswer6" class="collapse" data-parent="#faqAccordion"> 2101 <div class="faq-answer">Yes, users can view details and contact businesses listed on addyp.com without any charges.</div> 2102 </div> 2103 </div> 2104 </div> 2105 <p class="mt-3"> Looking for similar services? Check out related businesses here: 2106 <b> </b> in Jaipur. 2107 </p> 2108 </section> 2109 <!-- Gallery --> 2110 <section id="photos" class="mt-3"> 2111 </section> 2112 2113 <!-- Bootstrap Service Modal --> 2114 <div class="modal fade" 2115 id="serviceModal" 2116 tabindex="-1" 2117 role="dialog" 2118 aria-hidden="true"> 2119 2120 <div class="modal-dialog modal-xl" 2121 role="document"> 2122 2123 <div class="modal-content"> 2124 2125 <!-- Header --> 2126 <div class="modal-header"> 2127 <h5 class="modal-title" 2128 id="popupTitle"></h5> 2129 2130 <button type="button" 2131 class="close" 2132 data-dismiss="modal"> 2133 <span>×</span> 2134 </button> 2135 </div> 2136 2137 <!-- Scrollable area --> 2138 <div class="modal-body"> 2139 2140 <div class="popup-gallery"> 2141 2142 <button id="prevImg" 2143 type="button"> 2144 â¹ 2145 </button> 2146 2147 <img loading="lazy" id="popupImage" 2148 class="popup-img" 2149 src="" 2150 alt=""> 2151 2152 <button id="nextImg" 2153 type="button"> 2154 ⺠2155 </button> 2156 2157 </div> 2158 <!-- Price --> 2159 <h5 id="popupPrice" class="mt-3"></h5> 2160 <p id="popupText"></p> 2161 2162 <div class="video-wrap"> 2163 <a id="popupYoutube"
2164 class="btn btn-secondary no-underline" 2165 target="_blank" style="color:white;"> 2166 Watch Video 2167 </a> 2168 <a id="popupSerDetailsLink" 2169 class="btn btn-secondary no-underline" 2170 target="_blank" style="color:white;"> 2171 View Details 2172 </a> 2173 </div> 2174 2175 </div> 2176 2177 <!-- Footer --> 2178 <div class="modal-footer d-flex justify-content-between"> 2179 2180 <button id="prevService" 2181 type="button" 2182 class="btn btn btn-outline-secondary"> 2183 Previous Service 2184 </button> 2185 2186 <button id="nextService" 2187 type="button" 2188 class="btn btn btn-outline-secondary"> 2189 Next Service 2190 </button> 2191 2192 </div> 2193 2194 </div> 2195 2196 </div> 2197 2198 </div> 2199 2200 2201 2202 2203 <!-- Bootstrap Product Modal --> 2204 <div class="modal fade" 2205 id="productModal" 2206 tabindex="-1" 2207 role="dialog" 2208 aria-hidden="true"> 2209 2210 <div class="modal-dialog modal-xl" role="document"> 2211 <div class="modal-content"> 2212 2213 <!-- Header --> 2214 <div class="modal-header"> 2215 <h5 class="modal-title" id="productPopupTitle"></h5> 2216 2217 <button type="button" class="close" data-dismiss="modal"> 2218 <span>×</span> 2219 </button> 2220 </div> 2221 2222 <!-- Body --> 2223 <div class="modal-body"> 2224 2225 <div class="popup-gallery"> 2226 2227 <button id="prevProductImg" type="button">â¹</button> 2228 2229 <img loading="lazy" id="productPopupImage" 2230 class="popup-img" 2231 src="" 2232 alt=""> 2233 2234 <button id="nextProductImg" type="button">âº</button> 2235 2236 </div> 2237 2238 <!-- Price --> 2239 <h5 id="productPopupPrice" class="mt-3"></h5> 2240 2241 <!-- Description --> 2242 <p id="productPopupText"></p> 2243 2244 <!-- Link --> 2245 <div class="video-wrap"> 2246 <a id="productPopupLink" 2247 class="btn btn-secondary no-underline" 2248 target="_blank" style="color:white;"> 2249 Watch Video 2250 </a> 2251 <a id="productDetailsLink" 2252 class="btn btn-secondary no-underline" 2253 target="_blank" style="color:white;"> 2254 View Details 2255 </a> 2256 </div> 2257 2258 </div> 2259 2260 <!-- Footer --> 2261 <div class="modal-footer d-flex justify-content-between"> 2262 2263 <button id="prevProduct" 2264 type="button" 2265 class="btn btn-outline-secondary"> 2266 Previous Product 2267 </button> 2268 2269 <button id="nextProduct" 2270 type="button" 2271 class="btn btn-outline-secondary"> 2272 Next Product 2273 </button> 2274 2275 </div> 2276 2277 </div> 2278 </div> 2279 </div> 2280 2281 2282 <div > 2283 <section id="why-us" class="mt-3 content-card"> 2284 <h2 class="text-dark text-uppercase section-heading">Why Choose Us</h2> 2285 <hr class="heading-divider"> 2286 <div class="d-flex mb-3"> 2287 <div class="mr-3"> 2288 2289 2290<p> 2291 Savra - Suit Shop in Jaipur is a <a href="https://addyp.com/listings/rajasthan/jaipur/others" 2292 style="color:rgb(40, 56, 72); text-decoration: none; font-weight: bold;">Others</a> business in Jaipur, Rajasthan, India that has 24+ years of experience, established in 2002, and serves india. 2293</p> 2294 2295 <!-- <p>Frequently Asked Questions (FAQs) â <a href="https://addyp.com/listings/rajasthan/jaipur/others" 2296 style="color:rgb(40, 56, 72); text-decoration: none; font-weight: bold;">Others</a> in India</p> --> 2297 2298 </div> 2299 </div> 2300 </section> 2301 <section id="contact-details" class="mt-3 content-card"> 2302 <h2 class="text-dark text-uppercase section-heading">Contact Details</h2> 2303 2304 <hr class="heading-divider"> 2305 <div> 2306 <p> 2307 <i class="fas fa-phone-alt"></i> Contact us at 2308 <span class="contact-blur"> 2309 <a href="tel:9460192284"><strong>9460192284</strong></a> 2310 </span> 2311 or for quick assistance 2312 , reach out via 2313 <i class="fab fa-whatsapp text-success"></i> 2314 <span class="contact-blur"> 2315 <a href="https://wa.me/919460192284?text=Hello%2C+I+found+your+listing+on+addyp.com+I+would+like+to+know+more+details+about+it." 2316 target="_blank"> 2317 <strong>WhatsApp</strong> 2318 </a>. 2319 </span> 2320 . 2321 </p> 2322 </div> 2323 2324 <div class="mt-3"> 2325 <strong>Follow:</strong> 2326 <div class="social-links d-inline-block contact-blur"> 2327 <a href="https://maps.app.goo.gl/jeFYqpfc4HSyUgm47" target="_blank" rel="noopener" aria-label="Google Business Profile"> 2328 <i class="lab la-google"></i> 2329 </a> 2330 </div> 2331 </div> 2332 </section> 2333 2334 2335 2336 <!-- Features --> 2337 2338 <!-- Coupons --> 2339 <section class="mt-3"> 2340 <!-- Reviews --> 2341 <div id="reviews" class="tab-pane content-card" role="tabpanel"> 2342 <h2 class="text-dark text-uppercase section-heading">Reviews</h2> 2343 <hr class="heading-divider"> 2344 2345 2346 <div id="review-form-wrapper" class="mt-4"> 2347 <div class="review-login-box" id="review-login-box"> 2348 <p>To write a review, you must login first.</p> 2349 <a href="/user/sign-in" class="btn-login">Sign In</a> 2350 </div> 2351 </div> 2352 </div> 2353 </section> 2354 <!-- removed from here similar listing --> 2355 2356 2357 </div> 2358 </div> 2359 2360 <!-- Sidebar --> 2361 <div class="col-md-6 col-lg-4"> 2362 <div class="content-card"> 2363 <div class="mb-3"> 2364 2365<a href="#" id="shareDropdown" class=" btn btn-block btn-outline-dark" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 2366<i class="fa-solid fa-share-from-square"></i> Share page 2367</a> 2368 2369<div class="dropdown-menu dropdown-menu-right zoomIn animated" aria-labelledby="shareDropdown"> 2370 2371 <a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Faddyp.com%2Flisting%2Frajasthan%2Fjaipur%2Fothers%2Fsavra-suit-shop-in-jaipur" class="dropdown-item" data-click-track="share" data-click-place="478984" data-click-detail="Facebook"> 2372 <i class="lab la-facebook"></i> Facebook 2373 </a> 2374 2375 <div class="dropdown-divider"></div> 2376 2377 <a class="dropdown-item" target="_blank" href="https://twitter.com/intent/tweet?url=https%3A%2F%2Faddyp.com%2Flisting%2Frajasthan%2Fjaipur%2Fothers%2Fsavra-suit-shop-in-jaipur" data-click-track="share" data-click-place="478984" data-click-detail="Twitter"> 2378 <i class="lab la-twitter"></i> Twitter 2379 </a> 2380 2381 <div class="dropdown-divider"></div> 2382 2383 <a class="dropdown-item" target="_blank" href="https://wa.me/?text=https%3A%2F%2Faddyp.com%2Flisting%2Frajasthan%2Fjaipur%2Fothers%2Fsavra-suit-shop-in-jaipur" data-click-track="share" data-click-place="478984" data-click-detail="WhatsApp"> 2384 <i class="lab la-whatsapp"></i> WhatsApp 2385 </a> 2386 2387 <div class="dropdown-divider"></div> 2388 2389 <!-- Copy Link --> 2390 <a class="dropdown-item" href="javascript:void(0)" onclick="if (!window.__cfRLUnblockHandlers) return false; copyShareLink()" data-click-track="share" data-click-place="478984" data-click-detail="Copy Link" data-cf-modified-5be3242ed37c14fc3d069643-=""> 2391 <i class="las la-link"></i> Copy Link 2392 </a> 2393 2394</div> 2395</div> 2396 2397 2398<a href="#" class="btn btn-block btn-outline-dark mb-3" data-toggle="modal" data-target="#reportContentModal"> 2399 <i class="fa-solid fa-flag"></i> Report 2400</a> 2401 2402 2403<div class="modal fade" id="reportContentModal" tabindex="-1" role="dialog" aria-labelledby="reportContentModalLabel"> 2404 <div class="modal-dialog modal-dialog-centered" role="document"> 2405 <div class="modal-content"> 2406 <form method="post" action="https://addyp.com/process-report"> 2407 <div class="modal-header"> 2408 <h5 class="modal-title" id="reportContentModalLabel">Report this listing</h5> 2409 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 2410 <span aria-hidden="true">×</span> 2411 </button> 2412 </div> 2413 <div class="modal-body"> 2414 2415 <input type="hidden" name="content_type" value="listing"> 2416 <input type="hidden" name="content_id" value="478984"> 2417 <input type="hidden" name="content_title" value="Savra - Suit Shop in Jaipur"> 2418 <input type="hidden" name="content_url" value="https://addyp.com/listing/rajasthan/jaipur/others/savra-suit-shop-in-jaipur"> 2419 2420 <!-- honeypot - left empty by real visitors, hidden off-screen --> 2421 <input type="text" name="website" value="" style="position:absolute; left:-9999px;" tabindex="-1" autocomplete="off"> 2422 2423 <div class="form-group"> 2424 <label>What's wrong?</label> 2425 <select name="reason" class="form-control" required> 2426 <option value="">-- Select a reason --</option> 2427 <option value="incorrect_info">Incorrect information (contact, address, hours, etc.)</option> 2428 <option value="missing_details">Missing or incomplete details</option> 2429 <option value="duplicate">Duplicate listing</option> 2430 <option value="inappropriate">Inappropriate or offensive content</option> 2431 <option value="spam_fake">Spam or fake</option> 2432 <option value="no_longer_valid">No longer available (closed, expired, filled, etc.)</option> 2433 <option value="other">Other</option> 2434 </select> 2435 </div> 2436 2437 <div class="form-group"> 2438 <label>Who are you?</label> 2439 <select name="relationship" class="form-control" required> 2440 <option value="">-- Select one --</option> 2441 <option value="visitor">Just a visitor / customer</option> 2442 <option value="business_owner">I'm the owner of this business</option> 2443 <option value="competitor">I'm a competing business</option> 2444 <option value="other">Other</option> 2445 </select> 2446 </div> 2447 2448 <div class="form-group"> 2449 <label>Details (optional)</label> 2450 <textarea name="details" class="form-control" rows="3" placeholder="Tell us more about the issue..."></textarea> 2451 </div> 2452 2453 <div class="form-row"> 2454 <div class="form-group col-md-6"> 2455 <label>Your name (optional)</label> 2456 <input type="text" name="reporter_name" class="form-control"> 2457 </div> 2458 <div class="form-group col-md-6"> 2459 <label>Your email (optional)</label> 2460 <input type="email" name="reporter_email" class="form-control"> 2461 </div> 2462 </div> 2463 2464 <div class="form-group text-center"> 2465 <label>What is 1 + 10 ?</label> 2466 <input type="text" class="form-control text-center" name="captcha_answer" placeholder="Enter answer" required> 2467 </div> 2468
2469 </div> 2470 <div class="modal-footer"> 2471 <button type="button" class="btn btn-light" data-dismiss="modal">Cancel</button> 2472 <button type="submit" class="btn btn-danger">Submit Report</button> 2473 </div> 2474 </form> 2475 </div> 2476 </div> 2477</div> 2478 2479 <!-- Contact and Favorites --> 2480 <div> 2481 2482 <button type="button" class="add-to-favorites btn btn-block btn-outline-dark" 2483 data-listing-id="478984" data-click-track="favorite" data-click-place="478984"><i 2484 class="lar la-heart"></i> 2485 Add to Favorites</button> 2486 </div> 2487 </div> 2488 2489 <!-- Hours --> 2490 <section id="working-hrs" class="mt-3 content-card"> 2491 <h2 class="section-heading">Working Hours</h2> 2492 <hr class="heading-divider"> 2493 2494 <div> 2495 <table class="table table-row-bordered table-striped"> 2496 <thead> 2497 <tr> 2498 <th>Day</th> 2499 <th class="text-center">Start</th> 2500 <th class="text-center">End</th> 2501 </tr> 2502 </thead> 2503 <tbody> 2504 <tr> 2505 <td>Monday</td> 2506 2507 2508 <td class="text-center"> 2509 10:30 am </td> 2510 2511 <td class="text-center"> 2512 8:30 pm </td> 2513 2514 2515 </tr> 2516 <tr> 2517 <td>Tuesday</td> 2518 2519 2520 <td class="text-center"> 2521 10:30 am </td> 2522 2523 <td class="text-center"> 2524 8:30 pm </td> 2525 2526 2527 </tr> 2528 <tr> 2529 <td>Wednesday</td> 2530 2531 2532 <td class="text-center"> 2533 10:30 am </td> 2534 2535 <td class="text-center"> 2536 8:30 pm </td> 2537 2538 2539 </tr> 2540 <tr> 2541 <td>Thursday</td> 2542 2543 2544 <td class="text-center"> 2545 10:30 am </td> 2546 2547 <td class="text-center"> 2548 8:30 pm </td> 2549 2550 2551 </tr> 2552 <tr> 2553 <td>Friday</td> 2554 2555 2556 <td class="text-center"> 2557 10:30 am </td> 2558 2559 <td class="text-center"> 2560 8:30 pm </td> 2561 2562 2563 </tr> 2564 <tr> 2565 <td>Saturday</td> 2566 2567 2568 <td class="text-center"> 2569 10:30 am </td> 2570 2571 <td class="text-center"> 2572 8:30 pm </td> 2573 2574 2575 </tr> 2576 <tr> 2577 <td>Sunday</td> 2578 2579 2580 <td class="text-center"> 2581 10:30 am </td> 2582 2583 <td class="text-center"> 2584 8:30 pm </td> 2585 2586 2587 </tr> 2588 </tbody> 2589 </table> 2590 </div> 2591 </section> 2592 2593 2594 2595 <!-- Map --> 2596 <div class="content-card"> 2597 <p class="text-dark text-uppercase section-heading"> 2598 Location</p> 2599 <hr class="heading-divider"> 2600 <div id="place-map-wrapper"> 2601 <div id="map-canvas" style="width:100%; height:100%" ></div> 2602 </div> 2603 </div> 2604 2605 2606 2607 <!-- Manager --> 2608 <div class="content-card"> 2609 <p class="text-dark text-uppercase section-heading"> 2610 Updated By</p> 2611 <hr class="heading-divider"> 2612 2613 <div class="d-flex"> 2614 2615 <div class="flex-grow-1"> 2616 <strong><a 2617 href="https://addyp.com/profile/397732">savra SAVRA</a></strong> 2618 <strong style="float:right;">On 24 Sep 2026</strong><br> 2619 2620 <div class="smallest"> 2621 </div> 2622 </div> 2623 </div> 2624 </div> 2625 2626 <div class="content-card"> 2627 <h2 class="text-dark text-uppercase section-heading"> 2628 Explore Others in Other Cities 2629 </h2> 2630 <hr class="heading-divider"> 2631 2632 <div class="other-cities-chips"> 2633 2634 <a href="https://addyp.com/listings/rajasthan/udaipur/others" class="other-cities-chip"> 2635 Others in Udaipur </a> 2636 2637 2638 <a href="https://addyp.com/listings/rajasthan/jodhpur/others" class="other-cities-chip"> 2639 Others in Jodhpur </a> 2640 2641 2642 <a href="https://addyp.com/listings/rajasthan/kota/others" class="other-cities-chip"> 2643 Others in Kota </a> 2644 2645 2646 <a href="https://addyp.com/listings/rajasthan/alwar/others" class="other-cities-chip"> 2647 Others in Alwar </a> 2648 2649 2650 <a href="https://addyp.com/listings/rajasthan/ajmer/others" class="other-cities-chip"> 2651 Others in Ajmer </a> 2652 2653 2654 <a href="https://addyp.com/listings/rajasthan/jaipur-city/others" class="other-cities-chip"> 2655 Others in Jaipur City </a> 2656 2657 2658 <a href="https://addyp.com/listings/rajasthan/jodhpur/others" class="other-cities-chip"> 2659 Others in jodhpur </a> 2660 2661 2662 <a href="https://addyp.com/listings/rajasthan/jaisalmer/others" class="other-cities-chip"> 2663 Others in Jaisalmer </a> 2664 2665 2666 <a href="https://addyp.com/listings/rajasthan/bikaner/others" class="other-cities-chip"> 2667 Others in Bikaner </a> 2668 2669 2670 <a href="https://addyp.com/listings/rajasthan/sikar/others" class="other-cities-chip"> 2671 Others in Sikar </a> 2672 2673 2674 <a href="https://addyp.com/listings/rajasthan/bhiwadi/others" class="other-cities-chip"> 2675 Others in Bhiwadi </a> 2676 2677 2678 <a href="https://addyp.com/listings/rajasthan/kishangarh/others" class="other-cities-chip"> 2679 Others in Kishangarh </a> 2680 2681 </div> 2682 </div> 2683 </div> 2684 </div>
2685 </div> 2686 2687 <!-- Bootstrap Modal --> 2688 <div class="modal fade" id="phoneModal" tabindex="-1" aria-labelledby="phoneModalLabel" 2689 aria-hidden="true"> 2690 <input type="hidden" id="place_id" class="form-control"> 2691 <div class="modal-dialog"> 2692 <div class="modal-content"> 2693 <div class="modal-header"> 2694 <h5 class="modal-title" id="phoneModalLabel">Request Email or Call Back</h5> 2695 2696 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 2697 <span aria-hidden="true">Ã</span> 2698 </button> 2699 </div> 2700 <div class="modal-body"> 2701 <p>Email or Phone</p> 2702 <input type="text" id="messageText" class="form-control" 2703 placeholder="Type your Email/Phone..."> 2704 <div class="mb-3 mt-3 text-center"> 2705 <label id="captcha-ques" class="fw-bold d-block mb-2"></label> 2706 <input type="text" id="captcha-ans" class="form-control" placeholder="Enter answer" required/> 2707 </div> 2708 </div> 2709 <div class="modal-footer"> 2710 2711 <button type="button" class="btn btn-primary" onclick="if (!window.__cfRLUnblockHandlers) return false; sendMessage()" data-cf-modified-5be3242ed37c14fc3d069643-="">Request Email or Call Back</button> 2712 </div> 2713 </div> 2714 </div> 2715 </div> 2716 2717 2718
2718<script type="5be3242ed37c14fc3d069643-text/javascript"> 2719 function generateCaptchas() { 2720 const a = Math.floor(Math.random() * 10) + 1; 2721 const b = Math.floor(Math.random() * 10) + 1; 2722 const answer = a + b; 2723 2724 // show question in the label 2725 document.getElementById('captcha-ques').innerText = `What is ${a} + ${b}?`; 2726 // store correct answer in dataset 2727 document.getElementById('captcha-ques').dataset.answer = answer; 2728 } 2729 2730 function showModal(placeId) { 2731 // document.getElementById("modalPhoneNumber").innerText = phone; 2732 //alert(placeId) 2733 // Show Bootstrap Modal 2734 generateCaptchas(); 2735 document.getElementById("place_id").value = placeId; 2736 var myModal = new bootstrap.Modal(document.getElementById('phoneModal')); 2737 myModal.show(); 2738 2739 2740 2741 // Send AJAX request to track the click 2742 //var xhr = new XMLHttpRequest(); 2743 //xhr.open("POST", 'https://addyp.com/update_click_count.php', true); 2744 //xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 2745 //xhr.send("place_id=" + encodeURIComponent(placeId)); 2746 } 2747 </script>
2747 2748
2748<script type="5be3242ed37c14fc3d069643-text/javascript"> 2749 2750 2751 let correctCaptcha = 0; 2752 function sendMessage() { 2753 var message = document.getElementById("messageText").value; 2754 var placeId = document.getElementById("place_id").value; 2755 var correctAnswer = parseInt(document.getElementById('captcha-ques').dataset.answer); 2756 var userAnswer = parseInt(document.getElementById('captcha-ans').value); 2757 2758 if (message.trim() === "") { 2759 alert("Please enter a Email or Phone."); 2760 return; 2761 } 2762 if (isNaN(userAnswer) || userAnswer !== correctAnswer) { 2763 alert("Captcha incorrect! Please try again."); 2764 document.getElementById('captcha-ans').value = ''; 2765 generateCaptchas(); // regenerate captcha 2766 return; 2767 } 2768 2769 2770 2771 // Send AJAX request to save the message 2772 var xhr = new XMLHttpRequest(); 2773 xhr.open("POST", "https://addyp.com/send_enquiry.php", true); 2774 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 2775 xhr.send("place_id=" + encodeURIComponent(placeId) + "&message=" + encodeURIComponent(message)); 2776 2777 // Close the modal after sending 2778 2779 2780 // Clear the textarea 2781 document.getElementById("messageText").value = ""; 2782 document.getElementById("place_id").value = ""; 2783 2784 //alert("Message sent successfully!"); 2785 // Close the modal properly 2786 $("#phoneModal").hide(); 2787 location.reload(); 2788 2789 2790 // Clear the textarea 2791 2792 } 2793 </script>
2793 2794 2795 2796 2797 <!-- modal contact user --> 2798<div id="contact-user-modal" class="modal fade" tabindex="-1" role="dialog"> 2799 <div class="modal-dialog" role="document"> 2800 <div class="modal-content"> 2801 <div class="modal-header"> 2802 <h5 class="modal-title"> 2803 Get Quote </h5> 2804 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 2805 <span aria-hidden="true">×</span> 2806 </button> 2807 </div> 2808 <div class="modal-body"> 2809 <div class="mb-3"> 2810 <!--<div><strong>Phone</strong></div> 2811 <a href="tel:<?//= !empty($country_code) ? '+' . $country_code : '' ?><?//= preg_replace("/[^0-9]/", "", $area_code) ?><?//= preg_replace("/[^0-9]/", "", $phone) ?>" class="btn btn-light"> 2812 <strong><i class="las la-phone"></i> 2813 +<?//= $country_code ?> 2814 <?//= !empty($area_code) ? '(' . $area_code . ')' : '' ?> 2815 <?//= $phone ?> 2816 </strong> 2817 </a> --> 2818 </div> 2819 2820 2821 <div id="contact-user-result"></div> 2822 <form id="contact-user-form" method="post"> 2823 <input type="hidden" name="place_id" value="478984"> 2824 <input type="hidden" name="from_page" value="listing"> 2825 <input type="hidden" name="listing_url" value="https://addyp.com/listing/rajasthan/jaipur/others/savra-suit-shop-in-jaipur"> 2826 2827 <div class="form-group"> 2828 <input type="text" id="sender_name" class="form-control" name="sender_name" placeholder="Name" required> 2829 </div> 2830 2831 <div class="form-group"> 2832 <input type="email" id="sender_email" class="form-control" name="sender_email" placeholder="Email" required> 2833 </div> 2834 2835 <div class="form-group"> 2836 <input type="tel" id="sender_whatsapp" class="form-control" name="sender_whatsapp" placeholder="WhatsApp number (optional)"> 2837 <small class="form-text text-muted">Optional - so we can follow up and ask how it went.</small> 2838 </div> 2839 2840 <div class="form-group"> 2841 <textarea id="sender_msg" class="form-control" name="sender_msg" rows="5" placeholder="Message" required></textarea> 2842 </div> 2843 <div class="form-group text-center"> 2844 <label id="captcha-question"></label> 2845 <input type="text" class="form-control text-center" id="captcha-answer" name="captcha_answer" placeholder="Enter answer" required> 2846 </div> 2847 </form> 2848 </div> 2849 <div class="modal-footer"> 2850 <button type="button" id="contact-user-close" class="btn btn-light" data-dismiss="modal">Close</button> 2851 <button type="button" id="contact-user-cancel" class="btn btn-secondary" data-dismiss="modal">Cancel</button> 2852 <button type="submit" id="contact-user-submit" class="btn btn-primary">Submit</button> 2853 </div> 2854 </div> 2855 </div> 2856</div>
2857<script type="5be3242ed37c14fc3d069643-text/javascript"> 2858function generateCaptcha() { 2859 const a = Math.floor(Math.random() * 10) + 1; 2860 const b = Math.floor(Math.random() * 10) + 1; 2861 const answer = a + b; 2862 $('#captcha-question').text(`What is ${a} + ${b} ?`); 2863 $('#captcha-question').data('answer', answer); 2864} 2865 2866// generate on modal open 2867$('#contact-user-modal').on('shown.bs.modal', generateCaptcha); 2868 2869</script>
2869<!-- modal request callback --> 2870<div id="request-callback-modal" class="modal fade" tabindex="-1" role="dialog"> 2871 <div class="modal-dialog" role="document"> 2872 <div class="modal-content"> 2873 <div class="modal-header"> 2874 <h5 class="modal-title">Request a Callback</h5> 2875 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 2876 <span aria-hidden="true">×</span> 2877 </button> 2878 </div> 2879 <div class="modal-body"> 2880 <p class="text-muted">Leave your name and number - the business will call you back.</p> 2881 <div id="request-callback-result"></div> 2882 <form id="request-callback-form"> 2883 <input type="hidden" name="place_id" value="478984"> 2884 <div class="form-group"> 2885 <input type="text" id="callback-name" class="form-control" name="name" placeholder="Name" required> 2886 </div> 2887 <div class="form-group"> 2888 <input type="tel" id="callback-phone" class="form-control" name="phone" placeholder="Phone number" required> 2889 </div> 2890 </form> 2891 </div> 2892 <div class="modal-footer"> 2893 <button type="button" class="btn btn-light" data-dismiss="modal">Close</button> 2894 <button type="button" id="request-callback-submit" class="btn btn-primary">Request Callback</button> 2895 </div> 2896 </div> 2897 </div> 2898</div>
2899<script type="5be3242ed37c14fc3d069643-text/javascript"> 2900(function () { 2901 var $ = window.jQuery; 2902 if (!$) { return; } 2903 2904 $('#request-callback-submit').on('click', function () { 2905 var $btn = $(this); 2906 var name = $('#callback-name').val(); 2907 var phone = $('#callback-phone').val(); 2908 2909 if (!name || !phone) { 2910 $('#request-callback-result').html('<div class="alert alert-danger">Please enter your name and phone number.</div>'); 2911 return; 2912 } 2913 2914 $btn.prop('disabled', true).text('Sending...'); 2915 2916 $.ajax({ 2917 url: 'https://addyp.com/request-callback.php', 2918 type: 'POST', 2919 contentType: 'application/json', 2920 data: JSON.stringify({ 2921 place_id: $('#request-callback-form input[name="place_id"]').val(), 2922 name: name, 2923 phone: phone 2924 }), 2925 success: function (res) { 2926 $btn.prop('disabled', false).text('Request Callback'); 2927 if (res.status === 'success') { 2928 $('#request-callback-result').html('<div class="alert alert-success">Thanks! The business will call you back soon.</div>'); 2929 $('#request-callback-form')[0].reset(); 2930 $('#request-callback-form, #request-callback-submit').hide(); 2931 } else { 2932 $('#request-callback-result').html('<div class="alert alert-danger">' + (res.message || 'Something went wrong.') + '</div>'); 2933 } 2934 }, 2935 error: function () { 2936 $btn.prop('disabled', false).text('Request Callback'); 2937 $('#request-callback-result').html('<div class="alert alert-danger">Server error. Please try again.</div>'); 2938 } 2939 }); 2940 }); 2941 2942 $('#request-callback-modal').on('hidden.bs.modal', function () { 2943 $('#request-callback-result').empty(); 2944 $('#request-callback-form')[0].reset(); 2945 $('#request-callback-form, #request-callback-submit').show(); 2946 }); 2947})(); 2948</script>
2948 2949 2950
2950<script type="5be3242ed37c14fc3d069643-text/javascript"> 2951 (function () { 2952 function trackClick(placeId, clickType, detail) { 2953 var payload = JSON.stringify({ place_id: placeId, click_type: clickType, detail: detail || null }); 2954 if (navigator.sendBeacon) { 2955 navigator.sendBeacon('https://addyp.com/track-click.php', new Blob([payload], { type: 'application/json' })); 2956 } else { 2957 fetch('https://addyp.com/track-click.php', { method: 'POST', body: payload, keepalive: true }); 2958 } 2959 2960 // mirror the same click to GA4 - the base gtag() tag is 2961 // already installed site-wide via the custom footer 2962 // script field (footer_content.data_footer, echoed in 2963 // templates/footer-child.php), it just had no event 2964 // wiring beyond automatic pageviews until now, despite 2965 // these lead-relevant clicks already being tracked 2966 // server-side (track-click.php) 2967 if (typeof gtag === 'function') { 2968 gtag('event', 'lead_click', { 2969 click_type: clickType, 2970 place_id: placeId 2971 }); 2972 } 2973 } 2974 2975 document.addEventListener('click', function (e) { 2976 var el = e.target.closest('[data-click-track]'); 2977 if (el) { 2978 trackClick(el.getAttribute('data-click-place'), el.getAttribute('data-click-track'), el.getAttribute('data-click-detail')); 2979 return; 2980 } 2981 2982 var groupEl = e.target.closest('[data-click-track-group] a'); 2983 var group = e.target.closest('[data-click-track-group]'); 2984 if (groupEl && group) { 2985 trackClick(group.getAttribute('data-click-place'), group.getAttribute('data-click-track-group'), groupEl.getAttribute('data-click-detail')); 2986 } 2987 }); 2988 })(); 2989 </script>
2989 2990 2991 <!-- whatsapp floating button --> 2992 <style> 2993 .float { 2994 position: fixed; 2995 width: 60px; 2996 height: 60px; 2997 bottom: 40px; 2998 right: 40px; 2999 background-color: #25d366; 3000 color: #FFF; 3001 border-radius: 50px; 3002 text-align: center; 3003 box-shadow: 2px 2px 3px #999; 3004 z-index: 100; 3005 } 3006 3007 3008 .my-float { 3009 margin-top: 10px; 3010 font-size: 2.5rem; 3011 vertical-align: middle; 3012 } 3013 </style> 3014 3015<div class="container"> 3016 <!-- Banner Container start --> 3017 3018 3019 3020 <div id="banner-ads-container"> 3021 <div class="banner ad-container" id="banner1" data-ad-id="11" data-type="coupons"> 3022 <a href="https://cloudbizerp.com/erp-for-growing-businesses/" target="_blank"> 3023 <img loading="lazy" src="https://addyp.com/admin/ad-tmp/698976d632f2c.jpg" 3024 class="ads-img-desktop" alt="ERP"> 3025 <img loading="lazy" src="https://addyp.com/admin/ad-tmp/698976db28ae0-mob.jpg" 3026 class="ads-img-mobile" alt="ERP"> 3027 </a> 3028 </div> 3029 <div class="banner ad-container" id="banner1" data-ad-id="10" data-type="coupons"> 3030 <a href="https://hostinger.in?REFERRALCODE=1JAISON33" target="_blank"> 3031 <img loading="lazy" src="https://addyp.com/admin/ad-tmp/69770b637fcea.jpg" 3032 class="ads-img-desktop" alt="ResellerHosting"> 3033 <img loading="lazy" src="https://addyp.com/admin/ad-tmp/69770b68a1e03-mob.jpg" 3034 class="ads-img-mobile" alt="ResellerHosting"> 3035 </a> 3036 </div> 3037 </div> 3038 3039
3039<script type="5be3242ed37c14fc3d069643-text/javascript"> 3040 // Function to randomly show a banner ad 3041 function showRandomBanner() { 3042 const banners = document.querySelectorAll('.banner'); 3043 const randomIndex = Math.floor(Math.random() * banners.length); 3044 3045 // Hide all banners 3046 banners.forEach(banner => { 3047 banner.style.display = 'none'; 3048 }); 3049 3050 // Show the random banner 3051 banners[randomIndex].style.display = 'block'; 3052 } 3053 3054 // Show a random banner when the page loads 3055 window.onload = function () { 3056 showRandomBanner(); // Show random banner immediately on page load 3057 3058 // Change banner every 10 seconds 3059 setInterval(showRandomBanner, 10000); 3060 }; 3061 </script>
3061 3062 <!-- Banner Container end --> 3063 </div> 3064 <!-- new row --> 3065 3066 <!-- Similar Listings --> 3067 3068 <!-- Featured Listings --> 3069 3070 3071 <div class="container my-5"> 3072 <div class="d-flex justify-content-center"> 3073 <h2>Premium Business Listings</h2> 3074 </div> 3075 </div> 3076 3077 <div class="container position-relative mb-2"> 3078 <div id="featured-listings" class="splide"> 3079 <div class="splide__arrows"> 3080 <button class="splide__arrow splide__arrow--prev"> 3081 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" 3082 xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3083 viewBox="0 0 66.91 122.88" style="enable-background:new 0 0 66.91 122.88" 3084 xml:space="preserve" class="filter-shadow"> 3085 <g> 3086 <path 3087 d="M1.95,111.2c-2.65,2.72-2.59,7.08,0.14,9.73c2.72,2.65,7.08,2.59,9.73-0.14L64.94,66l-4.93-4.79l4.95,4.8 c2.65-2.74,2.59-7.11-0.15-9.76c-0.08-0.08-0.16-0.15-0.24-0.22L11.81,2.09c-2.65-2.73-7-2.79-9.73-0.14 C-0.64,4.6-0.7,8.95,1.95,11.68l48.46,49.55L1.95,111.2L1.95,111.2L1.95,111.2z" /> 3088 </g> 3089 </svg> 3090 </button> 3091 <button class="splide__arrow splide__arrow--next"> 3092 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" 3093 xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3094 viewBox="0 0 66.91 122.88" style="enable-background:new 0 0 66.91 122.88" 3095 xml:space="preserve" class="filter-shadow"> 3096 <g> 3097 <path 3098 d="M1.95,111.2c-2.65,2.72-2.59,7.08,0.14,9.73c2.72,2.65,7.08,2.59,9.73-0.14L64.94,66l-4.93-4.79l4.95,4.8 c2.65-2.74,2.59-7.11-0.15-9.76c-0.08-0.08-0.16-0.15-0.24-0.22L11.81,2.09c-2.65-2.73-7-2.79-9.73-0.14 C-0.64,4.6-0.7,8.95,1.95,11.68l48.46,49.55L1.95,111.2L1.95,111.2L1.95,111.2z" /> 3099 </g> 3100 </svg> 3101 </button> 3102 </div> 3103 3104 <div class="splide__track"> 3105 <div class="splide__list"> 3106 <div class="splide__slide"> 3107 <div class="card mb-4 bg-low-contrast-blue"> 3108 <div class="card-img-container mb-2"> 3109 <a href="https://addyp.com/listing/kerala/thodupuzha/seo-services/priority-bulk-sms"> 3110 <img loading="lazy" class="" alt="Get Do Follow Quality Backlinks" 3111 src="https://addyp.com/pictures/logo/67/671745315d538.jpeg"> 3112 </a> 3113 3114 <div class="cat-name-figure rounded p-2">SEO Company</div> 3115 </div> 3116 3117 <div class="card-body"> 3118 <div class="d-flex flex-column"> 3119 <div class="flex-grow-1"> 3120 <h5 class="mb-0"><a 3121 href="https://addyp.com/listing/kerala/thodupuzha/seo-services/priority-bulk-sms">Get Do Follow Quality Backlinks</a> 3122 </h5> 3123 <span>Thodupuzha, Kerala, India</span> 3124 <br><span>Thodupuzha, Ker</span> 3125 <br> 3126 <div class="item-rating" data-rating="0.00"> 3127 </div> 3128 </div> 3129 3130 </div> 3131 </div> 3132 </div> 3133 </div> 3134 <div class="splide__slide"> 3135 <div class="card mb-4 bg-low-contrast-blue"> 3136 <div class="card-img-container mb-2"> 3137 <a href="https://addyp.com/listing/kerala/thodupuzha/website-development/dynamic-website"> 3138 <img loading="lazy" class="" alt="Dynamic Website Development" 3139 src="https://addyp.com/pictures/logo/67/6717450a0e8af.jpeg"> 3140 </a> 3141 3142 <div class="cat-name-figure rounded p-2">Website Development</div> 3143 </div> 3144 3145 <div class="card-body"> 3146 <div class="d-flex flex-column"> 3147 <div class="flex-grow-1"> 3148 <h5 class="mb-0"><a 3149 href="https://addyp.com/listing/kerala/thodupuzha/website-development/dynamic-website">Dynamic Website Development</a> 3150 </h5> 3151 <span>Thodupuzha, Kerala, India</span> 3152 <br><span>Thodupuzha, Ker</span> 3153 <br> 3154 <div class="item-rating" data-rating="5.00"> 3155 </div> 3156 </div> 3157 3158 </div> 3159 </div> 3160 </div> 3161 </div> 3162 </div> 3163 </div> 3164 </div> 3165 </div> 3166 3167 <!-- Latest Listings --> 3168
3168<script type="5be3242ed37c14fc3d069643-text/javascript"> 3169 3170 /*-------------------------------------------------- 3171 Carousel 3172 --------------------------------------------------*/ 3173 3174 document.addEventListener('DOMContentLoaded', function () { 3175 // #featured-listings only renders when $featured_listings is non-empty 3176 // (see the PHP `if (!empty($featured_listings))` block above) - guard 3177 // against initializing Splide with no matching element on listings 3178 // that have none. 3179 if (!document.querySelector('#featured-listings')) return; 3180 var $carousel = new Splide('#featured-listings', { 3181 type: 'loop', 3182 loop: true, 3183 perPage: 3, 3184 perMove: 1, 3185 gap: 30, 3186 autoplay: true, 3187 interval: 1000, 3188 pagination: false, 3189 waitForTransition: false, 3190 speed: 1600, 3191 breakpoints: { 3192 0: { 3193 perPage: 1, 3194 }, 3195 577: { 3196 perPage: 1 3197 }, 3198 769: { 3199 perPage: 2 3200 }, 3201 1000: { 3202 perPage: 3, 3203 }, 3204 1536: { 3205 perPage: 4, 3206 }, 3207 1920: { 3208 perPage: 5, 3209 }, 3210 2560: { 3211 perPage: 6, 3212 } 3213 } 3214 }); 3215 3216 $carousel.mount(); 3217 }); 3218 3219 // make all cards in the carousel have the equal height 3220 document.addEventListener('DOMContentLoaded', function () { 3221 var maxHeight = 0; 3222 3223 // find tallest card 3224 $('.splide__list .card').each(function () { 3225 var thisH = $(this).height(); 3226 if (thisH > maxHeight) { maxHeight = thisH; } 3227 }); 3228 3229 // apply height to all cards 3230 $('.splide .card').each(function () { 3231 $(this).height(maxHeight); 3232 }); 3233 }); 3234 </script>
3234 3235 3236 3237 3238 <!-- footer --> 3239 <footer> 3240 <div class=" footerSty"> 3241 3242 <div class="container p-4" style="max-width: 1200px; margin: auto; font-size: 14px; line-height: 1.6;"> 3243 <!-- Business Listing Description --> 3244 <!-- Replace with dynamic content --> 3245 </div> 3246 3247 3248 <!-- Banner Graphic --> 3249 <div class="bannerft"> 3250 Stay Connected with addyp.com </div> 3251 3252 <div class="container"> 3253 <div class="footer-container"> 3254 3255 <div class="footer-section footer-logo"> 3256 3257 3258 <!-- Logo & Address (Left Aligned) --> 3259 <div class="logo1 address"> 3260 <img src="/assets/imgs/logo.png" alt="addyp.com Logo"> 3261 <p>Global Business Directory</p> 3262 3263 <div class="social-icons"> 3264 <a href="https://www.facebook.com/FreeBusinessDirectoryAddYP" aria-label="Facebook"> 3265 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 12a10 10 0 1 0-11.5 9.9v-7H8v-3h2.5V9.5A3.5 3.5 0 0 1 14 6h3v3h-2a1 1 0 0 0-1 1V12h3l-.5 3h-2.5v7A10 10 0 0 0 22 12Z"/></svg> 3266 </a> 3267 <a href="https://twitter.com/Bharath_Listing?t=3ho5De-nPx3p69gXqWD4cw&s=08 " aria-label="Twitter"> 3268 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22.46 6c-.77.35-1.6.58-2.46.69a4.15 4.15 0 0 0 1.82-2.29 8.27 8.27 0 0 1-2.63 1 4.13 4.13 0 0 0-7 3.77A11.7 11.7 0 0 1 3.16 4.9a4.13 4.13 0 0 0 1.28 5.51 4.07 4.07 0 0 1-1.87-.52v.05a4.13 4.13 0 0 0 3.31 4 4.1 4.1 0 0 1-1.86.07 4.13 4.13 0 0 0 3.85 2.86A8.29 8.29 0 0 1 2 19.54 11.7 11.7 0 0 0 8.29 21c7.55 0 11.68-6.26 11.68-11.68 0-.18-.01-.36-.02-.54A8.36 8.36 0 0 0 22.46 6Z"/></svg> 3269 </a> 3270 <a href="https://www.instagram.com/_addyp_global/ " aria-label="Instagram"> 3271 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 2C4.24 2 2 4.24 2 7v10c0 2.76 2.24 5 5 5h10c2.76 0 5-2.24 5-5V7c0-2.76-2.24-5-5-5H7Zm10 2c1.65 0 3 1.35 3 3v10c0 1.65-1.35 3-3 3H7c-1.65 0-3-1.35-3-3V7c0-1.65 1.35-3 3-3h10Zm-5 3a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0 2a3 3 0 1 1 0 6 3 3 0 0 1 0-6Zm4.5-2.75a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Z"/></svg> 3272 </a> 3273 <a href="https://www.linkedin.com/company/addyp-innovations-llp/ " aria-label="LinkedIn"> 3274 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4.98 3.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5ZM3 8.98h3.95V21H3zm7.5 0H14v1.65h.05c.48-.91 1.65-1.87 3.4-1.87 3.64 0 4.3 2.4 4.3 5.5V21h-3.95v-5.62c0-1.34-.03-3.07-1.87-3.07-1.88 0-2.17 1.47-2.17 3v5.69H10.5Z"/></svg> 3275 </a> 3276 </div> 3277 3278 3279 <p>âï¸ <a href="/cdn-cgi/l/email-protection#4d2e2c3f280d2c2929343d632e2220"><span class="__cf_email__" data-cfemail="d3b0b2a1b693b2b7b7aaa3fdb0bcbe">[email protected]</span></a></p> 3280 </div> 3281 </div> 3282 <!-- Quick Links --> 3283 <div class="footer-section "> 3284 <h3>Quick Links</h3> 3285 3286 3287 3288 <ul> 3289 <li> 3290 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3291 <a href="https://addyp.com/become-agency">Become an Agency</a> 3292 </li> 3293 <li> 3294 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3295 <a href="https://addyp.com/user/sign-in">Buy Leads</a> 3296 </li> 3297 <li> 3298 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3299 <a href="/post/privacy-policy"> 3300 Privacy Policy </a> 3301 </li> 3302 <li> 3303 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3304 <a href="/post/terms-of-use"> 3305 Terms of Use </a> 3306 </li> 3307 <li> 3308 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3309 <a href="/post/cancellation-and-refund"> 3310 Cancellation & Refund </a> 3311 </li> 3312 <li> 3313 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
3313<path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3314 <a href="/post/contact-us"> 3315 Contact Us </a> 3316 </li> 3317 <li> 3318 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3319 <a href="/post/about-us"> 3320 About Us </a> 3321 </li> 3322 <li> 3323 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3324 <a href="/post/guest-posting-link-insertion-services-on-addyp-network"> 3325 Guest Posting & Link Insertion </a> 3326 </li> 3327 <li> 3328 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Z"/></svg> 3329 <a href="/post/addyp-is-more-than-a-business-listing"> 3330 AddYP Is More Than a Business Listing </a> 3331 </li> 3332 3333 3334 </ul> 3335 </div> 3336 <div class="footer-section"> 3337 <h3>Browse by Country</h3> 3338 3339 <ul> 3340 <li><a href="https://addyp.com/country/united-states">United States</a></li> 3341 <li><a href="https://addyp.com/country/united-kingdom">United Kingdom</a></li> 3342 <li><a href="https://addyp.com/country/canada">Canada</a></li> 3343 <li><a href="https://addyp.com/country/australia">Australia</a></li> 3344 <li><a href="https://addyp.com/country/united-arab-emirates">UAE</a></li> 3345 <li><a href="https://addyp.com/country/singapore">Singapore</a></li> 3346 </ul> 3347</div> 3348 3349 <!-- Quick Links Section --> 3350<div class="footer-section"> 3351 <h3>How to Add?</h3> 3352 3353 <ul> 3354 <li style="display:flex;align-items:center;margin-bottom:8px;"> 3355 <i class="fa-solid fa-user-plus" style="color:#f5a623;font-size:15px;margin-right:10px;"></i> 3356 <a href="https://addyp.com/user/register">Register</a> 3357 </li> 3358 3359 <li style="display:flex;align-items:center;margin-bottom:8px;"> 3360 <i class="fa-solid fa-right-to-bracket" style="color:#f5a623;font-size:15px;margin-right:10px;"></i> 3361 <a href="https://addyp.com/user/sign-in">Sign In</a> 3362 </li> 3363 3364 <li style="display:flex;align-items:center;margin-bottom:8px;"> 3365 <i class="fa-solid fa-key" style="color:#f5a623;font-size:15px;margin-right:10px;"></i> 3366 <a href="https://addyp.com/user/forgot-password">Forgot Password</a> 3367 </li> 3368 3369 <li style="display:flex;align-items:center;margin-bottom:8px;"> 3370 <i class="fa-solid fa-envelope-circle-check" style="color:#f5a623;font-size:15px;margin-right:10px;"></i> 3371 <a href="https://addyp.com/user/resend-confirmation">Resend Confirmation Email</a> 3372 </li> 3373 </ul> 3374</div> 3375 3376 3377 <!-- Blog Section --> 3378 <div class="footer-section "> 3379 <h3>Blog</h3> 3380 3381 <ul> 3382 <li><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 4h16v2H4zm0 6h16v2H4zm0 6h10v2H4z"/></svg><a target=â_blankâ href="https://blog.addyp.com">Blog - addyp.com</a></li> 3383 </ul> 3384 </div> 3385 3386 3387 </div> 3388 </div> 3389 3390 <div class="copyright"> 3391 © 2026 addyp.com - All Rights Reserved 3392 </div> 3393 3394 <!-- Footer Section End --> 3395 </div> 3396 </footer> 3397 3398<a class="floating-since" href="/post/about-us">Since<span>2007</span></a> 3399<a class="floating-signup" href="/user/select-plan"><span>+ Add Your Business</span></a> 3400 3401<div> 3402 <div class="floating-pr-list d-none"> 3403 Create Do-Follow 3404 <a href='https://addyp.com/user/register'>AY</a><a href='https://bharathlisting.com/user/register'>BL</a><a 3405 href='https://wehelp.in/user/register'>WH</a> 3406 </div> 3407</div> 3408 3409 3410<a href="https://api.whatsapp.com/send?phone=919744768081&text=Hi%20there.%20I%20have%20a%20question%20about%20addyp.com" 3411 class="float-wa d-none" target="_blank"> 3412 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-whatsapp" 3413 viewBox="0 0 16 16"> 3414 <path 3415 d="M13.601 2.326A7.85 7.85 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.9 7.9 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.9 7.9 0 0 0 13.6 2.326zM7.994 14.521a6.6 6.6 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.56 6.56 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592m3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.73.73 0 0 0-.529.247c-.182.198-.691.677-.691 1.654s.71 1.916.81 2.049c.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058
34151.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232" /> 3416 </svg> 3417 <div><span>Happy to HELP</span> <em>Chat with us</em></div> 3418</a> 3419 3420 3421<!-- Floating WhatsApp Button --> 3422<a id="whatsapp-float" href="#" aria-label="Chat on WhatsApp" rel="noopener noreferrer" target="_blank"> 3423 <svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"> 3424 <path d="M20.52 3.48A11.86 11.86 0 0012 .5 11.86 11.86 0 003.48 3.48 11.86 11.86 0 00.5 12c0 2.02.53 3.9 1.53 5.58L.5 23.5l5-1.32A11.86 11.86 0 0012 23.5c3.18 0 6.15-1.24 8.52-3.52A11.86 11.86 0 0023.5 12c0-3.18-1.24-6.15-3.48-8.52zM12 21.5c-2.05 0-4-.63-5.65-1.72l-.38-.24-3 0.8.8-2.92-.25-.38A9.5 9.5 0 012.5 12 9.5 9.5 0 0112 2.5 9.5 9.5 0 0121.5 12 9.5 9.5 0 0112 21.5z" fill="currentColor"/> 3425 <path d="M17.3 14.2c-.3-.15-1.8-.9-2.05-1-.25-.1-.42-.15-.6.15s-.7 1-.85 1.2c-.15.2-.3.25-.55.1-.25-.15-1.05-.39-2-1.23-.74-.66-1.23-1.48-1.38-1.73-.15-.25-.02-.38.12-.5.12-.12.25-.3.38-.45.13-.15.17-.25.25-.42.08-.16.04-.3-.02-.45-.06-.15-.6-1.45-.82-1.98-.22-.5-.45-.43-.6-.44-.15-.02-.33-.02-.5-.02s-.45.06-.69.32c-.25.26-.95.93-.95 2.26s.97 2.61 1.1 2.8c.13.2 1.9 2.9 4.6 3.96 3.02 1.2 3.02.8 3.56.75.54-.05 1.75-.7 2-1.37.25-.67.25-1.25.18-1.37-.08-.12-.29-.2-.6-.35z" fill="#fff"/> 3426 </svg> 3427 3428 <div class="wa-text"> 3429 <strong>addyp.com</strong> 3430 <span>Chat with us</span> 3431 </div> 3432</a> 3433 3434<style> 3435 #whatsapp-float { 3436 position: fixed; 3437 left: 10px; 3438 bottom: 38px; 3439 display: flex; 3440 align-items: center; 3441 gap: 10px; 3442 background-color: #00ac40; 3443 color: #fff; 3444 font-family: Arial, sans-serif; 3445 padding: 10px 16px; 3446 border-radius: 15px; 3447 box-shadow: 0 6px 16px rgba(0,0,0,0.18); 3448 text-decoration: none; 3449 transition: all 0.2s ease-in-out; 3450 z-index: 99999; 3451 } 3452 3453 #whatsapp-float:hover { 3454 transform: translateY(-3px); 3455 background-color: #22c35e; 3456 box-shadow: 0 10px 20px rgba(0,0,0,0.22); 3457 } 3458 3459 #whatsapp-float svg { 3460 fill: #fff; 3461 flex-shrink: 0; 3462 } 3463 3464 .wa-text { 3465 line-height: 1.2; 3466 } 3467 3468 .wa-text strong { 3469 font-size: 13px; 3470 font-weight: bold; 3471 display: block; 3472 } 3473 3474 .wa-text span { 3475 font-size: 12px; 3476 opacity: 0.9; 3477 } 3478 3479 @media (max-width: 600px) { 3480 #whatsapp-float { 3481 font-size: 12px; 3482 padding: 8px 14px; 3483 } 3484 .wa-text strong { font-size: 12px; } 3485 .wa-text span { font-size: 11px;} 3486 } 3487</style>
vendor: 110 bytes, lines 3487-3489
3487 3488 3489<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
3489<script type="5be3242ed37c14fc3d069643-text/javascript"> 3490(function(){ 3491 var phone = "919744768081"; 3492 var defaultMessage = "Hi, I would like to know more about your services about addyp.com."; 3493 var encodedMessage = encodeURIComponent(defaultMessage); 3494 3495 document.getElementById('whatsapp-float').addEventListener('click', function(e){ 3496 e.preventDefault(); 3497 window.open("https://wa.me/" + phone + "?text=" + encodedMessage, '_blank', 'noopener'); 3498 }); 3499})(); 3500</script>
3500 3501 3502 3503 3504 3505 3506 3507<div class="mobile-buttons"> 3508 <a class="bg-warning text-dark" href="/user/select-plan"><i class="fa-solid fa-plus"></i> Add Business</a> 3509 3510</div> 3511<!-- external javascript -->
3512<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
vendor: 1 bytes, line 3512
3512
3513<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
vendor: 1 bytes, line 3513
3513
3514<script src="/templates/js/raty/jquery.raty.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
vendor: 1 bytes, line 3514
3514
3515<script src="https://addyp.com/assets/js/jquery-autocomplete/jquery.autocomplete.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
vendor: 1 bytes, line 3515
3515
3516<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.8/js/i18n/en.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
3516 3517 3518 3519<!--JAISON STRAT--> 3520<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 3520-3521
3520 3521<script async src="https://www.googletagmanager.com/gtag/js?id=
3521G-FC44FWRDBS
vendor: 61 bytes, line 3521
3521" type="5be3242ed37c14fc3d069643-text/javascript"></script>
3522<script type="5be3242ed37c14fc3d069643-text/javascript"> 3523
vendor: 138 bytes, lines 3523-3527
3523window.dataLayer = window.dataLayer || []; 3524 function gtag(){dataLayer.push(arguments);} 3525 gtag('js', new Date()); 3526 3527 gtag('config', '
3527G-FC44FWRDBS
vendor: 5 bytes, line 3527
3527');
3528</script>
3528 3529<!--JAISON END--> 3530 3531 3532 3533 3534 3535 3536<!-- Bootstrap Lightbox -->
3537<script src="https://addyp.com/templates/js/lightbox-master/dist/ekko-lightbox.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
3537 3538 3539<!-- SplideJS -->
3540<script src="https://addyp.com/templates/js/splide_2.4.21/splide.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
3540 3541 3542<!-- SplideJs Video Extension -->
3543<script src="https://addyp.com/templates/js/splide-extension-video_0.4.6/splide-extension-video.min.js" type="5be3242ed37c14fc3d069643-text/javascript"></script>
3543 3544
3545<script type="5be3242ed37c14fc3d069643-text/javascript"> 3546 3547 // on show modal 3548 $(document).ready(function() { 3549 $('#contact-user-modal').on('show.bs.modal', function(e) { 3550 $('#contact-user-submit').show(); 3551 $('#contact-user-close').hide(); 3552 $('#contact-user-cancel').show(); 3553 }); 3554 3555 // on hide modal 3556 $('#contact-user-modal').on('hide.bs.modal', function(e) { 3557 $('#contact-user-form').show(120); 3558 $('#contact-user-result').empty(); 3559 }); 3560 3561 // on submit 3562 $('#contact-user-submit').on('click', function(e) { 3563 e.preventDefault(); 3564 // check validity 3565 if ($('#contact-user-form')[0].checkValidity()) { 3566 const correctAnswer = $('#captcha-question').data('answer'); 3567 const userAnswer = parseInt($('#captcha-answer').val(), 10); 3568 if (userAnswer !== correctAnswer) { 3569 alert('Captcha incorrect! Please try again.'); 3570 $('#captcha-answer').val(''); 3571 generateCaptcha(); // refresh captcha 3572 return; 3573 } 3574 // vars 3575 var modal = $('#contact-user-modal'); 3576 var post_url = 'https://addyp.com/send-msg.php'; 3577 var spinner = '<i class="las la-spinner la-spin"></i> Wait'; 3578 3579 // spinner only - the form/buttons stay put until we know the 3580 // send actually succeeded (send-msg.php returns HTTP 200 even 3581 // when the mail itself fails, so hiding everything here 3582 // unconditionally left no way to retry on a failed send) 3583 $('#contact-user-result').show().html(spinner); 3584 $('#contact-user-submit').prop('disabled', true); 3585 3586 // post - a plain $.post() has no error/timeout handling, so a 3587 // slow SMTP send or dropped connection left the spinner stuck 3588 // on "Wait" forever with no way to retry (reported as "sending 3589 // not happening sometimes") 3590 $.ajax({ 3591 url: post_url, 3592 type: 'POST', 3593 data: { params: $('#contact-user-form').serialize() }, 3594 timeout: 20000, 3595 success: function(data) { 3596 $('#contact-user-result').empty().html(data).fadeIn(); 3597 $('#contact-user-submit').prop('disabled', false); 3598 3599 if (data.indexOf('alert-success') !== -1) { 3600 $('#contact-user-form').hide(120); 3601 $('#contact-user-submit').hide(); 3602 $('#contact-user-cancel').hide(); 3603 $('#contact-user-close').show(); 3604 } 3605 }, 3606 error: function() { 3607 $('#contact-user-result').empty().html('<div class="alert alert-danger">Something went wrong. Please try again.</div>').fadeIn(); 3608 $('#contact-user-submit').prop('disabled', false); 3609 } 3610 }); 3611 } else { 3612 $('#contact-user-form')[0].reportValidity(); 3613 } 3614 }); 3615}); 3616/*-------------------------------------------------- 3617Add to Favorites 3618--------------------------------------------------*/ 3619(function(){ 3620 $('.add-to-favorites').on('click', function(e){ 3621 window.location.href = 'https://addyp.com/user/sign-in'; 3622 }); 3623}()); 3624 3625/*-------------------------------------------------- 3626Lightbox 3627--------------------------------------------------*/ 3628(function(){ 3629 $(document).delegate('*[data-toggle="lightbox"]', 'click', function(event) { 3630 event.preventDefault(); 3631 $(this).ekkoLightbox(); 3632 }); 3633}()); 3634 3635/*-------------------------------------------------- 3636Carousel 3637--------------------------------------------------*/ 3638 3639/*-------------------------------------------------- 3640Rating 3641--------------------------------------------------*/ 3642(function(){ 3643 $('.item-rating').raty({ 3644 readOnly: true, 3645 score: function() { 3646 return this.getAttribute('data-rating'); 3647 }, 3648 hints: ['bad', 'poor', 'regular', 'good', 'gorgeous'], 3649 starType: 'i' 3650 }); 3651 3652 $('.review-rating').raty({ 3653 readOnly: true, 3654 score: function() { 3655 return this.getAttribute('data-rating'); 3656 }, 3657 hints: ['bad', 'poor', 'regular', 'good', 'gorgeous'], 3658 starType: 'i' 3659 }); 3660 3661 $('.raty').raty({ 3662 scoreName: 'review_score', 3663 target : '#hint', 3664 targetKeep : true, 3665 hints: ['bad', 'poor', 'regular', 'good', 'gorgeous'], 3666 starType: 'i' 3667 }); 3668}()); 3669 3670/*-------------------------------------------------- 3671Review 3672--------------------------------------------------*/ 3673(function(){ 3674 $('#submit-review').on('click', function() { 3675 var place_id = $('#place_id').val(); 3676 var place_name = $('#place_name').val(); 3677 var place_slug = $('#place_slug').val(); 3678 var place_city_slug = $('#place_city_slug').val(); 3679 var place_city_id = $('#place_city_id').val(); 3680 var review_score = $('input[name=review_score]').val(); 3681 var review = $('#review').val();
3682 var url = 'https://addyp.com/process-review.php'; 3683 3684 // rating check 3685 if (!review_score || review_score == 0) { 3686 $('#err-msg').text('Please select a rating').css('color', 'red'); 3687 return false; 3688 } 3689 3690 // review text check 3691 if (review === '') { 3692 $('#err-msg').text('Please enter your review').css('color', 'red'); 3693 return false; 3694 } 3695 3696 // clear hint if valid 3697 $('#err-msg').text(''); 3698 // post 3699 $.post(url, { 3700 place_id: place_id, 3701 place_name: place_name, 3702 place_slug: place_slug, 3703 place_city_slug: place_city_slug, 3704 place_city_id: place_city_id, 3705 review_score: review_score, 3706 review: review 3707 }, function(data) { 3708 $('#review-form').fadeOut(); 3709 var current_user_name = "Guest"; 3710 // â create new review HTML 3711 var newReview = ` 3712 <div class="d-flex mb-3"> 3713 <div class="mr-3"> 3714 <img src="https://addyp.com/assets/imgs/blank.png" 3715 class="profile-thumb rounded-circle"> 3716 </div> 3717 3718 <div class="flex-grow-1"> 3719 <div class="mb-3"> 3720 <div style="line-height:1"> 3721 <a href="${baseurl}/profile" itemprop="url">${current_user_name} </a> 3722 </div> 3723 3724 <div style="line-height:1"> 3725 <span class="smallest text-muted"> 3726 ${new Date().toLocaleDateString()} 3727 </span> 3728 </div> 3729 3730 <div class="review-rating" data-rating="${review_score}"></div> 3731 </div> 3732 3733 <div>${review}</div> 3734 </div> 3735 </div> 3736 <hr> 3737 `; 3738 3739 // â prepend (add to top) 3740 var $newItem = $(newReview); 3741 $('#reviews-list').prepend($newItem); 3742 3743 // â initialize ONLY this new rating 3744 $newItem.find('.review-rating').raty({ 3745 readOnly: true, 3746 score: function() { 3747 return $(this).attr('data-rating'); 3748 }, 3749 starType: 'i' // ð¥ THIS FIX 3750 }); 3751 // alert(data); 3752 var form_wrapper = $('#review-form-wrapper'); 3753 var alert_response = $('<div class="alert alert-success"></div>'); 3754 $(alert_response).text(data); 3755 $(alert_response).hide().appendTo(form_wrapper).fadeIn(); 3756 }); 3757 }); 3758}()); 3759 3760/*-------------------------------------------------- 3761Map 3762--------------------------------------------------*/ 3763(function(){ 3764 if($('#place-map-wrapper').length) { 3765 var mymap = L.map("place-map-canvas").setView([40.70528146, -74.04560001], 13); 3766 3767 L.tileLayer.provider("CartoDB", map_provider_options).addTo(mymap); 3768 3769 var marker = L.marker([40.70528146, -74.04560001]).addTo(mymap); 3770 } 3771}()); 3772 3773/*-------------------------------------------------- 3774Contact form 3775--------------------------------------------------*/ 3776// (function(){ 3777 3778// }()); 3779</script>
3779<script type="5be3242ed37c14fc3d069643-text/javascript"> 3780/*-------------------------------------------------- 3781Navbar 3782--------------------------------------------------*/ 3783(function(){ 3784 // select2 config 3785 $('#city-input').select2({ 3786 ajax: { 3787 url: 'https://addyp.com/_return_cities_select2.php', 3788 dataType: 'json', 3789 delay: 250, 3790 data: function (params) { 3791 return { 3792 query: params.term, 3793 page: params.page 3794 }; 3795 } 3796 }, 3797 escapeMarkup: function (markup) { return markup; }, 3798 minimumInputLength: 1, 3799 dropdownAutoWidth : true, 3800 placeholder: "City", 3801 allowClear: true, 3802 language: "en" 3803 }); 3804 3805 // change x mark and add event handler to clear cookies 3806 $('#city-input').on("select2:unselect", function(e) { 3807 delete_cookie('city_id'); 3808 }); 3809 3810 $('#city-input').on("select2:select", function(e) { 3811 $('.select2-selection__clear').empty().html('<i class="las la-times" aria-hidden="true"></i>'); 3812 }); 3813 3814 // add margin top in full screen mode 3815 if($(window).width() > 768) { 3816 // get header height 3817 var height = $('#header-nav').outerHeight(true); 3818 3819 // add margin equal to height 3820 $('#mainSearch').removeAttr('style').css({ 3821 "margin-top": height, 3822 "display": "none" 3823 }); 3824 } 3825 3826 // in mobile view.. 3827 else { 3828 // remove class fixed-top 3829 $('#mainSearch').removeClass().addClass('container-fluid p-2'); 3830 3831 // get header height 3832 var height = $('#header-nav').outerHeight(true); 3833 3834 // add margin equal to height 3835 $('#mainSearch').removeAttr('style').css({ 3836 "margin-top": height, 3837 "display": "none" 3838 }); 3839 3840 //$('#header-nav-dummy').hide(); 3841 } 3842 3843 // when clicking outside search form, hide search form 3844 $('#mainSearch').on('click', function(e) { 3845 e.stopPropagation(); 3846 }); 3847 3848 $(window).on('click', function(e) { 3849 if(e.target.type != 'search' && e.target.type != '') { 3850 $('#mainSearch').slideUp('fast'); 3851 } 3852 }); 3853 3854 // toggle search visibility 3855 $('#navbarBtnSearch').on('click', function(e) { 3856 // stop click propagation so that it doesn't bubble up and trigger a click on window which would hide the search 3857 e.stopPropagation(); 3858 3859 if($(window).width() < 769) { 3860 // add margin equal to height 3861 var height = $('#header-nav').outerHeight(true); 3862 var height_dummy = $('#header-nav-dummy').outerHeight(true); 3863 3864 height = height - height_dummy; 3865 console.log($('#mainSearch').attr('style')); 3866 3867 $('#mainSearch').removeAttr('style').css({ 3868 "margin-top": height, 3869 "display": "none" 3870 }); 3871 3872 //$('#header-nav-dummy').hide(); 3873 } 3874 3875 // toggle proper 3876 $('#mainSearch').slideToggle('fast'); 3877 }); 3878 3879 3880 }()); 3881 3882/*-------------------------------------------------- 3883Language selector 3884--------------------------------------------------*/ 3885(function(){ 3886 $('#language-selector select').on('change', function(e){ 3887 createCookie('user_language', $('#language-selector select').val(), 365); 3888 location.reload(true); 3889 }); 3890}()); 3891 3892 // Ad View and Click Tracking 3893function trackAdInteraction(adId, action, ty) { 3894 $.ajax({ 3895 url: 'https://addyp.com/admin/track-ad-view.php', 3896 method: 'POST', 3897 dataType: 'json', 3898 data: { 3899 ad_id: adId, 3900 type: ty, 3901 action: action 3902 }, 3903 error: function(xhr, status, error) { 3904 console.error('Ad ' + action + ' tracking failed:', error); 3905 } 3906 }); 3907} 3908 3909// Track views when ads are displayed 3910$(document).ready(function() { 3911 $('.ad-container:visible').each(function() { 3912 var adId = $(this).data('ad-id'); 3913 trackAdInteraction(adId, 'view', ''); 3914 }); 3915 3916 // Track clicks when ad is clicked 3917 $('.ad-container a').on('click', function() { 3918 var adId = $(this).closest('.ad-container').data('ad-id'); 3919 var ty= $(this).closest('.ad-container').data('type'); 3920 trackAdInteraction(adId, 'click', ty); 3921 }); 3922}); 3923</script>
3923 <div class="container"> 3924
3924<script async data-cfasync="false" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5057375154868360" 3925 crossorigin="anonymous"></script>
3925 3926<!-- OnlyFreePages --> 3927<ins class="adsbygoogle" 3928 style="display:block" 3929 data-ad-client="ca-pub-5057375154868360" 3930 data-ad-slot="5809592732" 3931 data-ad-format="auto" 3932 data-full-width-responsive="true"></ins>
3933<script type="5be3242ed37c14fc3d069643-text/javascript"> 3934 (adsbygoogle = window.adsbygoogle || []).push({}); 3935</script>
3935 3936 3937</div> 3938
3938<script async data-cfasync="false" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5057375154868360" 3939 crossorigin="anonymous"></script>
3939 3940<ins class="adsbygoogle" 3941 style="display:block" 3942 data-ad-client="ca-pub-5057375154868360" 3943 data-ad-slot="7139179524" 3944 data-ad-format="auto" 3945 data-full-width-responsive="true"></ins>
3946<script type="5be3242ed37c14fc3d069643-text/javascript"> 3947 (adsbygoogle = window.adsbygoogle || []).push({}); 3948</script>
3948 3949 3950 3951</body> 3952 3953</html> 3954
3955<script type="5be3242ed37c14fc3d069643-text/javascript"> 3956// document.addEventListener("DOMContentLoaded", function() { 3957// const city = "Jaipur"; 3958// const state = "Rajasthan"; 3959// const country = "India"; 3960 3961// // Build fallback locations array 3962// const locations = []; 3963// if(city && state && country) locations.push(`${city}, ${state}, ${country}`); 3964// if(state && country) locations.push(`${state}, ${country}`); 3965// if(country) locations.push(country); 3966 3967// if(locations.length === 0) { 3968// console.error('No location data available'); 3969// return; 3970// } 3971 3972// let index = 0; 3973 3974// function tryNextLocation() { 3975// if(index >= locations.length) { 3976// console.error('Location not found'); 3977// return; 3978// } 3979 3980// const loc = locations[index]; 3981// const url = `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(loc)}`; 3982 3983// fetch(url, { 3984// headers: { 'User-Agent': 'AddypApp/1.0 ([email protected])' } 3985// }) 3986// .then(response => response.json()) 3987// .then(data => { 3988// if(data.length > 0) { 3989// const lat = data[0].lat; 3990// const lon = data[0].lon; 3991 3992// // Initialize Leaflet map 3993// const map = L.map('map-canvas').setView([lat, lon], 13); 3994 3995// // Add OpenStreetMap tiles 3996// L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 3997// attribution: '© OpenStreetMap contributors' 3998// }).addTo(map); 3999 4000// // Add marker 4001// L.marker([lat, lon]) 4002// .addTo(map) 4003// .bindPopup(loc) 4004// .openPopup(); 4005// } else { 4006// index++; 4007// tryNextLocation(); // fallback to next 4008// } 4009// }) 4010// .catch(err => { 4011// console.error(err); 4012// index++; 4013// tryNextLocation(); // fallback to next on error 4014// }); 4015// } 4016 4017// tryNextLocation(); 4018// }); 4019 4020 4021document.addEventListener("DOMContentLoaded", async function() { 4022 // This entire handler exists to size/position the Leaflet map, so if 4023 // #map-canvas wasn't rendered on this listing there's nothing to do. 4024 if (!document.getElementById('map-canvas')) return; 4025 4026 const city = "Jaipur"; 4027 const state = "Rajasthan"; 4028 const country = "India"; 4029 const countryCode = ""; // match function param 4030 4031 // Build flexible fallback locations 4032 const locations = []; 4033 if (city && state && country) locations.push(`${city}, ${state}, ${country}`); 4034 if (city && country) locations.push(`${city}, ${country}`); 4035 if (city) locations.push(city); 4036 if (state && country) locations.push(`${state}, ${country}`); 4037 if (country) locations.push(country); 4038 4039 // Initialize map variable 4040 let map = L.map('map-canvas').setView([20.5937, 78.9629], 5); // Default India 4041 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 4042 attribution: '© OpenStreetMap contributors' 4043 }).addTo(map); 4044 4045 if (locations.length === 0) { 4046 console.warn("No location data available â showing default India map"); 4047 return; 4048 } 4049 4050 // Try the almost-match first 4051 const bestMatch = await checkAlmostMatch({ 4052 country, 4053 countryCode, 4054 state, 4055 city 4056 }); 4057 if (bestMatch) { 4058 console.log("â Almost match found:", bestMatch);
4059 map.setView([bestMatch.lat, bestMatch.lon], 13); 4060 L.marker([bestMatch.lat, bestMatch.lon]) 4061 .addTo(map) 4062 .bindPopup(`${bestMatch.city || ""}, ${bestMatch.state || ""}, ${country}`) 4063 .openPopup(); 4064 return; // stop further fallback 4065 } 4066 4067 // Fallback search 4068 let index = 0; 4069 4070 function tryNextLocation() { 4071 if (index >= locations.length) { 4072 console.error("Location not found in all fallbacks"); 4073 return; 4074 } 4075 4076 const loc = locations[index]; 4077 const url = `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(loc)}`; 4078 4079 fetch(url, { 4080 headers: { 4081 "User-Agent": "AddypApp/1.0 ([email protected])" 4082 } 4083 }) 4084 .then(response => response.json()) 4085 .then(data => { 4086 if (data.length > 0) { 4087 const lat = data[0].lat; 4088 const lon = data[0].lon; 4089 console.log(`â Found location for "${loc}":`, lat, lon); 4090
4091 map.setView([lat, lon], 13); 4092 L.marker([lat, lon]) 4093 .addTo(map) 4094 .bindPopup(loc) 4095 .openPopup(); 4096 } else { 4097 index++; 4098 tryNextLocation(); // try next fallback 4099 } 4100 }) 4101 .catch(err => { 4102 console.error("Error fetching location:", err); 4103 index++; 4104 tryNextLocation(); 4105 }); 4106 } 4107 4108 tryNextLocation(); 4109}); 4110 4111// ----------------- checkAlmostMatch + analyzeMatches ----------------- 4112async function checkAlmostMatch({ 4113 country, 4114 countryCode, 4115 state, 4116 city 4117}) { 4118 4119 const url = `https://nominatim.openstreetmap.org/search? 4120format=json 4121&city=${encodeURIComponent(city)} 4122&state=${encodeURIComponent(state)} 4123&country=${encodeURIComponent(country)} 4124&countrycodes=${countryCode.toLowerCase()} 4125&addressdetails=1 4126&limit=5`; 4127 4128 const res = await fetch(url, { 4129 headers: { 4130 "User-Agent": "AddypApp/1.0 ([email protected])" 4131 } 4132 }); 4133 4134 const results = await res.json(); 4135 if (!results.length) return null; 4136 4137 return analyzeMatches(results, { 4138 state, 4139 city 4140 }); 4141} 4142 4143function similarity(a, b) { 4144 a = a.toLowerCase(); 4145 b = b.toLowerCase(); 4146 let match = 0; 4147 for (let i = 0; i < Math.min(a.length, b.length); i++) { 4148 if (a[i] === b[i]) match++; 4149 } 4150 return match / Math.max(a.length, b.length); 4151} 4152 4153function analyzeMatches(results, input) { 4154 let best = null; 4155 let score = 0; 4156 4157 results.forEach(r => { 4158 const addr = r.address || {}; 4159 const sScore = addr.state ? similarity(input.state, addr.state) : 0; 4160 const cScore = addr.city || addr.town || addr.village ? 4161 similarity(input.city, addr.city || addr.town || addr.village) : 4162 0; 4163 4164 const totalScore = (sScore * 0.6) + (cScore * 0.4); 4165 4166 if (totalScore > score) { 4167 score = totalScore; 4168 best = { 4169 state: addr.state, 4170 city: addr.city || addr.town || addr.village, 4171 lat: r.lat, 4172 lon: r.lon, 4173 confidence: totalScore 4174 }; 4175 } 4176 }); 4177 4178 return score > 0.6 ? best : null; 4179} 4180</script>
4180 4181
4182<script type="5be3242ed37c14fc3d069643-text/javascript"> 4183function openCityMap() { 4184 const query = "Plot No 171 3, Haldighati Marg, opp. Mewar Appartment, Sanganer, Sector 17, Pratap Nagar,, Jaipur, Rajasthan, India"; 4185 const mapUrl = `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(query)}`; 4186 window.open(mapUrl, '_blank'); 4187} 4188</script>
vendor: 1 bytes, line 4188
4188
4189<script type="5be3242ed37c14fc3d069643-text/javascript"> 4190// Mobile-only JS fallback for the section nav bar's sticky-on-scroll 4191// behavior. Native `position: sticky` (used on desktop) can silently stop 4192// working here because a mobile-only rule sets `overflow-x: hidden` on 4193// html/body (to stop horizontal scroll bounce) - overflow other than 4194// `visible` on an ancestor is a well-known way to break position:sticky 4195// in real browsers, not just a DevTools emulation quirk. This toggles a 4196// fixed-position class manually instead, so it works regardless. 4197(function () { 4198 var navbar = document.getElementById('navbar-example2'); 4199 var spacer = document.getElementById('navbarSpacer'); 4200 if (!navbar || !spacer) { 4201 return; 4202 } 4203 4204 function isMobile() { 4205 return window.innerWidth <= 768; 4206 } 4207 4208 var stuckThreshold = null; 4209 4210 function updateStuckState() { 4211 if (!isMobile()) { 4212 navbar.classList.remove('js-stuck'); 4213 spacer.classList.remove('active'); 4214 stuckThreshold = null; 4215 return; 4216 } 4217 4218 if (stuckThreshold === null) { 4219 // Capture the nav's natural offset before it's ever fixed, 4220 // so re-measuring while already fixed doesn't return 0. 4221 stuckThreshold = navbar.classList.contains('js-stuck') 4222 ? stuckThreshold 4223 : navbar.getBoundingClientRect().top + window.scrollY; 4224 } 4225 4226 if (window.scrollY >= stuckThreshold) { 4227 if (!navbar.classList.contains('js-stuck')) { 4228 spacer.style.height = navbar.offsetHeight + 'px'; 4229 navbar.classList.add('js-stuck'); 4230 spacer.classList.add('active'); 4231 } 4232 } else { 4233 navbar.classList.remove('js-stuck'); 4234 spacer.classList.remove('active'); 4235 } 4236 } 4237 4238 window.addEventListener('scroll', updateStuckState, { passive: true }); 4239 window.addEventListener('resize', function () { 4240 stuckThreshold = null; 4241 updateStuckState(); 4242 }); 4243 updateStuckState(); 4244})(); 4245</script>
vendor: 1 bytes, line 4245
4245
4246<script type="application/ld+json">{ 4247 "@context": "https://schema.org", 4248 "@type": "FAQPage", 4249 "mainEntity": [ 4250 { 4251 "@type": "Question", 4252 "name": "What services does Savra - Suit Shop in Jaipur offer?", 4253 "acceptedAnswer": { 4254 "@type": "Answer", 4255 "text": "Savra - Suit Shop in Jaipur provides Others services in India. Contact the business directly to confirm specific requirements and availability." 4256 } 4257 }, 4258 { 4259 "@type": "Question", 4260 "name": "How can I contact Savra - Suit Shop in Jaipur?", 4261 "acceptedAnswer": { 4262 "@type": "Answer", 4263 "text": "You can contact Savra - Suit Shop in Jaipur using the phone number, WhatsApp, email, or website listed on this page." 4264 } 4265 }, 4266 { 4267 "@type": "Question", 4268 "name": "Where is Savra - Suit Shop in Jaipur located?", 4269 "acceptedAnswer": { 4270 "@type": "Answer", 4271 "text": "Savra - Suit Shop in Jaipur is located in Jaipur, Rajasthan. You can view the exact location on the map provided in this listing." 4272 } 4273 }, 4274 { 4275 "@type": "Question", 4276 "name": "What areas does Savra - Suit Shop in Jaipur serve?", 4277 "acceptedAnswer": { 4278 "@type": "Answer", 4279 "text": "Savra - Suit Shop in Jaipur serves india." 4280 } 4281 }, 4282 { 4283 "@type": "Question", 4284 "name": "Is Savra - Suit Shop in Jaipur open today?", 4285 "acceptedAnswer": { 4286 "@type": "Answer", 4287 "text": "Please check the opening hours section on this page, or call 9460192284 directly for confirmation." 4288 } 4289 }, 4290 { 4291 "@type": "Question", 4292 "name": "How long has Savra - Suit Shop in Jaipur been in business?", 4293 "acceptedAnswer": { 4294 "@type": "Answer", 4295 "text": "Savra - Suit Shop in Jaipur was established in 2002, giving it 24+ years of experience in the Others category." 4296 } 4297 }, 4298 { 4299 "@type": "Question", 4300 "name": "Is this listing on addyp.com free to use?", 4301 "acceptedAnswer": { 4302 "@type": "Answer", 4303 "text": "Yes, users can view details and contact businesses listed on addyp.com without any charges." 4304 } 4305 } 4306 ] 4307}</script>
vendor: 1 bytes, line 4307
4307
4308<script type="application/ld+json"> 4309{ 4310 "@context": "https://schema.org", 4311 "@type": "BreadcrumbList", 4312 "itemListElement": [{"@type":"ListItem","position":1,"name":"Home","item":"https://addyp.com"},{"@type":"ListItem","position":2,"name":"Rajasthan","item":"https://addyp.com/listings/rajasthan"},{"@type":"ListItem","position":3,"name":"Jaipur","item":"https://addyp.com/listings/rajasthan/jaipur"},{"@type":"ListItem","position":4,"name":"Others","item":"https://addyp.com/listings/rajasthan/jaipur/others"},{"@type":"ListItem","position":5,"name":"Savra - Suit Shop in Jaipur","item":"https://addyp.com/listing/rajasthan/jaipur/others/savra-suit-shop-in-jaipur"}]} 4313</script>
4313 4314
4315<script type="application/ld+json"> 4316 4317{ 4318 "@context": "https://schema.org", 4319 "@type": "LocalBusiness", 4320 "name": "Savra - Suit Shop in Jaipur", 4321 "url": "https://addyp.com/listing/rajasthan/jaipur/others/savra-suit-shop-in-jaipur", 4322"address": { 4323 "@type": "PostalAddress", 4324 "streetAddress": "Plot No 171 3, Haldighati Marg, opp. Mewar Appartment, Sanganer, Sector 17, Pratap Nagar,", 4325 "addressLocality": "Jaipur", 4326 "addressRegion": "Rajasthan", 4327 "addressCountry": "India" }, 4328 4329 "additionalType": "Others", 4330 4331 "review": []} 4332</script>
vendor: 1 bytes, line 4332
4332
4333<script type="5be3242ed37c14fc3d069643-text/javascript"> 4334$('#navbar-example2').on('activate.bs.scrollspy', function () { 4335 $('.jd-nav a.active')[0].scrollIntoView({ 4336 behavior: 'smooth', 4337 inline: 'center' 4338 }); 4339}); 4340$('body').scrollspy({ target: '#navbar-example2', offset: 70 }); 4341 4342$('.jd-nav a, .nav-link').on('click', function(e) { 4343 e.preventDefault(); 4344 4345 var target = $(this).attr('href'); 4346 4347 // Smooth scroll 4348 $('html, body').animate({ 4349 scrollTop: $(target).offset().top - 70 4350 }, 400); 4351 4352 // ð¥ FIX: update active class manually 4353 $('.jd-nav a, .nav-link').removeClass('active'); 4354 $(this).addClass('active'); 4355}); 4356$(document).ready(function() { 4357 window.scrollTo(0, 0); 4358}); 4359$(document).ready(function() { 4360 $('body').scrollspy('refresh'); 4361}); 4362$(window).on('scroll', function () { 4363 if ($(window).scrollTop() < 200) { 4364 $('.nav-link').removeClass('active'); 4365 $('.nav-link[href="#overview"]').addClass('active'); 4366 } 4367}); 4368</script>
4368 4369
4370<script type="5be3242ed37c14fc3d069643-text/javascript"> 4371document.addEventListener('DOMContentLoaded', function () { 4372 4373 const splideEl = document.querySelector('#services-slider'); 4374 if (!splideEl) return; 4375 4376 // REAL service count (not cloned slides) 4377 const slideCount = servicesData.length; 4378 4379 const isMobile = window.innerWidth <= 768; 4380 4381 let showArrows = false; 4382 4383 if (slideCount === 1) { 4384 4385 showArrows = false; 4386 4387 } else if (slideCount === 2) { 4388 4389 showArrows = isMobile; // only mobile 4390 4391 } else if (slideCount > 2) { 4392 4393 showArrows = true; 4394 4395 } 4396 4397 splideEl.classList.toggle('has-arrows', showArrows); 4398 4399 new Splide('#services-slider', { 4400 perPage: Math.min(2, slideCount), 4401 perMove: 1, 4402 gap: '20px', 4403 4404 type: slideCount > 2 ? 'loop' : 'slide', 4405 4406 arrows: showArrows, 4407 pagination: false, 4408 4409 breakpoints: { 4410 768: { 4411 perPage: 1 4412 } 4413 } 4414 4415 }).mount(); 4416 4417}); 4418</script>
vendor: 1 bytes, line 4418
4418
4419<script type="5be3242ed37c14fc3d069643-text/javascript"> 4420const servicesData = 4421[]; 4422</script>
4422 4423
4424<script type="5be3242ed37c14fc3d069643-text/javascript"> 4425// service_desc/product_desc are saved from a plain textarea (no rich-text 4426// editor), so line breaks in the stored value are literal "\n" characters, 4427// not <br> tags - a browser collapses those to a single space by default, 4428// which is why descriptions rendered as one run-on paragraph. Escaping 4429// first (via textContent, never trusting raw user input into innerHTML) 4430// then converting "\n" to <br> fixes both the formatting and a stored-HTML- 4431// injection gap in the previous innerHTML = description assignment. 4432function escapeAndFormatDescription(text) { 4433 text = text || ''; 4434 // some older/seeded descriptions already contain real HTML (<p>, <a>, 4435 // <br> from a past import) - render those as-is rather than 4436 // double-escaping and breaking their existing markup/links. Only 4437 // plain text (the current textarea's only output) gets escaped+ 4438 // line-broken here. 4439 if (/<[a-z][\s\S]*>/i.test(text)) { 4440 return text; 4441 } 4442 var div = document.createElement('div'); 4443 div.textContent = text; 4444 return div.innerHTML.replace(/\n/g, '<br>'); 4445} 4446 4447document.addEventListener('DOMContentLoaded',function(){ 4448 4449 const cards= document.querySelectorAll('.service-card'); 4450 4451 const popupTitle= document.getElementById('popupTitle'); 4452 4453 const popupText= document.getElementById('popupText'); 4454 4455 const popupImage= document.getElementById('popupImage'); 4456 4457 const popupYoutube= document.getElementById('popupYoutube'); 4458 4459 const popupPrice= document.getElementById('popupPrice'); 4460 const popupSerDetailsLink = document.getElementById('popupSerDetailsLink'); 4461 4462 let currentService=0; 4463 let currentImage=0; 4464 4465 4466 function showImage(){ 4467 4468 let service = servicesData[currentService]; 4469 4470 let imgPrev = document.getElementById('prevImg'); 4471 let imgNext = document.getElementById('nextImg'); 4472 let gallery = document.querySelector('.popup-gallery'); 4473 let popupImage = document.getElementById('popupImage'); 4474 4475 let totalImages = 4476 (service.photos && service.photos.length) 4477 ? service.photos.length 4478 : 0; 4479 4480 // ð´ No images â hide entire gallery 4481 if(totalImages === 0){ 4482 //gallery.style.display = 'none'; 4483 gallery.style.display = 'grid'; 4484 4485 imgPrev.style.display = 'none'; 4486 imgNext.style.display = 'none'; 4487 4488 gallery.style.gridTemplateColumns = '1fr'; 4489 popupImage.src = 'https://addyp.com/pictures/logo/6a/6ab4f3321a6e8.png'; 4490 return; 4491 } 4492 4493 // â Images exist â show gallery 4494 gallery.style.display = 'grid'; 4495 4496 if(totalImages === 1){ 4497 imgPrev.style.display = 'none'; 4498 imgNext.style.display = 'none'; 4499 gallery.style.gridTemplateColumns = '1fr'; 4500 } else { 4501 imgPrev.style.display = 'inline-block'; 4502 imgNext.style.display = 'inline-block'; 4503 gallery.style.gridTemplateColumns = '50px 1fr 50px'; 4504 } 4505 4506 popupImage.src = 4507 '/pictures/services/' + 4508 service.photos[currentImage]; 4509 } 4510 4511 4512 4513 function loadService(index){ 4514 4515 currentService=index; 4516 currentImage=0; 4517 4518 let service=servicesData[index]; 4519 4520 popupTitle.innerHTML=escapeAndFormatDescription(service.title); 4521 // description is already fully escaped/formatted server-side (see 4522 // listing.php's SEO entity-linking pass) - unlike title, it must 4523 // NOT go through escapeAndFormatDescription() again here, or its 4524 // real <a>/<strong> tags would get escaped into literal text 4525 popupText.innerHTML=service.description || ''; 4526 popupPrice.innerHTML = service.price 4527 ? "$" + Number(service.price).toLocaleString('en-IN') 4528 : ''; 4529 popupSerDetailsLink.href ='https://addyp.com/service/' +'savra-suit-shop-in-jaipur/' +service.service_slug; 4530 4531 showImage(); 4532 4533 4534 // Hide service prev/next if only one service 4535 let prevServiceBtn= 4536 document.getElementById('prevService'); 4537 4538 let nextServiceBtn= 4539 document.getElementById('nextService'); 4540 4541 if(servicesData.length <= 1){ 4542 4543 prevServiceBtn.style.display='none'; 4544 nextServiceBtn.style.display='none'; 4545 4546 }else{ 4547 4548 prevServiceBtn.style.display='inline-block'; 4549 nextServiceBtn.style.display='inline-block'; 4550 4551 } 4552 4553 4554 if(service.youtube_link){ 4555 let youtubeLink = service.youtube_link.trim(); 4556 4557 // Add https:// if missing 4558 if(!/^https?:\/\//i.test(youtubeLink)){ 4559 youtubeLink = 'https://' + youtubeLink; 4560 } 4561 popupYoutube.href = youtubeLink; 4562 popupYoutube.style.display='inline-block'; 4563 4564 }else{ 4565 4566 popupYoutube.style.display='none'; 4567 4568 } 4569 4570 } 4571 4572 4573 4574 /* click card opens modal */ 4575 cards.forEach(function(card){ 4576 4577 card.addEventListener('click',function(){ 4578 4579 let i = parseInt(this.dataset.index); 4580 4581 loadService(i); 4582 4583 $('#serviceModal').modal('show'); 4584 4585 }); 4586 4587 }); 4588 4589 4590 4591 document.getElementById('nextImg').onclick=function(){ 4592 4593 let total = servicesData[currentService].photos.length; 4594 4595 currentImage++; 4596 4597 if(currentImage>=total){ 4598 currentImage=0; 4599 } 4600 4601 showImage(); 4602 4603 }; 4604 4605 4606 4607 document.getElementById('prevImg').onclick=function(){ 4608 4609 let total= servicesData[currentService].photos.length; 4610 4611 currentImage--; 4612 4613 if(currentImage<0){ 4614 currentImage=total-1; 4615 } 4616 4617 showImage(); 4618 4619 }; 4620 4621 4622 4623 document.getElementById('nextService').onclick=function(){ 4624 4625 currentService++; 4626 4627 if(currentService>=servicesData.length){ 4628 currentService=0; 4629 } 4630 4631 loadService(currentService); 4632 4633 }; 4634 4635 4636 4637 document.getElementById('prevService').onclick=function(){ 4638 4639 currentService--; 4640 4641 if(currentService<0){ 4642 currentService= 4643 servicesData.length-1; 4644 } 4645 4646 loadService(currentService); 4647 4648 }; 4649 4650}); 4651 4652</script>
4652 4653
4654<script type="application/ld+json"> 4655{ 4656 "@context": "https://schema.org", 4657 "@type": "ItemList", 4658 "name": "Savra - Suit Shop in Jaipur Services", 4659 "itemListElement": [ 4660 ] 4661} 4662</script>
4662 4663 4664 4665
4666<script id="gk3p2c" type="5be3242ed37c14fc3d069643-text/javascript"> 4667const productsData = 4668[]; 4669</script>
4669 4670
4671<script id="2y6k7h" type="5be3242ed37c14fc3d069643-text/javascript"> 4672document.addEventListener('DOMContentLoaded', function () { 4673 4674 const splideEl = document.querySelector('#products-slider'); 4675 if (!splideEl) return; 4676 4677 const slideCount = productsData.length; 4678 const isMobile = window.innerWidth <= 768; 4679 4680 let showArrows = false; 4681 4682 if (slideCount === 1) { 4683 showArrows = false; 4684 } else if (slideCount === 2) { 4685 showArrows = isMobile; 4686 } else if (slideCount > 2) { 4687 showArrows = true; 4688 } 4689 4690 splideEl.classList.toggle('has-arrows', showArrows); 4691 4692 new Splide('#products-slider', { 4693 perPage: Math.min(2, slideCount), 4694 perMove: 1, 4695 gap: '20px', 4696 type: slideCount > 2 ? 'loop' : 'slide', 4697 arrows: showArrows, 4698 pagination: false, 4699 breakpoints: { 4700 768: { perPage: 1 } 4701 } 4702 }).mount(); 4703 4704}); 4705</script>
vendor: 1 bytes, line 4705
4705
4706<script id="n1f8qz" type="5be3242ed37c14fc3d069643-text/javascript"> 4707document.addEventListener('DOMContentLoaded', function () { 4708 4709 const cards = document.querySelectorAll('.product-card'); 4710 4711 const popupTitle = document.getElementById('productPopupTitle'); 4712 const popupText = document.getElementById('productPopupText'); 4713 const popupImage = document.getElementById('productPopupImage'); 4714 const popupPrice = document.getElementById('productPopupPrice'); 4715 const popupLink = document.getElementById('productPopupLink'); 4716 const popupDetailLink = document.getElementById('productDetailsLink'); 4717 4718 let currentProduct = 0; 4719 let currentImage = 0; 4720 4721 4722 // ========================= 4723 // SHOW IMAGE FUNCTION 4724 // ========================= 4725 function showImage() { 4726 4727 let product = productsData[currentProduct]; 4728 let images = product.photos || []; 4729 4730 let imgPrev = document.getElementById('prevProductImg'); 4731 let imgNext = document.getElementById('nextProductImg'); 4732 let gallery = document.querySelector('.popup-gallery'); 4733 4734 let totalImages = images.length; 4735 4736 // no images 4737 if (totalImages === 0) { 4738 //gallery.style.display = 'none'; 4739 gallery.style.display = 'grid'; 4740 4741 imgPrev.style.display = 'none'; 4742 imgNext.style.display = 'none'; 4743 4744 gallery.style.gridTemplateColumns = '1fr'; 4745 popupImage.src = 'https://addyp.com/pictures/logo/6a/6ab4f3321a6e8.png'; 4746 return; 4747 } 4748 4749 // always show gallery if images exist 4750 gallery.style.display = 'grid'; 4751 4752 if (totalImages === 1) { 4753 imgPrev.style.display = 'none'; 4754 imgNext.style.display = 'none'; 4755 gallery.style.gridTemplateColumns = '1fr'; 4756 } else { 4757 imgPrev.style.display = 'inline-block'; 4758 imgNext.style.display = 'inline-block'; 4759 gallery.style.gridTemplateColumns = '50px 1fr 50px'; 4760 } 4761 4762 // update image safely 4763 popupImage.src = '/pictures/products/' + images[currentImage]; 4764 } 4765 4766 4767 // ========================= 4768 // LOAD PRODUCT FUNCTION 4769 // ========================= 4770 function loadProduct(index) { 4771 4772 currentProduct = index; 4773 currentImage = 0; 4774 4775 let product = productsData[index]; 4776 let images = product.photos || []; 4777 4778 popupTitle.innerHTML = escapeAndFormatDescription(product.title); 4779 // description is already fully escaped/formatted server-side (see 4780 // listing.php's SEO entity-linking pass) - see the same note in 4781 // loadService() above 4782 popupText.innerHTML = product.description || ''; 4783 popupPrice.innerHTML = product.price 4784 ? "$" + Number(product.price).toLocaleString('en-IN') 4785 : ''; 4786 popupDetailLink.href ='https://addyp.com/product/' +'savra-suit-shop-in-jaipur/' +product.product_slug; 4787 4788 showImage(); 4789 4790 // link 4791 if (product.youtube_link) { 4792 let youtubeLink = product.youtube_link.trim(); 4793 4794 // Add https:// if missing 4795 if(!/^https?:\/\//i.test(youtubeLink)){ 4796 youtubeLink = 'https://' + youtubeLink; 4797 } 4798 popupLink.href = youtubeLink; 4799 // popupLink.href = product.youtube_link; 4800 popupLink.style.display = 'inline-block'; 4801 } else { 4802 popupLink.style.display = 'none'; 4803 } 4804 4805 // prev/next product buttons 4806 let prevBtn = document.getElementById('prevProduct'); 4807 let nextBtn = document.getElementById('nextProduct'); 4808 4809 if (productsData.length <= 1) { 4810 prevBtn.style.display = 'none'; 4811 nextBtn.style.display = 'none'; 4812 } else { 4813 prevBtn.style.display = 'inline-block'; 4814 nextBtn.style.display = 'inline-block'; 4815 } 4816 } 4817 4818 4819 // ========================= 4820 // OPEN PRODUCT MODAL 4821 // ========================= 4822 cards.forEach(function (card) { 4823 4824 card.addEventListener('click', function () { 4825 4826 let i = parseInt(this.dataset.index); 4827 4828 loadProduct(i); 4829 4830 $('#productModal').modal('show'); 4831 4832 }); 4833 4834 }); 4835 4836 4837 // ========================= 4838 // IMAGE NAVIGATION (FIXED) 4839 // Works even if DOM re-renders 4840 // ========================= 4841 document.addEventListener('click', function (e) { 4842 4843 let product = productsData[currentProduct]; 4844 let images = product.photos || []; 4845 let total = images.length; 4846 4847 if (total === 0) return; 4848 4849 // NEXT IMAGE 4850 if (e.target && e.target.id === 'nextProductImg') { 4851 4852 currentImage = (currentImage + 1) % total; 4853 showImage(); 4854 } 4855 4856 // PREVIOUS IMAGE 4857 if (e.target && e.target.id === 'prevProductImg') { 4858 4859 currentImage = (currentImage - 1 + total) % total; 4860 showImage(); 4861 } 4862 }); 4863 4864 4865 // ========================= 4866 // NEXT PRODUCT 4867 // ========================= 4868 document.addEventListener('click', function (e) { 4869 4870 if (e.target && e.target.id === 'nextProduct') { 4871 4872 currentProduct++; 4873 4874 if (currentProduct >= productsData.length) { 4875 currentProduct = 0; 4876 } 4877 4878 loadProduct(currentProduct); 4879 } 4880 4881 if (e.target && e.target.id === 'prevProduct') { 4882 4883 currentProduct--; 4884 4885 if (currentProduct < 0) { 4886 currentProduct = productsData.length - 1; 4887 } 4888 4889 loadProduct(currentProduct); 4890 } 4891 }); 4892 4893}); 4894</script>
4894 4895
4896<script type="application/ld+json"> 4897{ 4898 "@context": "https://schema.org", 4899 "@type": "ItemList", 4900 "name": "Savra - Suit Shop in Jaipur Products", 4901 "itemListElement": [ 4902 ] 4903} 4904</script>
4904 4905 4906<style> 4907 4908 .popup-gallery{ 4909 display:grid; 4910 grid-template-columns:50px 1fr 50px; 4911 gap:15px; 4912 align-items:center; 4913 margin-bottom:20px; 4914 } 4915 4916 .popup-gallery button{ 4917 width:50px; 4918 height:50px; 4919 border:none; 4920 border-radius:50%; 4921 font-size:28px; 4922 } 4923 .popup-gallery{ 4924 position:relative; 4925 width:100%; 4926 display:block !important; 4927 } 4928 4929 #popupImage{ 4930 width:100% !important; 4931 height:300px !important; 4932 object-fit:cover !important; 4933 border-radius:20px !important; 4934 display:block; 4935 } 4936 4937 #prevImg, 4938 #nextImg{ 4939 position:absolute; 4940 top:50%; 4941 transform:translateY(-50%); 4942 z-index:10; 4943 4944 width:50px; 4945 height:50px; 4946 border-radius:50%; 4947 border:none; 4948 background:#eee; 4949 cursor:pointer; 4950 } 4951 4952 #prevImg{ 4953 left:15px; 4954 } 4955 4956 #nextImg{ 4957 right:15px; 4958 } 4959 4960 #productModal .popup-gallery{ 4961 position:relative; 4962 width:100%; 4963 } 4964 4965 #productPopupImage{ 4966 width:100% !important; 4967 height:300px !important; 4968 object-fit:cover !important; 4969 border-radius:20px !important; 4970 display:block !important; 4971 } 4972 4973 #prevProductImg, 4974 #nextProductImg{ 4975 position:absolute; 4976 top:50%; 4977 transform:translateY(-50%); 4978 z-index:100; 4979 4980 width:50px; 4981 height:50px; 4982 border-radius:50%; 4983 border:none; 4984 background:#eee; 4985 cursor:pointer; 4986 } 4987 4988 #prevProductImg{ 4989 left:10px; 4990 } 4991 4992 #nextProductImg{ 4993 right:10px; 4994 } 4995 4996 .popup-img{ 4997 width:100%; 4998 height:300px; 4999 object-fit:cover; 5000 border-radius:20px!important; 5001 min-width: 990px; 5002 } 5003 5004 .video-wrap{ 5005 margin-top:20px; 5006 text-align:right; 5007 } 5008 5009 5010 5011 /* COMMON SECTION */ 5012 .common-section{ 5013 margin-top:30px; 5014 overflow:visible; 5015 position:relative; 5016 } 5017 5018 #banner-ads-container{ 5019 margin-top:20px; 5020 } 5021 5022 /* CARD */ 5023 .common-card{ 5024 background:#fff; 5025 border-radius:24px; 5026 overflow:hidden; 5027 margin:12px; 5028 max-width:100%; 5029 box-shadow:0 8px 30px rgba(0,0,0,.08); 5030 cursor:pointer; 5031 transition:.25s; 5032 } 5033 5034 @media (hover: hover) and (pointer: fine) { 5035 .common-card:hover{ 5036 transform:translateY(-4px); 5037 box-shadow:0 12px 35px rgba(0,0,0,.12); 5038 } 5039 } 5040 5041 /* IMAGE */ 5042 .common-img{ 5043 display:block; 5044 width:100%; 5045 height:260px; 5046 object-fit:cover; 5047 border-radius:24px 24px 0 0; 5048 } 5049 5050 /* fallback business logo (no service/product photo) - contain instead of cover so it isn't cropped/zoomed */ 5051 .common-img-fallback{ 5052 object-fit:contain; 5053 background:#f8f9fa; 5054 padding:40px; 5055 box-sizing:border-box; 5056 } 5057 5058 /* BODY */ 5059 .common-body{ 5060 padding:28px; 5061 min-height:180px; 5062 } 5063 5064 /* TEXT */ 5065 .common-desc{ 5066 font-size:16px; 5067 line-height:1.7; 5068 color:#4b5563; 5069 } 5070 5071 /* PRICE */ 5072 .common-price{ 5073 font-weight:600; 5074 color:#111; 5075 margin-bottom:10px; 5076 } 5077 5078 /* SPLIDE */ 5079 .common-slider .splide__slide{ 5080 padding-bottom:15px; 5081 display:flex; 5082 height:auto; 5083 } 5084 5085 .common-slider{ 5086 position:relative; 5087 } 5088 5089 .common-slider.has-arrows{ 5090 padding:0 38px; 5091 } 5092 5093 /* ARROWS */ 5094 .common-slider .splide__arrow{ 5095 width:48px; 5096 height:48px; 5097 border:none; 5098 border-radius:50%; 5099 background:#fff; 5100 box-shadow:0 6px 18px rgba(0,0,0,.15); 5101 display:flex; 5102 align-items:center; 5103 justify-content:center; 5104 } 5105 5106 .common-slider .splide__arrow--prev{ 5107 left:-18px; 5108 } 5109 5110 .common-slider .splide__arrow--next{ 5111 right:-18px; 5112 } 5113 5114 /* MOBILE */ 5115 @media(max-width:768px){ 5116 5117 .common-img{ 5118 height:220px; 5119 } 5120 5121 .common-body{ 5122 padding:20px; 5123 min-height:auto; 5124 } 5125 5126 .common-slider.has-arrows{ 5127 padding:0 50px; 5128 } 5129 5130 .common-slider .splide__arrow{ 5131 width:38px; 5132 height:38px; 5133 } 5134 5135 .common-slider .splide__arrow--prev{ 5136 left:5px; 5137 } 5138 5139 .common-slider .splide__arrow--next{ 5140 right:5px; 5141 } 5142 } 5143 .no-underline { 5144 text-decoration: none!important; 5145 } 5146 /* Free-listing contact/social blur - CSS-only, the real markup and 5147 text stay in the page (crawlers still see the actual content), 5148 this only affects how it looks/behaves for a sighted, interactive 5149 visitor. pointer-events:none stops tap-to-call/tap-to-chat working 5150 through the blur - the "Upgrade to unlock" button is the only way 5151 through. */ 5152 .contact-blur { 5153 filter: blur(5px); 5154 user-select: none; 5155 pointer-events: none; 5156 } 5157 .service-area-badges { 5158 margin-left: 5px !important; 5159 display: flex; 5160 flex-wrap: wrap; 5161 gap: 5px; 5162 } 5163 .splide__arrow svg path { 5164 fill: #111010 !important; 5165 } 5166 5167 /* JOBS / EVENTS - read-only cards on the listing page (adding/editing 5168 happens on /user/my-jobs and /user/my-events, not here) */ 5169 .job-event-card{ 5170 background:#fff; 5171 border:1px solid #eee; 5172 border-radius:16px; 5173 padding:20px; 5174 height:100%; 5175 transition:.25s; 5176 } 5177 5178 @media (hover: hover) and (pointer: fine) { 5179 .job-event-card:hover{ 5180 box-shadow:0 8px 24px rgba(0,0,0,.08); 5181 } 5182 } 5183 5184 .job-event-card h4{ 5185 margin-bottom:10px; 5186 } 5187 5188 .job-event-card h4 a{
5189 color:#222 !important; 5190 text-decoration:none !important; 5191 } 5192 5193 .job-event-badges{ 5194 display:flex; 5195 flex-wrap:wrap; 5196 gap:8px; 5197 margin-bottom:12px; 5198 } 5199 5200 .job-event-badges .badge{ 5201 padding:6px 12px; 5202 font-weight:700; 5203 font-size:12px; 5204 } 5205 5206 .job-type-pill{ 5207 background:#e7f1ff; 5208 color:#1a56c4; 5209 } 5210 5211 .salary-pill, 5212 .event-date-pill{ 5213 background:#fff4cf; 5214 color:#a77900; 5215 } 5216 5217 .job-event-desc{ 5218 color:#666; 5219 font-size:14px; 5220 margin-bottom:14px; 5221 } 5222</style>
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.