1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5<!-- This site is hosted on Netlify. Anyone can build and deploy a site 6 like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=cf9c240f-178a-4cc6-8263-b531c1157bdb 7 Netlify hosting facts for this site: static/SSR served via Netlify Edge. --> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 9 <title>SnapTracker | Educational Snapchat Monitoring</title> 10 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> 11 <style> 12 :root { 13 --primary: #FFFC00; /* Snapchat Yellow */ 14 --primary-dark: #e6e400; 15 --secondary: #000000; /* Snapchat Black */ 16 --success: #10b981; 17 --warning: #f59e0b; 18 --danger: #ef4444; 19 --light: #f8fafc; 20 --dark: #1e293b; 21 --card-bg: #ffffff; 22 --sidebar-bg: #000000; 23 --header-bg: #ffffff; 24 --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); 25 --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); 26 --radius: 8px; 27 --radius-lg: 12px; 28 --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 29 } 30 31 * { 32 margin: 0; 33 padding: 0; 34 box-sizing: border-box; 35 font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; 36 } 37 38 body { 39 background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%); 40 color: var(--dark); 41 line-height: 1.6; 42 display: flex; 43 min-height: 100vh; 44 } 45 46 /* Sidebar Navigation */ 47 .sidebar { 48 width: 260px; 49 background: var(--sidebar-bg); 50 color: white; 51 display: flex; 52 flex-direction: column; 53 transition: var(--transition); 54 box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1); 55 z-index: 100; 56 } 57 58 .logo-area { 59 padding: 24px 20px; 60 border-bottom: 1px solid #333; 61 display: flex; 62 align-items: center; 63 gap: 12px; 64 } 65 66 .logo-icon { 67 font-size: 28px; 68 background: rgba(255, 252, 0, 0.2); 69 width: 40px; 70 height: 40px; 71 border-radius: 50%; 72 display: flex; 73 align-items: center; 74 justify-content: center; 75 color: var(--primary); 76 } 77 78 .logo-text { 79 font-size: 20px; 80 font-weight: 700; 81 color: var(--primary); 82 } 83 84 .nav-menu { 85 flex: 1; 86 padding: 20px 0; 87 } 88 89 .nav-item { 90 padding: 12px 20px; 91 display: flex; 92 align-items: center; 93 gap: 12px; 94 transition: var(--transition); 95 border-left: 4px solid transparent; 96 cursor: pointer; 97 } 98 99 .nav-item:hover { 100 background: rgba(255, 252, 0, 0.1); 101 border-left-color: var(--primary); 102 } 103 104 .nav-item i { 105 width: 20px; 106 text-align: center; 107 transition: var(--transition); 108 color: var(--primary); 109 } 110 111 .nav-item:hover i { 112 transform: scale(1.2); 113 } 114 115 .nav-label { 116 font-weight: 500; 117 } 118 119 .nav-value { 120 margin-left: auto; 121 font-weight: 600; 122 font-size: 14px; 123 } 124 125 .status-online { 126 color: #10b981; 127 } 128 129 .status-offline { 130 color: #ef4444; 131 } 132 133 /* Main Content Area */ 134 .main-content { 135 flex: 1; 136 display: flex; 137 flex-direction: column; 138 overflow: auto; 139 } 140 141 .header { 142 background: var(--header-bg); 143 padding: 16px 30px; 144 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); 145 display: flex; 146 justify-content: space-between; 147 align-items: center; 148 z-index: 10; 149 } 150 151 .page-title { 152 font-size: 24px; 153 font-weight: 600; 154 } 155 156 .system-status { 157 display: flex; 158 align-items: center; 159 gap: 10px; 160 } 161 162 .status-indicator { 163 width: 12px; 164 height: 12px; 165 border-radius: 50%; 166 background: #10b981; 167 animation: pulse 2s infinite; 168 } 169 170 .status-btn { 171 background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); 172 color: var(--secondary); 173 border: none; 174 padding: 10px 20px; 175 border-radius: 50px; 176 font-weight: 600; 177 font-size: 14px; 178 cursor: default; 179 box-shadow: 0 0 15px rgba(255, 252, 0, 0.5); 180 transition: var(--transition); 181 } 182 183 .status-btn:hover { 184 transform: translateY(-2px); 185 box-shadow: 0 0 20px rgba(255, 252, 0, 0.7); 186 } 187 188 /* Dashboard Content */ 189 .dashboard { 190 padding: 30px; 191 flex: 1; 192 display: flex; 193 flex-direction: column; 194 gap: 24px; 195 } 196 197 /* Stats Grid */ 198 .stats-grid { 199 display: grid; 200 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); 201 gap: 20px; 202 } 203 204 .stat-card { 205 background: white; 206 border-radius: var(--radius); 207 padding: 20px; 208 box-shadow: var(--shadow); 209 display: flex; 210 align-items: center; 211 gap: 15px; 212 transition: var(--transition); 213 cursor: pointer; 214 position: relative; 215 overflow: hidden; 216 } 217 218 .stat-card::before { 219 content: ''; 220 position: absolute; 221 top: 0; 222 left: -100%; 223 width: 100%; 224 height: 100%; 225 background: linear-gradient(90deg, transparent, rgba(255, 252, 0, 0.1), transparent); 226 transition: left 0.7s; 227 } 228 229 .stat-card:hover::before { 230 left: 100%; 231 } 232 233 .stat-card:hover { 234 transform: translateY(-5px); 235 box-shadow: var(--shadow-lg); 236 } 237 238 .stat-icon { 239 width: 50px; 240 height: 50px; 241 border-radius: 12px; 242 display: flex; 243 align-items: center; 244 justify-content: center; 245 font-size: 24px; 246 transition: var(--transition); 247 z-index: 1; 248 } 249 250 .stat-card:hover .stat-icon { 251 transform: scale(1.1) rotate(5deg); 252 } 253 254 .stat-1 .stat-icon { background: rgba(255, 252, 0, 0.1); color: var(--primary); } 255 .stat-2 .stat-icon { background: rgba(16, 185, 129, 0.1); color: var(--success); } 256 .stat-3 .stat-icon { background: rgba(245, 158, 11, 0.1); color: var(--warning); } 257 .stat-4 .stat-icon { background: rgba(239, 68, 68, 0.1); color: var(--danger); } 258 259 .stat-content { 260 flex: 1; 261 z-index: 1; 262 } 263 264 .stat-value { 265 font-size: 24px; 266 font-weight: 700; 267 line-height: 1.2; 268 } 269 270 .stat-label { 271 font-size: 14px; 272 color: var(--secondary); 273 margin-top: 4px; 274 } 275 276 /* Tooltip for stats */ 277 .stat-tooltip { 278 position: absolute; 279 bottom: -30px; 280 left: 0; 281 width: 100%; 282 background: var(--primary); 283 color: var(--secondary); 284 padding: 5px; 285 text-align: center; 286 font-size: 12px; 287 border-radius: 0 0 var(--radius) var(--radius); 288 opacity: 0; 289 transition: var(--transition); 290 } 291 292 .stat-card:hover .stat-tooltip { 293 bottom: 0; 294 opacity: 1; 295 } 296 297 /* Main Tool Card */ 298 .tool-card { 299 background: white; 300 border-radius: var(--radius-lg); 301 box-shadow: var(--shadow-lg); 302 overflow: hidden; 303 animation: fadeIn 0.8s ease; 304 position: relative; 305 } 306 307 .card-header { 308 background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); 309 color: var(--secondary); 310 padding: 20px 30px; 311 position: relative; 312 } 313 314 .card-header::after { 315 content: ''; 316 position: absolute; 317 bottom: 0; 318 left: 0; 319 width: 100%; 320 height: 3px; 321 background: rgba(0, 0, 0, 0.3); 322 } 323 324 .card-title { 325 font-size: 20px; 326 font-weight: 600; 327 margin-bottom: 5px; 328 } 329 330 .card-subtitle { 331 opacity: 0.9; 332 font-size: 14px; 333 } 334 335 .card-body { 336 padding: 30px; 337 } 338 339 .step-indicator { 340 display: flex; 341 justify-content: space-between; 342 margin-bottom: 30px; 343 position: relative; 344 } 345 346 .step-indicator::before { 347 content: ''; 348 position: absolute; 349 top: 14px; 350 left: 0; 351 right: 0; 352 height: 2px; 353 background: #e2e8f0; 354 z-index: 1; 355 } 356 357 .step { 358 width: 30px; 359 height: 30px; 360 border-radius: 50%; 361 background: #e2e8f0; 362 color: var(--secondary); 363 display: flex; 364 align-items: center; 365 justify-content: center; 366 font-size: 14px; 367 font-weight: 600; 368 z-index: 2; 369 transition: var(--transition); 370 position: relative; 371 } 372 373 .step::after { 374 content: attr(data-title); 375 position: absolute; 376 top: -30px; 377 left: 50%; 378 transform: translateX(-50%); 379 background: var(--dark); 380 color: white; 381 padding: 5px 10px; 382 border-radius: 4px; 383 font-size: 12px; 384 white-space: nowrap; 385 opacity: 0; 386 transition: var(--transition); 387 pointer-events: none; 388 } 389
390 .step:hover::after { 391 opacity: 1; 392 top: -40px; 393 } 394 395 .step.active { 396 background: var(--primary); 397 color: var(--secondary); 398 transform: scale(1.1); 399 box-shadow: 0 0 0 4px rgba(255, 252, 0, 0.2); 400 } 401 402 .step.completed { 403 background: var(--success); 404 color: white; 405 } 406 407 .step-content { 408 display: none; 409 animation: fadeIn 0.5s ease; 410 } 411 412 .step-content.active { 413 display: block; 414 } 415 416 .step-title { 417 font-size: 18px; 418 font-weight: 600; 419 margin-bottom: 8px; 420 display: flex; 421 align-items: center; 422 gap: 10px; 423 } 424 425 .step-icon { 426 color: var(--primary); 427 font-size: 20px; 428 transition: var(--transition); 429 } 430 431 .step-title:hover .step-icon { 432 transform: rotate(15deg); 433 } 434 435 .step-description { 436 color: var(--secondary); 437 margin-bottom: 20px; 438 font-size: 14px; 439 } 440 441 .form-group { 442 margin-bottom: 20px; 443 } 444 445 .form-label { 446 display: block; 447 margin-bottom: 8px; 448 font-weight: 600; 449 font-size: 15px; 450 } 451 452 .form-input { 453 width: 100%; 454 padding: 12px 16px; 455 border: 1.5px solid #e2e8f0; 456 border-radius: var(--radius); 457 font-size: 16px; 458 transition: var(--transition); 459 } 460 461 .form-input:focus { 462 outline: none; 463 border-color: var(--primary); 464 box-shadow: 0 0 0 3px rgba(255, 252, 0, 0.1); 465 transform: translateY(-2px); 466 } 467 468 .phone-example { 469 font-size: 13px; 470 color: var(--secondary); 471 margin-top: 6px; 472 } 473 474 .system-selection { 475 display: grid; 476 grid-template-columns: 1fr 1fr; 477 gap: 12px; 478 margin-bottom: 24px; 479 } 480 481 .system-card { 482 padding: 20px; 483 background: white; 484 border: 1.5px solid #e2e8f0; 485 border-radius: var(--radius); 486 text-align: center; 487 cursor: pointer; 488 transition: var(--transition); 489 position: relative; 490 overflow: hidden; 491 } 492 493 .system-card::before { 494 content: ''; 495 position: absolute; 496 top: 0; 497 left: -100%; 498 width: 100%; 499 height: 100%; 500 background: linear-gradient(90deg, transparent, rgba(255, 252, 0, 0.1), transparent); 501 transition: left 0.7s; 502 } 503 504 .system-card:hover::before { 505 left: 100%; 506 } 507 508 .system-card:hover { 509 transform: translateY(-5px); 510 border-color: var(--primary); 511 box-shadow: var(--shadow); 512 } 513 514 .system-card.selected { 515 border-color: var(--primary); 516 background: rgba(255, 252, 0, 0.05); 517 box-shadow: var(--shadow); 518 animation: bounce 0.5s ease; 519 } 520 521 .system-icon { 522 width: 42px; 523 height: 42px; 524 margin: 0 auto 12px; 525 transition: var(--transition); 526 z-index: 1; 527 display: block; 528 } 529 530 .system-card:hover .system-icon { 531 transform: scale(1.2); 532 } 533 534 .system-name { 535 font-weight: 600; 536 font-size: 15px; 537 z-index: 1; 538 } 539 540 .spy-options { 541 display: grid; 542 grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); 543 gap: 12px; 544 margin-bottom: 24px; 545 } 546 547 .spy-option { 548 padding: 15px; 549 background: white; 550 border: 1.5px solid #e2e8f0; 551 border-radius: var(--radius); 552 text-align: center; 553 cursor: pointer; 554 transition: var(--transition); 555 position: relative; 556 overflow: hidden; 557 } 558 559 .spy-option::before { 560 content: ''; 561 position: absolute; 562 top: 0; 563 left: -100%; 564 width: 100%; 565 height: 100%; 566 background: linear-gradient(90deg, transparent, rgba(255, 252, 0, 0.1), transparent); 567 transition: left 0.7s; 568 } 569 570 .spy-option:hover::before { 571 left: 100%; 572 } 573 574 .spy-option:hover { 575 transform: translateY(-3px); 576 border-color: var(--primary); 577 box-shadow: var(--shadow); 578 } 579 580 .spy-option.selected { 581 border-color: var(--primary); 582 background: rgba(255, 252, 0, 0.05); 583 box-shadow: var(--shadow); 584 animation: bounce 0.5s ease; 585 } 586 587 .option-icon { 588 font-size: 24px; 589 margin-bottom: 8px; 590 transition: var(--transition); 591 z-index: 1; 592 color: #1e293b; /* Dark color for visibility */ 593 } 594 595 .spy-option:hover .option-icon { 596 transform: scale(1.2); 597 } 598 599 .option-name { 600 font-weight: 600; 601 font-size: 14px; 602 z-index: 1; 603 } 604 605 .btn { 606 display: block; 607 width: 100%; 608 padding: 14px; 609 border: none; 610 border-radius: var(--radius); 611 font-size: 16px; 612 font-weight: 600; 613 cursor: pointer; 614 transition: var(--transition); 615 text-align: center; 616 position: relative; 617 overflow: hidden; 618 } 619 620 .btn::before { 621 content: ''; 622 position: absolute; 623 top: 0; 624 left: -100%; 625 width: 100%; 626 height: 100%; 627 background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent); 628 transition: left 0.5s; 629 } 630 631 .btn:hover::before { 632 left: 100%; 633 } 634 635 .btn-primary { 636 background: var(--primary); 637 color: var(--secondary); 638 } 639 640 .btn-primary:hover { 641 background: var(--primary-dark); 642 transform: translateY(-3px); 643 box-shadow: var(--shadow); 644 } 645 646 .btn-secondary { 647 background: #f1f5f9; 648 color: var(--dark); 649 } 650 651 .btn-secondary:hover { 652 background: #e2e8f0; 653 transform: translateY(-3px); 654 } 655 656 .btn-success { 657 background: var(--success); 658 color: white; 659 } 660 661 .btn-success:hover { 662 background: #0da271; 663 transform: translateY(-3px); 664 box-shadow: var(--shadow); 665 } 666 667 .btn:disabled { 668 background: #cbd5e1; 669 color: #64748b;
670 cursor: not-allowed; 671 transform: none; 672 box-shadow: none; 673 } 674 675 .btn:disabled::before { 676 display: none; 677 } 678 679 .navigation { 680 display: flex; 681 gap: 12px; 682 margin-top: 24px; 683 } 684 685 /* Modal Styles */ 686 .modal { 687 display: none; 688 position: fixed; 689 top: 0; 690 left: 0; 691 width: 100%; 692 height: 100%; 693 background: rgba(0, 0, 0, 0.7); 694 z-index: 1000; 695 justify-content: center; 696 align-items: center; 697 animation: fadeIn 0.3s ease; 698 padding: 20px; 699 } 700 701 .modal-content { 702 background: white; 703 border-radius: var(--radius-lg); 704 width: 100%; 705 max-width: 520px; 706 overflow: hidden; 707 animation: slideUp 0.4s ease; 708 box-shadow: var(--shadow-lg); 709 } 710 711 .modal-header { 712 background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); 713 color: var(--secondary); 714 padding: 20px; 715 text-align: center; 716 position: relative; 717 } 718
719 .modal-header::after { 720 content: ''; 721 position: absolute; 722 bottom: 0; 723 left: 0; 724 width: 100%; 725 height: 3px; 726 background: rgba(0, 0, 0, 0.3); 727 } 728 729 .modal-body { 730 padding: 24px; 731 } 732 733 .progress-container { 734 margin-bottom: 24px; 735 } 736 737 .progress-bar { 738 height: 8px; 739 background: #e2e8f0; 740 border-radius: 4px; 741 overflow: hidden; 742 margin-bottom: 20px; 743 } 744 745 .progress { 746 height: 100%; 747 background: linear-gradient(90deg, var(--primary) 0%, var(--success) 100%); 748 width: 0%; 749 transition: width 0.5s ease; 750 border-radius: 4px; 751 } 752 753 .progress-steps { 754 display: flex; 755 flex-direction: column; 756 gap: 16px; 757 } 758 759 .progress-step { 760 display: flex; 761 align-items: center; 762 gap: 12px; 763 opacity: 0.5; 764 transition: var(--transition); 765 } 766 767 .progress-step.active { 768 opacity: 1; 769 } 770 771 .progress-step.completed i { 772 color: var(--success); 773 } 774 775 .progress-step i { 776 font-size: 18px; 777 color: #1e293b; /* Dark color for visibility */ 778 transition: var(--transition); 779 } 780 781 .progress-step-text { 782 font-size: 15px; 783 } 784 785 .process-info { 786 background: #f8fafc; 787 border-radius: var(--radius); 788 padding: 16px; 789 margin-top: 20px; 790 border-left: 4px solid var(--primary); 791 } 792 793 .process-info-title { 794 font-weight: 600; 795 margin-bottom: 8px; 796 color: var(--primary); 797 } 798 799 .process-info-details { 800 display: flex; 801 justify-content: space-between; 802 font-size: 14px; 803 color: var(--secondary); 804 } 805 806 .snap-result { 807 text-align: center; 808 } 809 810 .success-icon { 811 font-size: 48px; 812 color: var(--success); 813 margin-bottom: 16px; 814 animation: bounce 1s ease; 815 } 816 817 .media-container { 818 position: relative; 819 margin: 20px 0; 820 border-radius: var(--radius); 821 overflow: hidden; 822 box-shadow: var(--shadow); 823 height: 220px; 824 background: #f1f5f9; 825 display: flex; 826 align-items: center; 827 justify-content: center; 828 } 829 830 .media-image { 831 width: 100%; 832 height: 100%; 833 object-fit: cover; 834 filter: blur(6px); 835 transition: filter 0.8s ease; 836 } 837 838 .media-overlay { 839 position: absolute; 840 top: 0; 841 left: 0; 842 right: 0; 843 bottom: 0; 844 background: rgba(0, 0, 0, 0.4); 845 display: flex; 846 align-items: center; 847 justify-content: center; 848 color: white; 849 font-weight: 600; 850 font-size: 18px; 851 backdrop-filter: blur(2px); 852 } 853 854 .snap-info { 855 background: #f8fafc; 856 padding: 16px; 857 border-radius: var(--radius); 858 margin-top: 16px; 859 text-align: left; 860 } 861 862 .snap-info-item { 863 display: flex; 864 justify-content: space-between; 865 margin-bottom: 12px; 866 padding-bottom: 12px; 867 border-bottom: 1px solid #e2e8f0; 868 } 869 870 .snap-info-item:last-child { 871 margin-bottom: 0; 872 border-bottom: none; 873 padding-bottom: 0; 874 } 875 876 .info-label { 877 font-weight: 600; 878 color: var(--secondary); 879 } 880 881 .info-value { 882 font-weight: 500; 883 } 884 885 .blurred { 886 filter: blur(4px); 887 user-select: none; 888 transition: filter 0.8s ease; 889 } 890 891 .exact-snap-btn { 892 margin: 20px auto 0; 893 display: block; 894 width: 90%; 895 max-width: 320px; 896 padding: 16px 24px; 897 font-size: 17px; 898 border-radius: 50px; 899 box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3); 900 text-decoration: none; 901 } 902 903 .loading-container { 904 margin: 20px 0; 905 text-align: center; 906 } 907 908 .loading-bar { 909 height: 6px; 910 background: #e2e8f0; 911 border-radius: 3px; 912 overflow: hidden; 913 margin-bottom: 12px; 914 } 915 916 .loading-progress { 917 height: 100%; 918 background: linear-gradient(90deg, var(--primary) 0%, var(--success) 100%); 919 width: 0%; 920 transition: width 0.5s ease; 921 border-radius: 3px; 922 } 923 924 .loading-text { 925 font-size: 14px; 926 color: var(--secondary); 927 } 928 929 /* Locker Modal Styles */ 930 .locker-modal { 931 display: none; 932 position: fixed; 933 top: 0; 934 left: 0; 935 width: 100%; 936 height: 100%; 937 background: rgba(0, 0, 0, 0.8); 938 z-index: 1100; 939 justify-content: center; 940 align-items: center; 941 animation: fadeIn 0.3s ease; 942 } 943 944 .locker-content { 945 background: white; 946 border-radius: var(--radius-lg); 947 width: 100%; 948 max-width: 400px; 949 overflow: hidden; 950 animation: slideUp 0.4s ease; 951 box-shadow: var(--shadow-lg); 952 } 953 954 .locker-header { 955 background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); 956 color: var(--secondary); 957 padding: 20px; 958 text-align: center; 959 } 960 961 .locker-body { 962 padding: 24px; 963 text-align: center; 964 } 965 966 .locker-icon { 967 font-size: 48px; 968 color: var(--primary); 969 margin-bottom: 16px; 970 } 971 972 .captcha-container { 973 background: #f8fafc; 974 padding: 20px; 975 border-radius: var(--radius); 976 margin: 20px 0; 977 } 978 979 .captcha-text { 980 font-size: 28px; 981 font-weight: bold; 982 letter-spacing: 4px; 983 color: #1e293b; 984 background: white; 985 padding: 15px; 986 border-radius: var(--radius); 987 border: 2px dashed #cbd5e1; 988 margin-bottom: 15px; 989 font-family: 'Courier New', monospace; 990 user-select: none; 991 } 992
993 .captcha-instructions { 994 font-size: 14px; 995 color: var(--secondary); 996 margin-bottom: 15px; 997 } 998 999 .locker-form { 1000 margin-top: 20px; 1001 } 1002 1003 .locker-input { 1004 width: 100%; 1005 padding: 12px 16px; 1006 border: 1.5px solid #e2e8f0; 1007 border-radius: var(--radius); 1008 font-size: 16px; 1009 margin-bottom: 16px; 1010 text-align: center; 1011 letter-spacing: 2px; 1012 text-transform: uppercase; 1013 } 1014 1015 .locker-input:focus { 1016 outline: none; 1017 border-color: var(--primary); 1018 box-shadow: 0 0 0 3px rgba(255, 252, 0, 0.1); 1019 } 1020 1021 .locker-buttons { 1022 display: flex; 1023 gap: 12px; 1024 } 1025 1026 .btn-warning { 1027 background: var(--primary); 1028 color: var(--secondary); 1029 } 1030 1031 .btn-warning:hover { 1032 background: var(--primary-dark); 1033 transform: translateY(-3px); 1034 box-shadow: var(--shadow); 1035 } 1036 1037 .captcha-refresh { 1038 background: none; 1039 border: none; 1040 color: var(--primary); 1041 cursor: pointer; 1042 font-size: 14px; 1043 margin-top: 10px; 1044 display: inline-flex; 1045 align-items: center; 1046 gap: 5px; 1047 } 1048 1049 .captcha-refresh:hover { 1050 color: var(--primary-dark); 1051 } 1052 1053 /* Floating Action Button */ 1054 .fab { 1055 position: fixed; 1056 bottom: 30px; 1057 right: 30px; 1058 width: 60px; 1059 height: 60px; 1060 background: var(--primary); 1061 color: var(--secondary); 1062 border-radius: 50%; 1063 display: flex; 1064 align-items: center; 1065 justify-content: center; 1066 font-size: 24px; 1067 box-shadow: 0 4px 12px rgba(255, 252, 0, 0.4); 1068 cursor: pointer; 1069 z-index: 100; 1070 transition: var(--transition); 1071 } 1072 1073 .fab:hover { 1074 transform: scale(1.1); 1075 box-shadow: 0 6px 16px rgba(255, 252, 0, 0.6); 1076 } 1077 1078 /* Toast Notifications */ 1079 .toast { 1080 position: fixed; 1081 top: 30px; 1082 right: 30px; 1083 padding: 15px 20px; 1084 background: white; 1085 border-radius: var(--radius); 1086 box-shadow: var(--shadow-lg); 1087 display: flex; 1088 align-items: center; 1089 gap: 10px; 1090 z-index: 1000; 1091 transform: translateX(150%); 1092 transition: transform 0.3s ease; 1093 } 1094 1095 .toast.show { 1096 transform: translateX(0); 1097 } 1098 1099 .toast-success { 1100 border-left: 4px solid var(--success); 1101 } 1102 1103 .toast-error { 1104 border-left: 4px solid var(--danger); 1105 } 1106 1107 .toast-info { 1108 border-left: 4px solid var(--primary); 1109 } 1110 1111 .toast-icon { 1112 font-size: 20px; 1113 } 1114 1115 .toast-success .toast-icon { 1116 color: var(--success); 1117 } 1118 1119 .toast-error .toast-icon { 1120 color: var(--danger); 1121 } 1122 1123 .toast-info .toast-icon { 1124 color: var(--primary); 1125 } 1126 1127 .toast-message { 1128 font-size: 14px; 1129 font-weight: 500; 1130 } 1131 1132 /* Animations */ 1133 @keyframes fadeIn { 1134 from { opacity: 0; } 1135 to { opacity: 1; } 1136 } 1137 1138 @keyframes slideUp { 1139 from { transform: translateY(30px); opacity: 0; } 1140 to { transform: translateY(0); opacity: 1; } 1141 } 1142 1143 @keyframes pulse { 1144 0% { transform: scale(1); opacity: 1; } 1145 50% { transform: scale(1.05); opacity: 0.8; } 1146 100% { transform: scale(1); opacity: 1; } 1147 } 1148 1149 @keyframes bounce { 1150 0%, 20%, 50%, 80%, 100% {transform: translateY(0);} 1151 40% {transform: translateY(-10px);} 1152 60% {transform: translateY(-5px);} 1153 } 1154 1155 @keyframes glow { 1156 0% { box-shadow: 0 0 5px rgba(255, 252, 0, 0.5); } 1157 50% { box-shadow: 0 0 20px rgba(255, 252, 0, 0.8); } 1158 100% { box-shadow: 0 0 5px rgba(255, 252, 0, 0.5); } 1159 } 1160 1161 .pulse { 1162 animation: pulse 2s infinite; 1163 } 1164 1165 .glow { 1166 animation: glow 2s infinite; 1167 } 1168 1169 /* Footer */ 1170 .footer { 1171 text-align: center; 1172 padding: 20px; 1173 color: var(--secondary); 1174 font-size: 13px; 1175 border-top: 1px solid #e2e8f0; 1176 background: #f8fafc; 1177 } 1178 1179 /* Responsive Design */ 1180 @media (max-width: 1024px) { 1181 .sidebar { 1182 width: 80px; 1183 } 1184 1185 .logo-text, .nav-text { 1186 display: none; 1187 } 1188 1189 .logo-area { 1190 justify-content: center; 1191 padding: 20px 10px; 1192 } 1193 1194 .nav-item { 1195 justify-content: center; 1196 padding: 15px 10px; 1197 } 1198 1199 .nav-value { 1200 display: none; 1201 } 1202 } 1203 1204 @media (max-width: 768px) { 1205 body { 1206 flex-direction: column; 1207 } 1208 1209 .sidebar { 1210 width: 100%; 1211 height: auto; 1212 flex-direction: row; 1213 } 1214 1215 .logo-area { 1216 border-bottom: none; 1217 border-right: 1px solid #333; 1218 } 1219 1220 .nav-menu { 1221 display: flex; 1222 padding: 0; 1223 } 1224 1225 .nav-item { 1226 flex: 1; 1227 flex-direction: column; 1228 padding: 10px 5px; 1229 border-left: none; 1230 border-bottom: 4px solid transparent; 1231 } 1232 1233 .stats-grid { 1234 grid-template-columns: repeat(2, 1fr); 1235 } 1236 1237 .spy-options { 1238 grid-template-columns: repeat(3, 1fr); 1239 } 1240 1241 .fab { 1242 bottom: 20px; 1243 right: 20px; 1244 width: 50px; 1245 height: 50px; 1246 font-size: 20px; 1247 } 1248 } 1249 1250 @media (max-width: 480px) { 1251 .stats-grid { 1252 grid-template-columns: 1fr; 1253 } 1254 1255 .spy-options { 1256 grid-template-columns: repeat(2, 1fr); 1257 } 1258 1259 .system-selection { 1260 grid-template-columns: 1fr; 1261 } 1262 1263 .header { 1264 padding: 16px 20px; 1265 } 1266 1267 .dashboard { 1268 padding: 20px; 1269 } 1270 1271 .card-body { 1272 padding: 20px; 1273 } 1274 1275 .nav-menu { 1276 flex-wrap: wrap; 1277 } 1278 1279 .nav-item { 1280 min-width: 50%; 1281 } 1282 1283 .fab { 1284 bottom: 15px; 1285 right: 15px; 1286 width: 45px; 1287 height: 45px; 1288 font-size: 18px; 1289 } 1290 } 1291 </style> 1292 1293
1293<script type="text/javascript"> 1294 var RIKeZ_sXd_OHTRZc={"it":4547980,"key":"51210"}; 1295</script>
vendor: 1 bytes, line 1295
1295
1296<script src="https://d1y0yks1k8t5m5.cloudfront.net/d23aa0e.js"></script>
1296 1297 1298</head> 1299<body> 1300 <!-- Sidebar Navigation --> 1301 <div class="sidebar"> 1302 <div class="logo-area"> 1303 <div class="logo-icon"> 1304 <i class="fab fa-snapchat-ghost"></i> 1305 </div> 1306 <div class="logo-text">SnapTracker</div> 1307 </div> 1308 1309 <div class="nav-menu"> 1310 <div class="nav-item"> 1311 <i class="fas fa-shield-alt"></i> 1312 <span class="nav-label">Security Level</span> 1313 <span class="nav-value status-online">High</span> 1314 </div> 1315 <div class="nav-item"> 1316 <i class="fas fa-server"></i> 1317 <span class="nav-label">Server Status</span> 1318 <span class="nav-value status-online">Online</span> 1319 </div> 1320 <div class="nav-item"> 1321 <i class="fas fa-database"></i> 1322 <span class="nav-label">Database</span> 1323 <span class="nav-value status-online">Connected</span> 1324 </div> 1325 <div class="nav-item"> 1326 <i class="fas fa-network-wired"></i> 1327 <span class="nav-label">Network</span> 1328 <span class="nav-value status-online">Stable</span> 1329 </div> 1330 <div class="nav-item"> 1331 <i class="fas fa-ghost"></i> 1332 <span class="nav-label">Snaps Processed</span> 1333 <span class="nav-value">1,247</span> 1334 </div> 1335 <div class="nav-item"> 1336 <i class="fas fa-clock"></i> 1337 <span class="nav-label">Last Scan</span> 1338 <span class="nav-value">2 min ago</span> 1339 </div> 1340 </div> 1341 </div> 1342 1343 <!-- Main Content Area --> 1344 <div class="main-content"> 1345 <!-- Header --> 1346 <div class="header"> 1347 <div class="page-title">Snapchat Monitoring Tool</div> 1348 <div class="system-status"> 1349 <div class="status-indicator"></div> 1350 <button class="status-btn glow"> 1351 <i class="fas fa-check-circle"></i> System Active 1352 </button> 1353 </div> 1354 </div> 1355 1356 <!-- Dashboard Content --> 1357 <div class="dashboard"> 1358 <!-- Statistics Cards --> 1359 <div class="stats-grid"> 1360 <div class="stat-card stat-1"> 1361 <div class="stat-icon"> 1362 <i class="fas fa-ghost"></i> 1363 </div> 1364 <div class="stat-content"> 1365 <div class="stat-value">1,247</div> 1366 <div class="stat-label">Snaps Processed Today</div> 1367 </div> 1368 <div class="stat-tooltip">Click for detailed report</div> 1369 </div> 1370 <div class="stat-card stat-2"> 1371 <div class="stat-icon"> 1372 <i class="fas fa-user-friends"></i> 1373 </div> 1374 <div class="stat-content"> 1375 <div class="stat-value">86%</div> 1376 <div class="stat-label">Active Users Tracked</div> 1377 </div> 1378 <div class="stat-tooltip">View user locations</div> 1379 </div> 1380 <div class="stat-card stat-3"> 1381 <div class="stat-icon"> 1382 <i class="fas fa-bolt"></i> 1383 </div> 1384 <div class="stat-content"> 1385 <div class="stat-value">12.3s</div> 1386 <div class="stat-label">Average Processing Speed</div> 1387 </div> 1388 <div class="stat-tooltip">See performance metrics</div> 1389 </div> 1390 <div class="stat-card stat-4"> 1391 <div class="stat-icon"> 1392 <i class="fas fa-crosshairs"></i> 1393 </div> 1394 <div class="stat-content"> 1395 <div class="stat-value">94.7%</div> 1396 <div class="stat-label">Data Accuracy</div> 1397 </div> 1398 <div class="stat-tooltip">View accuracy details</div> 1399 </div> 1400 </div> 1401 1402 <!-- Main Tool Card --> 1403 <div class="tool-card"> 1404 <div class="card-header"> 1405 <div class="card-title">Snapchat Account Monitor</div> 1406 <div class="card-subtitle">Enter account details to monitor Snapchat activity</div> 1407 </div> 1408 1409 <div class="card-body"> 1410 <!-- Step Indicator --> 1411 <div class="step-indicator"> 1412 <div class="step active" data-title="Account Details">1</div> 1413 <div class="step" data-title="Platform">2</div> 1414 <div class="step" data-title="Content Type">3</div> 1415 <div class="step" data-title="Results">4</div> 1416 </div> 1417 1418 <!-- Step 1: Account Details --> 1419 <div class="step-content active" id="step1"> 1420 <div class="step-title"> 1421 <i class="fas fa-user step-icon"></i>
1422 <span>Enter Account Details</span> 1423 </div> 1424 <p class="step-description">Provide the Snapchat username and optional phone number</p> 1425 1426 <div class="form-group"> 1427 <label class="form-label" for="username">Snapchat Username</label> 1428 <input type="text" class="form-input" id="username" placeholder="Enter Snapchat username"> 1429 <div class="phone-example">Example: john_doe2023</div> 1430 </div> 1431 1432 <div class="form-group"> 1433 <label class="form-label" for="phoneNumber">Phone Number (Optional)</label> 1434 <input type="text" class="form-input" id="phoneNumber" placeholder="Enter phone number"> 1435 <div class="phone-example">Example: +1 234 567 8900</div> 1436 </div> 1437 1438 <div class="navigation"> 1439 <button class="btn btn-secondary" disabled><i class="fas fa-arrow-left"></i> Back</button> 1440 <button class="btn btn-primary" id="nextStep1">Continue <i class="fas fa-arrow-right"></i></button> 1441 </div> 1442 </div> 1443 1444 <!-- Step 2: Platform Selection --> 1445 <div class="step-content" id="step2"> 1446 <div class="step-title"> 1447 <i class="fas fa-mobile step-icon"></i> 1448 <span>Select Device Platform</span> 1449 </div> 1450 <p class="step-description">Choose the platform of the target device</p> 1451 1452 <div class="system-selection"> 1453 <div class="system-card android"> 1454 <img src="https://cdn-icons-png.flaticon.com/512/174/174836.png" alt="Android" class="system-icon"> 1455 <div class="system-name">Android</div> 1456 </div> 1457 <div class="system-card ios"> 1458 <img src="https://uxwing.com/wp-content/themes/uxwing/download/brands-and-social-media/apple-icon.png" alt="iOS" class="system-icon"> 1459 <div class="system-name">iOS</div> 1460 </div> 1461 </div> 1462 1463 <div class="navigation"> 1464 <button class="btn btn-secondary" id="backStep2"><i class="fas fa-arrow-left"></i> Back</button> 1465 <button class="btn btn-primary" id="nextStep2" disabled>Continue <i class="fas fa-arrow-right"></i></button> 1466 </div> 1467 </div> 1468 1469 <!-- Step 3: Content Type Selection --> 1470 <div class="step-content" id="step3"> 1471 <div class="step-title"> 1472 <i class="fas fa-filter step-icon"></i> 1473 <span>Select Content to Monitor</span> 1474 </div> 1475 <p class="step-description">Choose what type of Snapchat content you want to access</p> 1476 1477 <div class="spy-options"> 1478 <div class="spy-option" data-option="images"> 1479 <div class="option-icon"><i class="fas fa-image"></i></div> 1480 <div class="option-name">Images</div> 1481 </div> 1482 <div class="spy-option" data-option="stories"> 1483 <div class="option-icon"><i class="fas fa-history"></i></div> 1484 <div class="option-name">Stories</div> 1485 </div> 1486 <div class="spy-option" data-option="videos"> 1487 <div class="option-icon"><i class="fas fa-video"></i></div> 1488 <div class="option-name">Videos</div> 1489 </div> 1490 <div class="spy-option" data-option="messages"> 1491 <div class="option-icon"><i class="fas fa-comments"></i></div> 1492 <div class="option-name">Messages</div> 1493 </div> 1494 <div class="spy-option" data-option="friends"> 1495 <div class="option-icon">
1495<i class="fas fa-user-friends"></i></div> 1496 <div class="option-name">Friends List</div> 1497 </div> 1498 <div class="spy-option" data-option="location"> 1499 <div class="option-icon"><i class="fas fa-map-marker-alt"></i></div> 1500 <div class="option-name">Location</div> 1501 </div> 1502 </div> 1503 1504 <div class="navigation"> 1505 <button class="btn btn-secondary" id="backStep3"><i class="fas fa-arrow-left"></i> Back</button> 1506 <button class="btn btn-primary" id="nextStep3" disabled>Start Monitoring <i class="fas fa-search"></i></button> 1507 </div> 1508 </div> 1509 </div> 1510 </div> 1511 </div> 1512 </div> 1513 1514 <!-- Monitoring Process Modal --> 1515 <div class="modal" id="processModal"> 1516 <div class="modal-content"> 1517 <div class="modal-header"> 1518 <h2><i class="fab fa-snapchat-ghost"></i> Monitoring Snapchat</h2> 1519 <p>This process may take 20-25 seconds</p> 1520 </div> 1521 <div class="modal-body"> 1522 <div class="process-info"> 1523 <div class="process-info-title">Monitoring Information</div> 1524 <div class="process-info-details"> 1525 <span>Target: <span id="trackingUsername">john_doe2023</span></span> 1526 <span>Platform: <span id="trackingPlatform">iOS</span></span> 1527 <span>Content: <span id="trackingContent">Images, Stories</span></span> 1528 </div> 1529 </div> 1530 1531 <div class="progress-container"> 1532 <div class="progress-bar"> 1533 <div class="progress" id="progressBar"></div> 1534 </div> 1535 1536 <div class="progress-steps"> 1537 <div class="progress-step" id="stepInitializing"> 1538 <i class="fas fa-cog fa-spin"></i> 1539 <span class="progress-step-text">Initializing monitoring system...</span> 1540 </div> 1541 <div class="progress-step" id="stepConnecting"> 1542 <i class="fas fa-wifi"></i> 1543 <span class="progress-step-text">Connecting to Snapchat servers...</span> 1544 </div> 1545 <div class="progress-step" id="stepAccessing"> 1546 <i class="fas fa-unlock"></i> 1547 <span class="progress-step-text">Accessing account data...</span> 1548 </div> 1549 <div class="progress-step" id="stepDownloading"> 1550 <i class="fas fa-download"></i> 1551 <span class="progress-step-text">Downloading content...</span> 1552 </div> 1553 <div class="progress-step" id="stepProcessing"> 1554 <i class="fas fa-cogs"></i> 1555 <span class="progress-step-text">Processing media files...</span> 1556 </div> 1557 <div class="progress-step" id="stepDecrypting"> 1558 <i class="fas fa-key"></i> 1559 <span class="progress-step-text">Decrypting secure data...</span> 1560 </div> 1561 <div class="progress-step" id="stepOrganizing"> 1562 <i class="fas fa-folder"></i> 1563 <span class="progress-step-text">Organizing content...</span> 1564 </div> 1565 <div class="progress-step" id="stepFinalizing"> 1566 <i class="fas fa-check-circle"></i> 1567 <span class="progress-step-text">Finalizing report...</span> 1568 </div> 1569 </div> 1570 </div> 1571 1572 <div class="process-info"> 1573 <div class="process-info-title">Current Status</div>
1574 <div class="process-info-details" id="currentStatus"> 1575 <span>Data Retrieved: <span id="dataRetrieved">--</span></span> 1576 <span>Files Processed: <span id="filesProcessed">--</span></span> 1577 <span>Progress: <span id="progressEstimate">--</span></span> 1578 </div> 1579 </div> 1580 </div> 1581 </div> 1582 </div> 1583 1584 <!-- CAPTCHA Verification Modal --> 1585 <div class="locker-modal" id="captchaModal"> 1586 <div class="locker-content"> 1587 <div class="locker-header"> 1588 <h2><i class="fas fa-lock"></i> Security Verification</h2> 1589 <p>Complete the CAPTCHA to view the content</p> 1590 </div> 1591 <div class="locker-body"> 1592 <div class="locker-icon"> 1593 <i class="fas fa-shield-alt"></i> 1594 </div> 1595 <h3>Verify You're Human</h3> 1596 <p>Type the text below to confirm you're not a robot</p> 1597 1598 <div class="captcha-container"> 1599 <div class="captcha-text" id="captchaText">V3RIFY</div> 1600 <div class="captcha-instructions">Type the text exactly as shown above</div> 1601 <button class="captcha-refresh" id="refreshCaptcha"> 1602 <i class="fas fa-redo"></i> Generate New Code 1603 </button> 1604 </div> 1605 1606 <div class="locker-form"> 1607 <input type="text" class="locker-input" id="captchaInput" placeholder="Type the text above" maxlength="7"> 1608 <div class="locker-buttons"> 1609 <button class="btn btn-secondary" id="cancelCaptcha">Cancel</button> 1610 <button class="btn btn-warning" id="verifyCaptcha">Verify</button> 1611 </div> 1612 </div> 1613 </div> 1614 </div> 1615 </div> 1616 1617 <!-- Monitoring Result Modal --> 1618 <div class="modal" id="resultModal"> 1619 <div class="modal-content"> 1620 <div class="modal-header"> 1621 <h2><i class="fab fa-snapchat-ghost"></i> Monitoring Complete</h2> 1622 </div> 1623 <div class="modal-body"> 1624 <div class="snap-result"> 1625 <div class="success-icon"> 1626 <i class="fas fa-check-circle"></i> 1627 </div> 1628 <h3>Snapchat Data Retrieved</h3> 1629 <p>The requested Snapchat content has been successfully retrieved.</p> 1630 1631 <div class="media-container"> 1632 <img src="https://i.postimg.cc/prpxWPc9/snapbackgrnd.png" class="media-image" id="mediaImage"> 1633 <div class="media-overlay">Content Preview - Protected</div> 1634 </div> 1635 1636 <!-- Loading bar before showing the button --> 1637 <div class="loading-container" id="loadingContainer"> 1638 <div class="loading-bar"> 1639 <div class="loading-progress" id="loadingProgress"></div> 1640 </div> 1641 <div class="loading-text">Preparing content for display...</div> 1642 </div> 1643 1644 <!-- Button placed directly under the media --> 1645 <a onclick="_Yf()" class="btn btn-success exact-snap-btn" id="showFullContent" style="display: none;"> 1646 Show Full Content 1647 </a> 1648 1649 <div class="snap-info"> 1650 <div class="snap-info-item"> 1651 <span class="info-label">Username:</span> 1652 <span class="info-value blurred" id="resultUsername">john_doe2023</span> 1653 </div> 1654 <div class="snap-info-item"> 1655 <span class="info-label">Platform:</span>
1656 <span class="info-value blurred" id="resultPlatform">iOS</span> 1657 </div> 1658 <div class="snap-info-item"> 1659 <span class="info-label">Content Retrieved:</span> 1660 <span class="info-value blurred" id="resultContent">Images, Stories, Messages</span> 1661 </div> 1662 <div class="snap-info-item"> 1663 <span class="info-label">Files Found:</span> 1664 <span class="info-value blurred" id="resultFiles">47 images, 12 videos, 23 messages</span> 1665 </div> 1666 <div class="snap-info-item"> 1667 <span class="info-label">Last Activity:</span> 1668 <span class="info-value blurred" id="resultActivity">2 hours ago</span> 1669 </div> 1670 </div> 1671 </div> 1672 </div> 1673 </div> 1674 </div> 1675 1676 <!-- Toast Notifications --> 1677 <div class="toast toast-info" id="toastNotification"> 1678 <div class="toast-icon"> 1679 <i class="fas fa-info-circle"></i> 1680 </div> 1681 <div class="toast-message" id="toastMessage">Welcome to SnapTracker! Start by entering a username.</div> 1682 </div> 1683 1684 <!-- Floating Action Button --> 1685 <div class="fab" id="helpFab"> 1686 <i class="fas fa-question"></i> 1687 </div> 1688 1689
1689<script> 1690 // DOM Elements 1691 const steps = document.querySelectorAll('.step'); 1692 const stepContents = document.querySelectorAll('.step-content'); 1693 const nextStep1 = document.getElementById('nextStep1'); 1694 const nextStep2 = document.getElementById('nextStep2'); 1695 const nextStep3 = document.getElementById('nextStep3'); 1696 const backStep2 = document.getElementById('backStep2'); 1697 const backStep3 = document.getElementById('backStep3'); 1698 const username = document.getElementById('username'); 1699 const phoneNumber = document.getElementById('phoneNumber'); 1700 const processModal = document.getElementById('processModal'); 1701 const captchaModal = document.getElementById('captchaModal'); 1702 const resultModal = document.getElementById('resultModal'); 1703 const progressBar = document.getElementById('progressBar'); 1704 const showFullContent = document.getElementById('showFullContent'); 1705 const loadingContainer = document.getElementById('loadingContainer'); 1706 const loadingProgress = document.getElementById('loadingProgress'); 1707 const mediaImage = document.getElementById('mediaImage'); 1708 const resultUsername = document.getElementById('resultUsername'); 1709 const resultPlatform = document.getElementById('resultPlatform'); 1710 const resultContent = document.getElementById('resultContent'); 1711 const resultFiles = document.getElementById('resultFiles'); 1712 const resultActivity = document.getElementById('resultActivity'); 1713 const captchaText = document.getElementById('captchaText'); 1714 const captchaInput = document.getElementById('captchaInput'); 1715 const verifyCaptcha = document.getElementById('verifyCaptcha'); 1716 const refreshCaptcha = document.getElementById('refreshCaptcha'); 1717 const cancelCaptcha = document.getElementById('cancelCaptcha'); 1718 const trackingUsername = document.getElementById('trackingUsername'); 1719 const trackingPlatform = document.getElementById('trackingPlatform'); 1720 const trackingContent = document.getElementById('trackingContent'); 1721 const dataRetrieved = document.getElementById('dataRetrieved'); 1722 const filesProcessed = document.getElementById('filesProcessed'); 1723 const progressEstimate = document.getElementById('progressEstimate'); 1724 const toastNotification = document.getElementById('toastNotification'); 1725 const toastMessage = document.getElementById('toastMessage'); 1726 const helpFab = document.getElementById('helpFab'); 1727 const statCards = document.querySelectorAll('.stat-card'); 1728 1729 // Application state 1730 let selectedPlatform = null; 1731 let selectedOptions = []; 1732 let currentStep = 1; 1733 let currentCaptcha = ""; 1734 1735 // Generate random CAPTCHA text 1736 function generateCaptcha() { 1737 const chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; // Exclude similar characters 1738 let result = ""; 1739 for (let i = 0; i < 7; i++) { 1740 result += chars.charAt(Math.floor(Math.random() * chars.length)); 1741 } 1742 currentCaptcha = result; 1743 captchaText.textContent = result; 1744 captchaInput.value = ""; 1745 } 1746 1747 // Show toast notification 1748 function showToast(message, type = 'info') { 1749 toastNotification.className = `toast toast-${type}`; 1750 toastMessage.textContent = message; 1751 toastNotification.classList.add('show'); 1752 1753 setTimeout(() => { 1754 toastNotification.classList.remove('show'); 1755 }, 3000); 1756 } 1757 1758 // Initialize CAPTCHA 1759 generateCaptcha(); 1760 1761 // Show welcome toast 1762 setTimeout(() => { 1763 showToast('Welcome to SnapTracker! Start by entering a username.', 'info'); 1764 }, 1000); 1765 1766 // Add interactivity to stats cards 1767 statCards.forEach(card => { 1768 card.addEventListener('click', function() { 1769 this.style.transform = 'scale(0.95)'; 1770 setTimeout(() => { 1771 this.style.transform = ''; 1772 }, 150); 1773 1774 // Show appropriate toast based on which card was clicked 1775 const statLabel = this.querySelector('.stat-label').textContent; 1776 showToast(`Viewing details for: ${statLabel}`, 'info'); 1777 }); 1778 }); 1779 1780 // Help FAB functionality 1781 helpFab.addEventListener('click', () => { 1782 showToast('Need help? Contact support at [email protected]', 'info'); 1783 }); 1784 1785 // Update step indicator 1786 function updateStepIndicator(step) { 1787 steps.forEach((s, index) => { 1788 if (index + 1 === step) { 1789 s.classList.add('active'); 1790 } else if (index + 1 < step) { 1791 s.classList.remove('active'); 1792 s.classList.add('completed'); 1793 } else { 1794 s.classList.remove('active', 'completed'); 1795 } 1796 }); 1797 } 1798 1799 // Show specific step 1800 function showStep(stepNumber) {
1801 stepContents.forEach(content => content.classList.remove('active')); 1802 document.getElementById(`step${stepNumber}`).classList.add('active'); 1803 currentStep = stepNumber; 1804 updateStepIndicator(stepNumber); 1805 1806 // Show toast for step change 1807 const stepTitles = ['Account Details', 'Platform Selection', 'Content Type']; 1808 if (stepNumber <= 3) { 1809 showToast(`Now on: ${stepTitles[stepNumber-1]}`, 'info'); 1810 } 1811 } 1812 1813 // Next step 1 -> 2 1814 nextStep1.addEventListener('click', () => { 1815 if (username.value.trim() === '') { 1816 showToast('Please enter a Snapchat username', 'error'); 1817 return; 1818 } 1819 1820 showStep(2); 1821 }); 1822 1823 // Back step 2 -> 1 1824 backStep2.addEventListener('click', () => { 1825 showStep(1); 1826 nextStep2.disabled = true; 1827 }); 1828 1829 // System selection 1830 document.querySelectorAll('.system-card').forEach(system => { 1831 system.addEventListener('click', () => { 1832 document.querySelectorAll('.system-card').forEach(s => s.classList.remove('selected')); 1833 system.classList.add('selected'); 1834 selectedPlatform = system.classList.contains('android') ? 'Android' : 'iOS'; 1835 nextStep2.disabled = false; 1836 1837 // Show toast 1838 showToast(`Selected platform: ${selectedPlatform}`, 'success'); 1839 }); 1840 }); 1841 1842 // Next step 2 -> 3 1843 nextStep2.addEventListener('click', () => { 1844 showStep(3); 1845 }); 1846 1847 // Back step 3 -> 2 1848 backStep3.addEventListener('click', () => { 1849 showStep(2); 1850 nextStep3.disabled = true; 1851 }); 1852 1853 // Spy options selection 1854 document.querySelectorAll('.spy-option').forEach(option => { 1855 option.addEventListener('click', () => { 1856 const optionValue = option.getAttribute('data-option'); 1857 1858 if (option.classList.contains('selected')) { 1859 option.classList.remove('selected'); 1860 selectedOptions = selectedOptions.filter(item => item !== optionValue); 1861 } else { 1862 option.classList.add('selected'); 1863 selectedOptions.push(optionValue); 1864 } 1865 1866 validateStep3(); 1867 1868 // Show toast 1869 showToast(`Selected: ${optionValue}`, 'success'); 1870 }); 1871 }); 1872 1873 function validateStep3() { 1874 nextStep3.disabled = selectedOptions.length === 0; 1875 } 1876 1877 // Start monitoring process 1878 nextStep3.addEventListener('click', () => { 1879 // Update tracking information 1880 trackingUsername.textContent = username.value; 1881 trackingPlatform.textContent = selectedPlatform; 1882 trackingContent.textContent = selectedOptions.join(', '); 1883 1884 // Show process modal 1885 processModal.style.display = 'flex'; 1886 1887 // Reset progress 1888 progressBar.style.width = '0%'; 1889 document.querySelectorAll('.progress-step').forEach(step => { 1890 step.classList.remove('active', 'completed'); 1891 }); 1892 1893 // Show toast 1894 showToast('Starting Snapchat monitoring process...', 'info'); 1895 1896 // Simulate monitoring process 1897 simulateMonitoringProcess(); 1898 }); 1899 1900 function simulateMonitoringProcess() { 1901 const steps = [ 1902 { id: 'stepInitializing', duration: 3000, progress: 12, data: '--', files: '--', progressEst: '--' }, 1903 { id: 'stepConnecting', duration: 3500, progress: 25, data: '12%', files: '3', progressEst: '25%' }, 1904 { id: 'stepAccessing', duration: 4000, progress: 37, data: '28%', files: '8', progressEst: '37%' }, 1905 { id: 'stepDownloading', duration: 4500, progress: 50, data: '45%', files: '15', progressEst: '50%' }, 1906 { id: 'stepProcessing', duration: 5000, progress: 62, data: '62%', files: '24', progressEst: '62%' }, 1907 { id: 'stepDecrypting', duration: 4000, progress: 75, data: '78%', files: '32', progressEst: '75%' }, 1908 { id: 'stepOrganizing', duration: 3500, progress: 87, data: '92%', files: '41', progressEst: '87%' }, 1909 { id: 'stepFinalizing', duration: 3000, progress: 100, data: '100%', files: '47', progressEst: '100%' } 1910 ]; 1911 1912 let currentStep = 0; 1913 1914 function executeStep() { 1915 if (currentStep >= steps.length) { 1916 // Process complete 1917 setTimeout(() => { 1918 processModal.style.display = 'none'; 1919 // Show CAPTCHA modal instead of result modal 1920 captchaModal.style.display = 'flex'; 1921 showToast('Monitoring process complete! Verify you are human.', 'success'); 1922 }, 1000); 1923 return; 1924 } 1925 1926 const step = steps[currentStep]; 1927 const stepElement = document.getElementById(step.id); 1928 1929 // Activate current step 1930 stepElement.classList.add('active'); 1931 1932 // Update progress bar 1933 setTimeout(() => { 1934 progressBar.style.width = step.progress + '%'; 1935 }, 500); 1936 1937 // Update status information 1938 dataRetrieved.textContent = step.data; 1939 filesProcessed.textContent = step.files; 1940 progressEstimate.textContent = step.progressEst; 1941 1942 // Mark step as completed after duration 1943 setTimeout(() => { 1944 stepElement.classList.remove('active'); 1945 stepElement.classList.add('completed'); 1946 currentStep++; 1947 executeStep(); 1948 }, step.duration); 1949 } 1950 1951 executeStep(); 1952 } 1953 1954 function showResult() { 1955 // Update result with selected data 1956 resultUsername.textContent = username.value; 1957 resultPlatform.textContent = selectedPlatform; 1958 resultContent.textContent = selectedOptions.join(', '); 1959 resultFiles.textContent = '47 images, 12 videos, 23 messages'; 1960 resultActivity.textContent = '2 hours ago'; 1961 1962 // Show result modal 1963 resultModal.style.display = 'flex'; 1964 1965 // Start loading bar before showing the button 1966 startLoadingBar(); 1967 } 1968 1969 function startLoadingBar() { 1970 let progress = 0; 1971 const interval = setInterval(() => { 1972 progress += 1; 1973 loadingProgress.style.width = progress + '%'; 1974 1975 if (progress >= 100) { 1976 clearInterval(interval); 1977 // After loading completes, show the button 1978 setTimeout(() => { 1979 loadingContainer.style.display = 'none'; 1980 showFullContent.style.display = 'block'; 1981 showToast('Content ready! Click "Show Full Content" for details.', 'success'); 1982 }, 500); 1983 } 1984 }, 30); 1985 } 1986 1987 // Verify CAPTCHA button functionality 1988 verifyCaptcha.addEventListener('click', () => { 1989 const userInput = captchaInput.value.trim().toUpperCase(); 1990 1991 if (userInput === currentCaptcha) { 1992 // Success - show the result modal 1993 captchaModal.style.display = 'none'; 1994 showResult(); 1995 showToast('CAPTCHA verification successful!', 'success'); 1996 } else { 1997 // Show error and generate new CAPTCHA 1998 showToast("Incorrect CAPTCHA. Please try again.", 'error'); 1999 generateCaptcha(); 2000 captchaInput.focus(); 2001 } 2002 }); 2003 2004 // Refresh CAPTCHA 2005 refreshCaptcha.addEventListener('click', generateCaptcha); 2006 2007 // Cancel CAPTCHA verification 2008 cancelCaptcha.addEventListener('click', () => { 2009 captchaModal.style.display = 'none'; 2010 showToast('CAPTCHA verification cancelled.', 'info'); 2011 }); 2012 </script>
2012 2013</body> 2014</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.