Help
RSS
API
Feed
Maltego
Contact
Domain > bichostars.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-07-23
3.161.136.107
(
ClassC
)
2025-10-14
3.163.24.94
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Tue, 14 Oct 2025 15:58:48 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://bichostars.com/X-Cache: Redirect from cloudfrontVia: 1.1 4894bef31db1c311602a51393339af0a.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P2Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: hujv2Oq533sAvtTsf0mtsL1RDAEMQ-qI3_nwSPmJL0YiCVXZ1aeeggX-XSS-Protection: 1; modeblockX-Frame-Options: SAMEORIGINReferrer-Policy: strict-origin-when-cross-originX-Content-Type-Options: nosniffVary: Origin html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/html; charsetUTF-8Content-Length: 131790Connection: keep-aliveDate: Tue, 14 Oct 2025 15:58:48 GMTServer: Apache/2.4.58 (Ubuntu)Vary: Accept-EncodingX-Cache: Miss from cloudfrontVia: 1.1 c6aabec83f5c081149a8843767dacc52.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P2Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: yPkh0tPheU4O2_2_qoBbSPraCIwEMOlTPdUVHjvTU2cfxhJT_fqSbAX-XSS-Protection: 1; modeblockX-Frame-Options: SAMEORIGINReferrer-Policy: strict-origin-when-cross-originX-Content-Type-Options: nosniffStrict-Transport-Security: max-age31536000Vary: Origin !DOCTYPE html>html langpt-BR>head> meta charsetutf-8> title>BichoStars - Jogo do Bicho Online/title> meta nameviewport contentwidthdevice-width, initial-scale1.0> meta namedescription contentBichoStars - O melhor jogo do bicho online> meta nametheme-color content#000000> !-- Cloudflare Turnstile --> script srchttps://challenges.cloudflare.com/turnstile/v0/api.js async defer>/script> !-- Favicon --> link relshortcut icon href../../../assets/global/images/favicon.ico typeimage/x-icon> !-- Fonts --> link hrefhttps://fonts.googleapis.com/css2?familyInter:wght@300;400;500;600;700;800&displayswap relstylesheet> link hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css relstylesheet> !-- jQuery --> script srchttps://code.jquery.com/jquery-3.6.0.min.js>/script> !-- SweetAlert2 --> link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css> script srchttps://cdn.jsdelivr.net/npm/sweetalert2@11>/script> !-- PWA Manifest --> link relmanifest href../../../assets/pwa/manifest.json> !-- Preload Critical Images --> !-- Logo --> link relpreload href../../../bets/img2020/logo-2020-branca.png asimage typeimage/png> !-- Banner Images - Desktop --> link relpreload href../../bets/img2020/desktop10.jpeg asimage typeimage/jpeg> link relpreload href../../bets/img2020/novidadedesktop.svg asimage typeimage/svg+xml> link relpreload href../../bets/img2020/diasorte.png asimage typeimage/png> !-- Banner Images - Tablet --> link relpreload href../../bets/img2020/tablet10.jpeg asimage typeimage/jpeg media(max-width: 1000px)> link relpreload href../../bets/img2020/novidadews.svg asimage typeimage/svg+xml media(max-width: 1000px)> link relpreload href../../bets/img2020/diasortews.jpeg asimage typeimage/jpeg media(max-width: 1000px)> !-- Banner Images - Mobile --> link relpreload href../../bets/img2020/mobile10.jpeg asimage typeimage/jpeg media(max-width: 580px)> link relpreload href../../bets/img2020/novidademobile.svg asimage typeimage/svg+xml media(max-width: 580px)> link relpreload href../../bets/img2020/diasorteh.jpeg asimage typeimage/jpeg media(max-width: 580px)> style> :root { --black: #000000; --white: #FFFFFF; --gray-light: #BFBFBF; --gray-medium: #666666; --gray-dark: #444444; --green-neon: #00FF3C; --green-dark: #01773E; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Inter, sans-serif; background: var(--black); color: var(--white); line-height: 1.6; overflow-x: hidden; } /* Header */ .header { background: linear-gradient(135deg, var(--black) 0%, rgba(0, 255, 60, 0.05) 100%); padding: 1.2rem 0; position: sticky; top: 0; z-index: 1000; box-shadow: 0 8px 32px rgba(0, 255, 60, 0.2); border-bottom: 2px solid rgba(0, 255, 60, 0.3); backdrop-filter: blur(10px); } .nav-container { max-width: 1200px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; padding: 0 2rem; position: relative; } .nav-container::before { content: ; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(circle at 20% 50%, rgba(0, 255, 60, 0.1) 0%, transparent 50%), radial-gradient(circle at 80% 50%, rgba(0, 255, 60, 0.08) 0%, transparent 50%); animation: navGlow 4s ease-in-out infinite alternate; pointer-events: none; } @keyframes navGlow { 0% { opacity: 0.5; } 100% { opacity: 1; } } .logo { position: relative; z-index: 2; } .logo img { height: 42px; transition: all 0.3s ease; filter: drop-shadow(0 0 8px rgba(0, 255, 60, 0.2)); } .logo img:hover { transform: scale(1.05); filter: drop-shadow(0 0 15px rgba(0, 255, 60, 0.5)); } .nav-buttons { display: flex; gap: 1.2rem; align-items: center; position: relative; z-index: 2; } .btn { padding: 0.6rem 1.2rem; border: none; border-radius: 8px; font-weight: 500; cursor: pointer; transition: all 0.3s ease; text-decoration: none; display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; position: relative; overflow: hidden; } .btn::before { content: ; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; } .btn:hover::before { left: 100%; } .btn-primary { background: linear-gradient(135deg, var(--green-neon) 0%, var(--green-dark) 100%); color: var(--black); box-shadow: 0 4px 15px rgba(0, 255, 60, 0.2); } .btn-primary:hover { transform: translateY(-3px); box-shadow: 0 8px 25px rgba(0, 255, 60, 0.4); background: linear-gradient(135deg, var(--green-dark) 0%, var(--green-neon) 100%); } .btn-secondary { background: rgba(0, 255, 60, 0.1); color: var(--green-neon); border: 2px solid rgba(0, 255, 60, 0.3); backdrop-filter: blur(10px); } .btn-secondary:hover { background: rgba(0, 255, 60, 0.2); border-color: var(--green-neon); color: var(--white); transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0, 255, 60, 0.2); } /* Banner Section */ .banner-section { position: relative; background: var(--black); overflow: hidden; padding: 2.5rem 0; } .banner-carousel { position: relative; width: 100%; overflow: hidden; } .carousel-container { position: relative; width: 100%; } .carousel-slide { position: absolute; top: 0; left: 0; width: 100%; opacity: 0; transition: opacity 0.5s ease-in-out; } .carousel-slide.active { opacity: 1; position: relative; } .carousel-image { width: 100%; height: auto; display: block; max-height: 70vh; object-fit: contain; object-position: center; border-radius: 15px; box-shadow: 0 10px 40px rgba(0, 255, 60, 0.2); } .carousel-btn { position: absolute; top: 50%; transform: translateY(-50%); background: rgba(0, 0, 0, 0.7); color: var(--white); border: none; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; transition: all 0.3s ease; z-index: 10; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; } .carousel-btn:hover { background: var(--green-neon); color: var(--black); transform: translateY(-50%) scale(1.1); } .carousel-prev { left: 20px; } .carousel-next { right: 20px; } .carousel-dots { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); display: flex; gap: 10px; z-index: 10; background: rgba(0, 0, 0, 0.5); padding: 10px 15px; border-radius: 20px; } .dot { width: 12px; height: 12px; border-radius: 50%; background: rgba(255, 255, 255, 0.5); cursor: pointer; transition: all 0.3s ease; } .dot.active { background: var(--green-neon); transform: scale(1.2); } .dot:hover { background: var(--white); } /* CTA Section */ .banner-cta { background: linear-gradient(135deg, var(--black) 0%, rgba(0, 255, 60, 0.15) 100%); padding: 2.5rem 0; text-align: center; border-top: 1px solid var(--green-neon); margin-top: 2rem; } .cta-content h2 { font-size: 1.6rem; font-weight: 600; margin-bottom: 1.5rem; color: var(--white); } .cta-buttons { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; } /* Container */ .container { max-width: 1200px; margin: 0 auto; padding: 0 2rem; } /* Section */ .section { padding: 2.5rem 0; } .section-title { font-size: 1.8rem; font-weight: 600; text-align: center; margin-bottom: 1.5rem; color: var(--green-neon); } /* Results Section */ .results-section { background: linear-gradient(135deg, var(--black) 0%, rgba(0, 255, 60, 0.1) 100%); border: 2px solid var(--green-neon); border-radius: 20px; padding: 2rem; margin-bottom: 2rem; box-shadow: 0 10px 40px rgba(0, 255, 60, 0.2); } .results-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; flex-wrap: wrap; gap: 1rem; } .results-date { font-size: 1rem; font-weight: 500; color: var(--green-neon); } .date-navigation { display: flex; gap: 0.5rem; align-items: center; } .date-btn { background: var(--black); border: 1px solid var(--green-neon); color: var(--green-neon); padding: 0.5rem; border-radius: 6px; cursor: pointer; transition: all 0.3s ease; } .date-btn:hover { background: var(--green-neon); color: var(--black); } .refresh-btn { background: linear-gradient(135deg, var(--green-neon) 0%, var(--green-dark) 100%); color: var(--black); border: none; padding: 0.75rem 1.5rem; border-radius: 8px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .refresh-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(0, 255, 60, 0.3); } .lottery-tabs { display: flex; gap: 0.5rem; margin-bottom: 2rem; overflow-x: auto; padding-bottom: 0.5rem; scrollbar-width: thin; scrollbar-color: var(--green-neon) transparent; } .lottery-tabs::-webkit-scrollbar { height: 4px; } .lottery-tabs::-webkit-scrollbar-track { background: rgba(0, 255, 60, 0.1); border-radius: 2px; } .lottery-tabs::-webkit-scrollbar-thumb { background: var(--green-neon); border-radius: 2px; } .mobile-only { display: none; } .lottery-select-container { position: relative; margin-bottom: 2rem; } .lottery-select { width: 100%; background: var(--black); color: var(--white); border: 2px solid rgba(0, 255, 60, 0.3); padding: 0.75rem 2.5rem 0.75rem 1rem; border-radius: 8px; font-size: 0.9rem; font-weight: 500; appearance: none; cursor: pointer; transition: all 0.3s ease; } .lottery-select:focus { border-color: var(--green-neon); box-shadow: 0 0 0 3px rgba(0, 255, 60, 0.2); outline: none; } .lottery-select option { background: var(--black); color: var(--white); padding: 0.5rem; } .select-arrow { position: absolute; right: 1rem; top: 50%; transform: translateY(-50%); color: var(--green-neon); pointer-events: none; font-size: 0.8rem; } .lottery-tab { background: var(--black); color: var(--white); border: 1px solid rgba(0, 255, 60, 0.3); padding: 0.5rem 0.75rem; border-radius: 6px; cursor: pointer; transition: all 0.3s ease; white-space: nowrap; font-weight: 500; font-size: 0.85rem; flex-shrink: 0; min-width: fit-content; } .lottery-tab.active { background: var(--green-neon); color: var(--black); border: 1px solid var(--green-neon); box-shadow: 0 0 15px rgba(0, 255, 60, 0.3); } .lottery-tab:hover:not(.active) { background: rgba(0, 255, 60, 0.1); border-color: var(--green-neon); } .results-grid { display: flex; gap: 1.5rem; overflow-x: auto; overflow-y: hidden; padding-bottom: 1rem; scroll-behavior: smooth; } .results-grid::-webkit-scrollbar { height: 8px; } .results-grid::-webkit-scrollbar-track { background: rgba(0, 255, 60, 0.1); border-radius: 10px; } .results-grid::-webkit-scrollbar-thumb { background: var(--green-neon); border-radius: 10px; transition: all 0.3s ease; } .results-grid::-webkit-scrollbar-thumb:hover { background: var(--green-dark); } /* Scroll Indicator */ .scroll-indicator { position: absolute; bottom: -50px; left: 50%; transform: translateX(-50%); pointer-events: none; z-index: 10; opacity: 0.9; transition: opacity 0.5s ease; display: flex; align-items: center; gap: 0.5rem; } .scroll-indicator-hand { font-size: 2rem; animation: swipeGesture 2s ease-in-out infinite; } .scroll-indicator-trail { display: flex; gap: 0.3rem; align-items: center; } .scroll-indicator-arrow { color: var(--green-neon); font-size: 1.5rem; animation: arrowPulse 2s ease-in-out infinite; } .scroll-indicator.hidden { opacity: 0; pointer-events: none; } .results-section { position: relative; } @keyframes swipeGesture { 0%, 100% { transform: translateX(60px); opacity: 0.4; } 50% { transform: translateX(-60px); opacity: 1; } } @keyframes arrowPulse { 0%, 100% { opacity: 0.3; transform: translateX(10px); } 50% { opacity: 1; transform: translateX(-10px); } } /* Mobile adjustments for scroll indicator */ @media (max-width: 768px) { .scroll-indicator { bottom: -45px; } .scroll-indicator-hand { font-size: 1.8rem; } .scroll-indicator-arrow { font-size: 1.3rem; } } @media (max-width: 480px) { .scroll-indicator { bottom: -40px; } .scroll-indicator-hand { font-size: 1.5rem; } .scroll-indicator-arrow { font-size: 1.2rem; } } .result-card { background: linear-gradient(145deg, var(--black) 0%, rgba(0, 255, 60, 0.05) 100%); border-radius: 15px; padding: 1rem; border: 2px solid rgba(0, 255, 60, 0.3); transition: all 0.3s ease; position: relative; overflow: hidden; min-width: 240px; flex-shrink: 0; } .result-card::before { content: ; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--green-neon) 0%, var(--green-dark) 100%); } .result-card:hover { border-color: var(--green-neon); box-shadow: 0 10px 30px rgba(0, 255, 60, 0.2); transform: translateY(-2px); } .result-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; } .result-emoji { font-size: 1.2rem; } .result-name { font-weight: 500; font-size: 0.85rem; } .result-prizes { display: grid; gap: 0.5rem; } .prize-row { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem; background: rgba(0, 255, 60, 0.05); border: 1px solid rgba(0, 255, 60, 0.2); border-radius: 8px; transition: all 0.3s ease; } .prize-row:hover { background: rgba(0, 255, 60, 0.1); border-color: var(--green-neon); } .prize-position { font-weight: 500; color: var(--gray-light); font-size: 0.75rem; } .prize-number { font-weight: 600; color: var(--green-neon); font-size: 0.85rem; } .prize-group { font-weight: 500; color: var(--white); font-size: 0.8rem; } /* Quotation Section */ .quotation-section { background: linear-gradient(135deg, var(--black) 0%, rgba(0, 255, 60, 0.1) 100%); border: 2px solid var(--green-neon); border-radius: 20px; padding: 2rem; margin-bottom: 2rem; box-shadow: 0 10px 40px rgba(0, 255, 60, 0.2); } .quotation-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: 2rem; } .quotation-table { background: linear-gradient(145deg, var(--black) 0%, rgba(0, 255, 60, 0.03) 100%); border-radius: 15px; overflow: hidden; border: 2px solid rgba(0, 255, 60, 0.4); box-shadow: 0 8px 25px rgba(0, 255, 60, 0.15); transition: all 0.3s ease; } .quotation-table:hover { transform: translateY(-2px); box-shadow: 0 12px 35px rgba(0, 255, 60, 0.2); border-color: var(--green-neon); } .table-header { background: linear-gradient(135deg, var(--green-dark) 0%, var(--green-neon) 100%); color: var(--black); padding: 1rem; text-align: center; font-weight: 600; font-size: 1.1rem; position: relative; overflow: hidden; } .table-header::before { content: ; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.6s; } .table-header:hover::before { left: 100%; } .table-content { padding: 0; } .table-row { display: grid; grid-template-columns: 1fr auto auto; gap: 1rem; padding: 0.75rem 1rem; border-bottom: 1px solid rgba(0, 255, 60, 0.15); align-items: center; transition: all 0.3s ease; position: relative; } .table-row:last-child { border-bottom: none; } .table-row:hover { background: linear-gradient(90deg, rgba(0, 255, 60, 0.08) 0%, rgba(0, 255, 60, 0.03) 100%); border-color: rgba(0, 255, 60, 0.4); transform: translateX(3px); } .table-row:hover::before { content: ; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--green-neon); } .modality { font-weight: 500; font-size: 0.85rem; color: var(--white); } .bonus { color: var(--gray-light); font-size: 0.75rem; font-weight: 400; } .quotation { color: var(--green-neon); font-weight: 600; font-size: 0.95rem; text-shadow: 0 0 8px rgba(0, 255, 60, 0.2); } /* Footer */ .footer { background: var(--black); padding: 3rem 0 2rem; border-top: 1px solid var(--gray-dark); } .footer-content { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 2rem; margin-bottom: 2rem; } .footer-section h3 { color: var(--green-neon); margin-bottom: 1rem; } .social-links { display: flex; gap: 1rem; } .social-link { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: var(--gray-dark); color: var(--white); border-radius: 50%; text-decoration: none; transition: all 0.3s ease; } .social-link:hover { background: var(--green-neon); color: var(--black); transform: translateY(-2px); } .footer-bottom { text-align: center; padding-top: 2rem; border-top: 1px solid rgba(0, 255, 60, 0.2); color: var(--white); } /* Modal Styles */ .swal2-popup.modern-modal { background: linear-gradient(145deg, #0a0a0a 0%, #1a1a1a 100%) !important; color: var(--white) !important; border: 3px solid var(--green-neon) !important; border-radius: 15px !important; box-shadow: 0 25px 50px rgba(0, 255, 60, 0.4), 0 0 0 1px rgba(0, 255, 60, 0.2) !important; padding: 1.5rem !important; backdrop-filter: blur(10px) !important; } .swal2-title { color: var(--green-neon) !important; font-size: 1.6rem !important; font-weight: 700 !important; margin-bottom: 1rem !important; text-shadow: 0 0 20px rgba(0, 255, 60, 0.3) !important; } .swal2-html-container { color: var(--white) !important; } .modal-input { background: #0f0f0f !important; color: var(--white) !important; border: 2px solid rgba(0, 255, 60, 0.5) !important; border-radius: 8px !important; padding: 0.6rem !important; font-size: 0.9rem !important; transition: all 0.3s ease !important; width: 100% !important; margin: 0.15rem 0 !important; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3) !important; } .modal-input:focus { border-color: var(--green-neon) !important; box-shadow: 0 0 0 3px rgba(0, 255, 60, 0.2), inset 0 2px 4px rgba(0, 0, 0, 0.3) !important; outline: none !important; background: #1a1a1a !important; } .modal-input::placeholder { color: var(--gray-light) !important; } .modal-label { display: block !important; color: var(--gray-light) !important; font-weight: 500 !important; margin-bottom: 0.15rem !important; margin-top: 0.5rem !important; font-size: 0.85rem !important; } .modal-checkbox-container { display: flex !important; align-items: center !important; gap: 0.5rem !important; margin: 0.75rem 0 !important; padding: 0.8rem !important; background: #0f0f0f !important; border-radius: 8px !important; border: 2px solid rgba(0, 255, 60, 0.4) !important; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2) !important; } .modal-checkbox { width: 20px !important; height: 20px !important; accent-color: var(--green-neon) !important; } .modal-link { color: var(--green-neon) !important; text-decoration: none !important; font-weight: 600 !important; } .modal-link:hover { text-decoration: underline !important; } .swal2-actions { gap: 1rem !important; margin-top: 2rem !important; } .swal2-confirm { background: linear-gradient(135deg, var(--green-neon) 0%, var(--green-dark) 100%) !important; color: var(--black) !important; border: none !important; border-radius: 12px !important; padding: 1rem 2rem !important; font-weight: 700 !important; font-size: 1.1rem !important; transition: all 0.3s ease !important; } .swal2-confirm:hover { transform: translateY(-2px) !important; box-shadow: 0 10px 25px rgba(0, 255, 60, 0.3) !important; } .swal2-cancel { background: #0f0f0f !important; color: var(--white) !important; border: 2px solid rgba(0, 255, 60, 0.5) !important; border-radius: 12px !important; padding: 1rem 2rem !important; font-weight: 600 !important; transition: all 0.3s ease !important; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3) !important; } .swal2-cancel:hover { background: #1a1a1a !important; border-color: var(--green-neon) !important; box-shadow: 0 0 10px rgba(0, 255, 60, 0.2) !important; } .swal2-close { color: var(--white) !important; font-size: 2rem !important; font-weight: 300 !important; } .swal2-close:hover { color: var(--green-neon) !important; } .modal-form-section { margin-bottom: 0.75rem !important; } .modal-form-row { display: flex !important; gap: 1rem !important; } .modal-form-row .modal-form-section { flex: 1 !important; margin-bottom: 0 !important; } /* Modal responsivo */ @media (max-width: 480px) { .swal2-popup.modern-modal { width: 95% !important; max-width: 400px !important; margin: 1rem !important; padding: 1rem !important; } .modal-form-row { flex-direction: column !important; gap: 0 !important; } .modal-form-row .modal-form-section { margin-bottom: 0.75rem !important; } } .forgot-password-btn { background: none !important; border: none !important; color: var(--green-neon) !important; text-decoration: underline !important; cursor: pointer !important; font-size: 0.9rem !important; margin-top: 1rem !important; } .forgot-password-btn:hover { color: var(--white) !important; } /* Password Eye Toggle */ .password-input-wrapper { position: relative !important; display: flex !important; align-items: center !important; } .password-input-wrapper input { padding-right: 40px !important; } .password-toggle-icon { position: absolute !important; right: 12px !important; top: 50% !important; transform: translateY(-50%) !important; cursor: pointer !important; color: var(--gray-light) !important; font-size: 1.1rem !important; transition: all 0.3s ease !important; z-index: 10 !important; user-select: none !important; } .password-toggle-icon:hover { color: var(--green-neon) !important; } /* Turnstile Cloudflare Widget */ .turnstile-container { margin: 1rem 0 !important; text-align: center !important; display: flex !important; justify-content: center !important; align-items: center !important; min-height: 65px !important; padding: 0.5rem !important; background: rgba(0, 255, 60, 0.05) !important; border-radius: 8px !important; border: 1px solid rgba(0, 255, 60, 0.2) !important; } .turnstile-container > div { margin: 0 auto !important; transform-origin: center !important; } .turnstile-container iframe { border-radius: 6px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; } /* Desktop */ @media (min-width: 481px) { .turnstile-container > div { transform: scale(1) !important; } } /* Mobile */ @media (max-width: 480px) { .turnstile-container { margin: 0.75rem 0 !important; padding: 0.25rem !important; min-height: 50px !important; } .turnstile-container > div { transform: scale(0.85) !important; } } /* Extra small mobile */ @media (max-width: 360px) { .turnstile-container > div { transform: scale(0.75) !important; } } /* Loading Spinner */ .loading-spinner { display: flex; justify-content: center; align-items: center; } .spinner { width: 40px; height: 40px; border: 3px solid rgba(0, 255, 60, 0.2); border-top: 3px solid var(--green-neon); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* CPF Info Card */ .cpf-info-card { background: linear-gradient(145deg, #0f0f0f 0%, #1a1a1a 100%) !important; border: 2px solid var(--green-neon) !important; border-radius: 8px !important; margin: 0.5rem 0 !important; padding: 0 !important; box-shadow: 0 4px 15px rgba(0, 255, 60, 0.15) !important; animation: slideDown 0.3s ease-out !important; } .cpf-card-header { display: flex !important; align-items: center !important; gap: 0.4rem !important; padding: 0.5rem 0.75rem !important; background: linear-gradient(135deg, var(--green-dark) 0%, var(--green-neon) 100%) !important; color: var(--black) !important; font-weight: 600 !important; font-size: 0.8rem !important; border-radius: 6px 6px 0 0 !important; position: relative !important; } .cpf-card-close { position: absolute !important; right: 0.5rem !important; top: 50% !important; transform: translateY(-50%) !important; background: none !important; border: none !important; color: var(--black) !important; cursor: pointer !important; padding: 0.2rem !important; border-radius: 3px !important; transition: all 0.2s ease !important; font-size: 0.8rem !important; } .cpf-card-close:hover { background: rgba(0, 0, 0, 0.1) !important; transform: translateY(-50%) scale(1.1) !important; } .cpf-card-content { padding: 0.6rem !important; display: flex !important; flex-direction: column !important; gap: 0.4rem !important; } .cpf-info-item { display: flex !important; align-items: center !important; gap: 0.5rem !important; padding: 0.35rem 0.5rem !important; background: rgba(0, 255, 60, 0.05) !important; border-radius: 5px !important; border: 1px solid rgba(0, 255, 60, 0.2) !important; transition: all 0.2s ease !important; } .cpf-info-item:hover { background: rgba(0, 255, 60, 0.1) !important; border-color: var(--green-neon) !important; } .cpf-info-item > i { color: var(--green-neon) !important; font-size: 0.85rem !important; width: 16px !important; text-align: center !important; flex-shrink: 0 !important; } .cpf-info-item > div { flex: 1 !important; display: flex !important; flex-direction: column !important; gap: 0.05rem !important; min-width: 0 !important; } .cpf-info-label { font-size: 0.65rem !important; color: var(--gray-light) !important; font-weight: 500 !important; text-transform: uppercase !important; letter-spacing: 0.3px !important; line-height: 1 !important; } .cpf-info-value { font-size: 0.8rem !important; color: var(--white) !important; font-weight: 600 !important; line-height: 1.2 !important; word-break: break-word !important; } @keyframes slideDown { from { opacity: 0 !important; transform: translateY(-10px) !important; } to { opacity: 1 !important; transform: translateY(0) !important; } } /* Mobile adjustments for CPF card */ @media (max-width: 480px) { .cpf-info-card { margin: 0.4rem 0 !important; } .cpf-card-header { padding: 0.4rem 0.6rem !important; font-size: 0.75rem !important; } .cpf-card-close { right: 0.4rem !important; font-size: 0.75rem !important; } .cpf-card-content { padding: 0.5rem !important; gap: 0.3rem !important; } .cpf-info-item { padding: 0.3rem 0.4rem !important; gap: 0.4rem !important; } .cpf-info-item > i { font-size: 0.8rem !important; width: 14px !important; } .cpf-info-label { font-size: 0.6rem !important; } .cpf-info-value { font-size: 0.75rem !important; } } /* Loading */ .loading { text-align: center; padding: 2rem; color: var(--gray-light); } .spinner { border: 3px solid var(--gray-medium); border-top: 3px solid var(--green-neon); border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 0 auto 1rem; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive */ @media (max-width: 768px) { .header { padding: 0.8rem 0; } .nav-container { padding: 0 1rem; } .logo img { height: 28px; } .btn { padding: 0.4rem 0.8rem; font-size: 0.75rem; border-radius: 6px; } .nav-buttons { gap: 0.6rem; } .carousel-image { max-height: 50vh; border-radius: 10px; } .banner-section { padding: 1.5rem 0; } .banner-cta { margin-top: 1.5rem; padding: 1.5rem 0; } .carousel-btn { width: 40px; height: 40px; font-size: 1rem; } .carousel-prev { left: 10px; } .carousel-next { right: 10px; } .carousel-dots { bottom: 10px; padding: 8px 12px; } .dot { width: 10px; height: 10px; } .cta-content h2 { font-size: 1.3rem; } .section-title { font-size: 1.5rem; } .cta-buttons { flex-direction: column; align-items: center; } .section-title { font-size: 2rem; } .results-header { flex-direction: column; align-items: stretch; } .desktop-tabs { display: none; } .mobile-only { display: block; } .extraction-filter { flex-direction: column; align-items: stretch; gap: 0.5rem; padding: 0.75rem; } .extraction-select-container { max-width: none; } .results-grid { grid-template-columns: 1fr; } .quotation-grid { grid-template-columns: 1fr; } } /* Tablet screens */ @media (max-width: 768px) and (min-width: 481px) { .lottery-tabs { flex-wrap: wrap; justify-content: center; gap: 0.4rem; } .lottery-tab { flex: 0 0 auto; min-width: 60px; padding: 0.4rem 0.6rem; font-size: 0.8rem; } } /* Extra small screens */ @media (max-width: 480px) { .header { padding: 0.6rem 0; } .nav-container { padding: 0 0.75rem; } .logo img { height: 24px; } .btn { padding: 0.35rem 0.6rem; font-size: 0.7rem; border-radius: 5px; } .nav-buttons { gap: 0.5rem; } } /* Install Button */ .install-section { background: linear-gradient(135deg, var(--black) 0%, rgba(0, 255, 60, 0.1) 100%); border: 2px solid var(--green-neon); border-radius: 20px; padding: 2.5rem 2rem; text-align: center; margin-bottom: 2rem; position: relative; overflow: hidden; } .install-section::before { content: ; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(circle, rgba(0, 255, 60, 0.1) 0%, transparent 70%); animation: pulse-install 3s ease-in-out infinite; } .install-section h3 { color: var(--green-neon); font-size: 1.5rem; margin-bottom: 0.75rem; position: relative; z-index: 1; font-weight: 600; } .install-section p { color: var(--gray-light); font-size: 0.95rem; margin-bottom: 1.5rem; position: relative; z-index: 1; } .install-button { background: linear-gradient(135deg, var(--green-neon) 0%, var(--green-dark) 100%); color: var(--black); border: none; padding: 0.8rem 1.8rem; border-radius: 10px; font-weight: 600; font-size: 0.95rem; cursor: pointer; transition: all 0.3s ease; position: relative; z-index: 1; box-shadow: 0 6px 20px rgba(0, 255, 60, 0.15); } .install-button:hover { transform: translateY(-5px); box-shadow: 0 15px 35px rgba(0, 255, 60, 0.4); background: linear-gradient(135deg, var(--green-dark) 0%, var(--green-neon) 100%); } @keyframes pulse-install { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.7; } } /style>/head>body> !-- Digisac - Sistema de Atendimento --> script> window._digisac { id: b149e248-a161-4129-a435-421887154756 } /script> script srchttps://webchat.digisac.app/embedded.js>/script> !-- Header --> header classheader> nav classnav-container> div classlogo> img src../../../bets/img2020/logo-2020-branca.png altBichoStars height50 loadingeager> /div> div classnav-buttons> button classbtn btn-secondary onclicklogin()> i classfas fa-sign-in-alt>/i> Login /button> button classbtn btn-primary onclickregister()> i classfas fa-user-plus>/i> Registrar /button> /div> /nav> /header> !-- Banner Section --> section classbanner-section> div classcontainer> div classbanner-carousel> div classcarousel-container> div classcarousel-slide active> picture> source media(max-width:580px) srcset../../bets/img2020/mobile10.jpeg> source media(max-width:1000px) srcset../../bets/img2020/tablet10.jpeg> img src../../bets/img2020/desktop10.jpeg altBanner Promoção 10% classcarousel-image loadingeager fetchpriorityhigh> /picture> /div> div classcarousel-slide> picture> source media(max-width:580px) srcset../../bets/img2020/novidademobile.svg> source media(max-width:1000px) srcset../../bets/img2020/novidadews.svg> img src../../bets/img2020/novidadedesktop.svg altBanner Novidades classcarousel-image loadinglazy> /picture> /div> div classcarousel-slide> picture> source media(max-width:580px) srcset../../bets/img2020/diasorteh.jpeg> source media(max-width:1000px) srcset../../bets/img2020/diasortews.jpeg> img src../../bets/img2020/diasorte.png altBanner Dia de Sorte classcarousel-image loadinglazy> /picture> /div> /div> !-- Carousel Navigation --> button classcarousel-btn carousel-prev onclickprevSlide()> i classfas fa-chevron-left>/i> /button> button classcarousel-btn carousel-next onclicknextSlide()> i classfas fa-chevron-right>/i> /button> !-- Carousel Dots --> div classcarousel-dots> span classdot active onclickcurrentSlide(1)>/span> span classdot onclickcurrentSlide(2)>/span> span classdot onclickcurrentSlide(3)>/span> /div> /div> /div> !-- CTA Section --> div classbanner-cta> div classcontainer> div classcta-content> h2>span stylecolor: var(--green-neon);>Ganhe/span> 10% no primeiro depósito do dia/h2> div classcta-buttons> button classbtn btn-primary onclickregister()> i classfas fa-user-plus>/i> Cadastrar Agora /button> button classbtn btn-secondary onclicklogin()> i classfas fa-sign-in-alt>/i> Já tenho conta /button> /div> /div> /div> /div> /section> div classcontainer> !-- Results Section --> section classsection> h2 classsection-title>Resultados/h2> div classresults-section> div classresults-header> div classresults-date iddataLoteria>Resultados de Hoje/div> div classdate-navigation> button classdate-btn onclickchangeDate(true) titleDia anterior> i classfas fa-chevron-left>/i> /button> button classdate-btn onclickchangeDate(false) titleHoje> i classfas fa-chevron-right>/i> /button> button classrefresh-btn onclickrefreshResults()> i classfas fa-sync-alt>/i> Atualizar /button> /div> /div> !-- Desktop Tabs --> div classlottery-tabs desktop-tabs idlotteryTabs> button classlottery-tab active data-lotteryL-BichoStars>LBS/button> button classlottery-tab data-lotteryL-Rio>RJ/button> button classlottery-tab data-lotteryL-Federal>FED/button> button classlottery-tab data-lotteryL-Goiás>GO/button> button classlottery-tab data-lotteryL-Mundial>LM/button> button classlottery-tab data-lotteryL-Nacional>LN/button> button classlottery-tab data-lotteryL-S.Paulo>SP/button> button classlottery-tab data-lotteryLotep - PB>LTP/button> button classlottery-tab data-lotteryL-Minas>MG/button> button classlottery-tab data-lotteryL-Rio-Invertida-Malukinha>MLK/button> button classlottery-tab data-lotteryL-Bahia>BA/button> button classlottery-tab data-lotteryPT-Paraiba>PTPB/button> button classlottery-tab data-lotteryLotece - CE>LCE/button> /div> !-- Mobile Select --> div classlottery-select-container mobile-only> select classlottery-select idlotterySelect> option valueL-BichoStars>LBS - Loteria BichoStars/option> option valueL-Rio>RJ - Loteria do Rio/option> option valueL-Federal>FED - Loteria Federal/option> option valueL-Goiás>GO - Loteria de Goiás/option> option valueL-Mundial>LM - Loteria Mundial/option> option valueL-Nacional>LN - Loteria Nacional/option> option valueL-S.Paulo>SP - Loteria de São Paulo/option> option valueLotep - PB>LTP - Lotep Paraíba/option> option valueL-Minas>MG - Loteria de Minas/option> option valueL-Rio-Invertida-Malukinha>MLK - Rio Invertida Malukinha/option> option valueL-Bahia>BA - Loteria da Bahia/option> option valuePT-Paraiba>PTPB - PT Paraíba/option> option valueLotece - CE>LCE - Lotece Ceará/option> /select> i classfas fa-chevron-down select-arrow>/i> /div> div classresults-grid idresultsContainer> div classloading> div classspinner>/div> p>Carregando resultados.../p> /div> /div> !-- Scroll Indicator --> div classscroll-indicator idscrollIndicator> div classscroll-indicator-trail> span classscroll-indicator-arrow>←/span> span classscroll-indicator-arrow>←/span> span classscroll-indicator-arrow>←/span> /div> span classscroll-indicator-hand>👆/span> /div> /div> /section> !-- Quotation Section --> section classsection> h2 classsection-title>Cotações/h2> div classquotation-section> div classquotation-grid> div classquotation-table> div classtable-header>Loterias BichoStars/div> div classtable-content> div classtable-row> div classmodality>Quina de Grupo 1/5/div> div classquotation>R$ 10.000,00/div> /div> div classtable-row> div classmodality>Quina de Grupo 1/6/div> div classquotation>R$ 4.000,00/div> /div> div classtable-row> div classmodality>Quina de Grupo 1/7/div> div classquotation>R$ 1.500,00/div> /div> div classtable-row> div classmodality>Milhar/div> div classquotation>R$ 9.000,00/div> /div> div classtable-row> div classmodality>Terno de Dezena 1/5/div> div classquotation>R$ 8.500,00/div> /div> div classtable-row> div classmodality>Terno de Dezena 1/6/div> div classquotation>R$ 3.400,00/div> /div> div classtable-row> div classmodality>Terno de Dezena 1/7/div> div classquotation>R$ 1.700,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/4/div> div classquotation>R$ 5.000,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/3/div> div classquotation>R$ 1.600,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/5/div> div classquotation>R$ 1.200,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/6/div> div classquotation>R$ 500,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/7/div> div classquotation>R$ 250,00/div> /div> div classtable-row> div classmodality>Centena/div> div classquotation>R$ 900,00/div> /div> div classtable-row> div classmodality>Duque de Dezena 1/5/div> div classquotation>R$ 360,00/div> /div> div classtable-row> div classmodality>Duque de Dezena 1/6/div> div classquotation>R$ 240,00/div> /div> div classtable-row> div classmodality>Duque de Dezena 1/7/div> div classquotation>R$ 170,00/div> /div> div classtable-row> div classmodality>Dupla de Grupo 1/2/div> div classquotation>R$ 200,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/5/div> div classquotation>R$ 180,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/6/div> div classquotation>R$ 90,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/7/div> div classquotation>R$ 50,00/div> /div> div classtable-row> div classmodality>Passe/div> div classquotation>R$ 110,00/div> /div> div classtable-row> div classmodality>Dezena/div> div classquotation>R$ 90,00/div> /div> div classtable-row> div classmodality>Grupo/div> div classquotation>R$ 22,00/div> /div> div classtable-row> div classmodality>Dupla de Grupo 1/5/div> div classquotation>R$ 24,00/div> /div> div classtable-row> div classmodality>Unidade/div> div classquotation>R$ 9,00/div> /div> /div> /div> div classquotation-table> div classtable-header>Demais Loterias/div> div classtable-content> div classtable-row> div classmodality>Quina de Grupo 1/5/div> div classquotation>R$ 10.000,00/div> /div> div classtable-row> div classmodality>Quina de Grupo 1/6/div> div classquotation>R$ 4.000,00/div> /div> div classtable-row> div classmodality>Quina de Grupo 1/7/div> div classquotation>R$ 1.500,00/div> /div> div classtable-row> div classmodality>Milhar/div> div classquotation>R$ 8.000,00/div> /div> div classtable-row> div classmodality>Terno de Dezena 1/5/div> div classquotation>R$ 8.500,00/div> /div> div classtable-row> div classmodality>Terno de Dezena 1/6/div> div classquotation>R$ 3.400,00/div> /div> div classtable-row> div classmodality>Terno de Dezena 1/7/div> div classquotation>R$ 1.700,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/4/div> div classquotation>R$ 5.000,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/3/div> div classquotation>R$ 1.600,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/5/div> div classquotation>R$ 1.200,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/6/div> div classquotation>R$ 500,00/div> /div> div classtable-row> div classmodality>Quadra de Grupo 1/7/div> div classquotation>R$ 250,00/div> /div> div classtable-row> div classmodality>Centena/div> div classquotation>R$ 800,00/div> /div> div classtable-row> div classmodality>Duque de Dezena 1/5/div> div classquotation>R$ 360,00/div> /div> div classtable-row> div classmodality>Duque de Dezena 1/6/div> div classquotation>R$ 240,00/div> /div> div classtable-row> div classmodality>Duque de Dezena 1/7/div> div classquotation>R$ 170,00/div> /div> div classtable-row> div classmodality>Dupla de Grupo 1/2/div> div classquotation>R$ 200,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/5/div> div classquotation>R$ 180,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/6/div> div classquotation>R$ 90,00/div> /div> div classtable-row> div classmodality>Terno de Grupo 1/7/div> div classquotation>R$ 50,00/div> /div> div classtable-row> div classmodality>Passe/div> div classquotation>R$ 110,00/div> /div> div classtable-row> div classmodality>Dezena/div> div classquotation>R$ 80,00/div> /div> div classtable-row> div classmodality>Grupo/div> div classquotation>R$ 20,00/div> /div> div classtable-row> div classmodality>Dupla de Grupo 1/5/div> div classquotation>R$ 24,00/div> /div> div classtable-row> div classmodality>Unidade/div> div classquotation>R$ 8,00/div> /div> /div> /div> /div> /div> /section> !-- Install Section --> section classinstall-section idinstall-section> h3>Instale o BichoStars!/h3> p>Tenha acesso rápido ao nosso site diretamente no seu dispositivo./p> button classinstall-button idinstall-button> i classfas fa-download>/i> Instalar App /button> /section> /div> !-- Footer --> footer classfooter> div classcontainer> div classfooter-content> div classfooter-section> img src../../../bets/img2020/logo-2020-branca.png altBichoStars height50 stylemargin-bottom: 1rem; loadinglazy> div classsocial-links> a hrefhttps://www.instagram.com/bichostarsofc/ target_blank classsocial-link> i classfab fa-instagram>/i> /a> a hrefhttps://www.facebook.com/bichostarsjogo/ target_blank classsocial-link> i classfab fa-facebook>/i> /a> /div> /div> div classfooter-section> h3>Atendimento/h3> p>Segunda a Sábado das 07h às 22h/p> p>Domingos das 07h às 19h/p> /div> div classfooter-section> h3>Pagamentos/h3> p>PIX/p> /div> /div> div classfooter-bottom> p>© 2019 BichoStars v 2.0.1/p> /div> /div> /footer> !-- Scripts --> script> // Global variables let currentDate new Date(); let currentLottery L-BichoStars; let cachedResults {}; let deferredPrompt null; let currentSlideIndex 0; let slideInterval; let cpfValidated false; // Controla se CPF foi encontrado // Animal emojis mapping const animalEmojis { 1: 🦆, // avestruz 2: 🦅, // aguia 3: 🫏, // burro 4: 🦋, // borboleta 5: 🐕, // cachorro 6: 🐐, // cabra 7: 🐑, // carneiro 8: 🐪, // camelo 9: 🐍, // cobra 10: 🐰, // coelho 11: 🐎, // cavalo 12: 🐘, // elefante 13: 🐓, // galo 14: 🐱, // gato 15: 🐊, // jacare 16: 🦁, // leao 17: 🐵, // macaco 18: 🐷, // porco 19: 🦚, // pavao 20: 🦃, // peru 21: 🐂, // touro 22: 🐅, // tigre 23: 🐻, // urso 24: 🦌, // veado 25: 🐄 // vaca }; // Initialize page // URL parameters for referral system var queryString window.location.search; var paramUrl new URLSearchParams(queryString); var ind paramUrl.get(ind); var nid paramUrl.get(nid); var pid paramUrl.get(pid); var usernameParams paramUrl.get(sender); // Auto-open register if referred if (usernameParams ! undefined) { // Wait for DOM to load before opening register modal document.addEventListener(DOMContentLoaded, function() { setTimeout(() > { register(); }, 500); }); } document.addEventListener(DOMContentLoaded, function() { preloadCriticalImages(); initializePage(); setupEventListeners(); initializeCarousel(); loadResults(); }); function preloadCriticalImages() { // Detect device type and screen size const isMobile window.innerWidth 580; const isTablet window.innerWidth > 580 && window.innerWidth 1000; const isDesktop window.innerWidth > 1000; // Critical images to preload based on device const criticalImages ; // Always preload logo criticalImages.push(../../../bets/img2020/logo-2020-branca.png); // Device-specific banner images if (isMobile) { criticalImages.push( ../../bets/img2020/mobile10.jpeg, ../../bets/img2020/novidademobile.svg, ../../bets/img2020/diasorteh.jpeg ); } else if (isTablet) { criticalImages.push( ../../bets/img2020/tablet10.jpeg, ../../bets/img2020/novidadews.svg, ../../bets/img2020/diasortews.jpeg ); } else if (isDesktop) { criticalImages.push( ../../bets/img2020/desktop10.jpeg, ../../bets/img2020/novidadedesktop.svg, ../../bets/img2020/diasorte.png ); } // Preload images programmatically criticalImages.forEach(src > { const img new Image(); img.src src; // Optional: Add to cache or handle load events img.onload () > { console.log(`Preloaded: ${src}`); }; img.onerror () > { console.warn(`Failed to preload: ${src}`); }; }); // Preload next carousel images after a short delay setTimeout(() > { preloadCarouselImages(); }, 1000); } function preloadCarouselImages() { // Preload all carousel images for smooth transitions const carouselImages document.querySelectorAll(.carousel-slide img); carouselImages.forEach(img > { if (!img.complete) { const preloadImg new Image(); preloadImg.src img.src; } }); } function initializePage() { // Verificar se já está rodando como PWA instalado const isInstalled window.matchMedia((display-mode: standalone)).matches || window.navigator.standalone true; if (isInstalled) { // Esconder seção de instalação quando já estiver rodando como PWA const installSection document.getElementById(install-section); if (installSection) { installSection.style.display none; } } // PWA install prompt window.addEventListener(beforeinstallprompt, (e) > { e.preventDefault(); deferredPrompt e; console.log(Prompt de instalação disponível); }); // Detectar quando o app foi instalado window.addEventListener(appinstalled, () > { console.log(PWA instalado com sucesso); updateInstallButton(true); deferredPrompt null; }); // Service Worker if (serviceWorker in navigator) { navigator.serviceWorker.register(../../../assets/pwa/service-worker.js) .then(() > console.log(Service Worker registrado com sucesso)) .catch((error) > console.log(Erro ao registrar o Service Worker:, error)); } // Verificar se o app está instalado (após o carregamento) checkIfInstalled(); } function checkIfInstalled() { // Verifica se está rodando como standalone (já aberto como app) const isRunningAsApp window.matchMedia((display-mode: standalone)).matches || window.navigator.standalone true; if (!isRunningAsApp) { // Não está rodando como app, verificar se está instalado // Se o beforeinstallprompt não disparar em 3 segundos, assume que está instalado setTimeout(() > { if (!deferredPrompt) { console.log(Prompt não disponível - assumindo app instalado); updateInstallButton(true); } }, 3000); } } function updateInstallButton(isInstalled) { const installButton document.getElementById(install-button); const installSection document.getElementById(install-section); if (!installSection || !installButton) return; if (isInstalled) { // Mudar o botão para indicar que está instalado installButton.innerHTML i classfas fa-check-circle>/i> App Instalado; installButton.setAttribute(data-installed, true); installSection.querySelector(h3).textContent App Instalado!; installSection.querySelector(p).textContent Clique para ver informações sobre como abrir o aplicativo.; } } function setupEventListeners() { // Install button document.getElementById(install-button).addEventListener(click, async () > { const installButton document.getElementById(install-button); const isInstalledMode installButton.getAttribute(data-installed) true; // Se está no modo Abrir App if (isInstalledMode) { // Informar que o app já está instalado Swal.fire({ title: App Instalado! 🎉, html: O BichoStars já está instalado no seu dispositivo.br>br>Procure pelo ícone do strong>BichoStars/strong> na sua área de trabalho, menu iniciar ou lista de aplicativos para abrir., icon: success, confirmButtonText: Entendi, customClass: { popup: modern-modal } }); return; } if (deferredPrompt) { // Usar o prompt nativo quando disponível deferredPrompt.prompt(); const choiceResult await deferredPrompt.userChoice; if (choiceResult.outcome accepted) { console.log(PWA instalado com sucesso); updateInstallButton(true); } else { console.log(Instalação cancelada pelo usuário); } deferredPrompt null; } else { // Não tem prompt disponível, mostrar instruções manuais const isChrome /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); const isSafari /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor); let instructions Clique no menu do navegador (⋮) e selecione Instalar aplicativo ou Adicionar à tela inicial.; if (isSafari) { instructions Toque no ícone de compartilhar e selecione Adicionar à Tela de Início.; } else if (isChrome) { instructions Clique no menu (⋮) no canto superior direito e selecione Instalar BichoStars.; } Swal.fire({ title: Como instalar, text: instructions, icon: info, confirmButtonText: Entendi, customClass: { popup: modern-modal } }); } }); // Lottery tabs (desktop) document.querySelectorAll(.lottery-tab).forEach(tab > { tab.addEventListener(click, () > { const lottery tab.dataset.lottery; selectLottery(lottery, tab); }); }); // Lottery select (mobile) const lotterySelect document.getElementById(lotterySelect); if (lotterySelect) { lotterySelect.addEventListener(change, (e) > { const lottery e.target.value; currentLottery lottery; displayResults(); }); } // Scroll indicator setupScrollIndicator(); } function setupScrollIndicator() { const scrollIndicator document.getElementById(scrollIndicator); const resultsContainer document.getElementById(resultsContainer); if (!scrollIndicator || !resultsContainer) return; // Verificar e atualizar visibilidade do indicador const updateIndicatorVisibility () > { if (resultsContainer.scrollWidth > resultsContainer.clientWidth) { // Há scroll disponível, mostrar indicador scrollIndicator.classList.remove(hidden); } else { // Não há scroll, esconder indicador scrollIndicator.classList.add(hidden); } }; // Atualizar quando houver mudanças nos resultados const observer new MutationObserver(updateIndicatorVisibility); observer.observe(resultsContainer, { childList: true, subtree: true }); // Verificar inicialmente updateIndicatorVisibility(); } // Carousel functions function initializeCarousel() { startSlideInterval(); } function showSlide(index) { const slides document.querySelectorAll(.carousel-slide); const dots document.querySelectorAll(.dot); // Hide all slides slides.forEach(slide > slide.classList.remove(active)); dots.forEach(dot > dot.classList.remove(active)); // Show current slide if (slidesindex) { slidesindex.classList.add(active); dotsindex.classList.add(active); } currentSlideIndex index; } function nextSlide() { const slides document.querySelectorAll(.carousel-slide); currentSlideIndex (currentSlideIndex + 1) % slides.length; showSlide(currentSlideIndex); resetSlideInterval(); } function prevSlide() { const slides document.querySelectorAll(.carousel-slide); currentSlideIndex currentSlideIndex 0 ? slides.length - 1 : currentSlideIndex - 1; showSlide(currentSlideIndex); resetSlideInterval(); } function currentSlide(index) { showSlide(index - 1); resetSlideInterval(); } function startSlideInterval() { slideInterval setInterval(() > { nextSlide(); }, 5000); // Change slide every 5 seconds } function resetSlideInterval() { clearInterval(slideInterval); startSlideInterval(); } function selectLottery(lottery, tabElement) { currentLottery lottery; // Update active tab document.querySelectorAll(.lottery-tab).forEach(t > t.classList.remove(active)); tabElement.classList.add(active); // Display cached results if available displayResults(); } function changeDate(isPrevious) { if (isPrevious) { currentDate.setDate(currentDate.getDate() - 1); } else { currentDate.setDate(currentDate.getDate() + 1); } // Clear cache for new date cachedResults {}; refreshResults(); } function refreshResults() { cachedResults {}; loadResults(); } function loadResults() { const dateKey formatDateForAPI(currentDate); if (cachedResultsdateKey) { displayResults(); return; } showLoading(resultsContainer); const url `bs_lottery/day${dateKey formatDateForAPI(new Date()) ? : /true}`; $.ajax({ type: GET, url: url, success: (response) > { try { const data JSON.parse(response); cachedResultsdateKey { results: data0, date: data1 }; displayResults(); } catch (error) { console.error(Erro ao processar resultados:, error); showError(resultsContainer, Erro ao carregar resultados); } }, error: () > { showError(resultsContainer, Erro ao carregar resultados); } }); } function displayResults() { const dateKey formatDateForAPI(currentDate); const cachedData cachedResultsdateKey; if (!cachedData) { loadResults(); return; } const { results, date } cachedData; // Update date display document.getElementById(dataLoteria).textContent `Resultados de ${formatDateDisplay(date)}`; // Group results by lottery const lotteries results.reduce((r, a) > { ra.lot_desc ...ra.lot_desc || , a; return r; }, {}); const container document.getElementById(resultsContainer); if (lotteriescurrentLottery) { // Exibir todos os resultados da loteria selecionada const allResults lotteriescurrentLottery; let html ; allResults.forEach(result > { const emoji animalEmojisparseInt(result.grupo1) || 🎲; html + createResultCard(result, emoji); }); container.innerHTML html; } else { container.innerHTML ` div styletext-align: center; padding: 2rem; color: var(--gray-light);> i classfas fa-info-circle stylefont-size: 3rem; margin-bottom: 1rem;>/i> h3>Sem resultados/h3> p>Não há resultados disponíveis para esta data e loteria./p> /div> `; } } function createResultCard(result, emoji) { return ` div classresult-card> div classresult-header> div classresult-emoji>${emoji}/div> div classresult-name>${result.descricao.replace(-, )}/div> /div> div classresult-prizes> div classprize-row> span classprize-position>1º/span> span classprize-number>${result.primeiro_premio}/span> span classprize-group>${result.grupo1}/span> /div> div classprize-row> span classprize-position>2º/span> span classprize-number>${result.segundo_premio}/span> span classprize-group>${result.grupo2}/span> /div> div classprize-row> span classprize-position>3º/span> span classprize-number>${result.terceiro_premio}/span> span classprize-group>${result.grupo3}/span> /div> div classprize-row> span classprize-position>4º/span> span classprize-number>${result.quarto_premio}/span> span classprize-group>${result.grupo4}/span> /div> div classprize-row> span classprize-position>5º/span> span classprize-number>${result.quinto_premio}/span> span classprize-group>${result.grupo5}/span> /div> div classprize-row> span classprize-position>6º/span> span classprize-number>${result.sexto_premio}/span> span classprize-group>${result.grupo6}/span> /div> div classprize-row> span classprize-position>7º/span> span classprize-number>${result.setimo_premio}/span> span classprize-group>${result.grupo7}/span> /div> /div> /div> `; } function showLoading(containerId) { document.getElementById(containerId).innerHTML ` div classloading> div classspinner>/div> p>Carregando.../p> /div> `; } function showError(containerId, message) { document.getElementById(containerId).innerHTML ` div styletext-align: center; padding: 2rem; color: var(--gray-light);> i classfas fa-exclamation-triangle stylefont-size: 2rem; margin-bottom: 1rem; color: #ff6b6b;>/i> p>${message}/p> /div> `; } function formatDateForAPI(date) { return date.toISOString().split(T)0; } function formatDateDisplay(dateString) { const date new Date(dateString + T00:00:00); return date.toLocaleDateString(pt-BR); } // Login function function login() { Swal.fire({ title: Entrar, html: ` div classmodal-form> div classmodal-form-section> label classmodal-label>Usuário ou CPF/label> input typetext idloginUsername classmodal-input placeholderDigite seu usuário ou CPF> /div> div classmodal-form-section> label classmodal-label>Senha/label> div classpassword-input-wrapper> input typepassword idloginPassword classmodal-input placeholderDigite sua senha> i classfas fa-eye password-toggle-icon idloginPasswordToggle>/i> /div> /div> div styletext-align: center;> button typebutton onclickforgotPassword() classforgot-password-btn> Esqueceu a senha? /button> /div> /div> `, showCancelButton: true, confirmButtonText: Entrar, cancelButtonText: Cancelar, width: 400px, customClass: { popup: modern-modal }, didOpen: () > { // Toggle de mostrar/ocultar senha $(#loginPasswordToggle).on(click, function() { const passwordInput $(#loginPassword); const icon $(this); if (passwordInput.attr(type) password) { passwordInput.attr(type, text); icon.removeClass(fa-eye).addClass(fa-eye-slash); } else { passwordInput.attr(type, password); icon.removeClass(fa-eye-slash).addClass(fa-eye); } }); // Adicionar máscara de CPF no campo de username apenas se for CPF válido $(#loginUsername).on(input, function() { let value this.value; // Remover apenas pontos e traços para verificar se é numérico let cleanValue value.replace(/.\-/g, ); // Verificar se o valor é apenas números if (/^\d+$/.test(cleanValue)) { // É apenas números, aplicar máscara de CPF quando tiver 11 dígitos if (cleanValue.length > 11) { // Limitar a 11 dígitos cleanValue cleanValue.substring(0, 11); // Aplicar máscara this.value cleanValue.replace(/^(\d{3})(\d{3})(\d{3})(\d{2}).*/, $1.$2.$3-$4); } else { // Menos de 11 dígitos, manter apenas os números this.value cleanValue; } } // Se tiver letras, não aplicar máscara (username normal) }); }, preConfirm: () > { const username document.getElementById(loginUsername).value; const password document.getElementById(loginPassword).value; if (!username || !password) { Swal.showValidationMessage(Preencha todos os campos); return false; } return $.ajax({ type: POST, url: users/login, data: { username, password }, success: (response) > { const data JSON.parse(response); if (data.error) { Swal.showValidationMessage(data.message); } else { window.location /inicio; } }, error: () > { Swal.showValidationMessage(Erro ao fazer login); } }); } }); } // Função para consultar CPF function consultarCPF(cpf) { // Remover formatação do CPF const cpfLimpo cpf.replace(/\D/g, ); // Validar se CPF tem 11 dígitos if (cpfLimpo.length ! 11) { cpfValidated false; return; } // Elementos do DOM const cpfInput document.getElementById(regCpf); const cpfInputSection document.getElementById(cpfInputSection); const cpfInfoCard document.getElementById(cpfInfoCard); const cpfNumero document.getElementById(cpfNumero); const cpfNome document.getElementById(cpfNome); const cpfData document.getElementById(cpfData); const hiddenNome document.getElementById(regNome); const hiddenData document.getElementById(regData); // Reset validation flag cpfValidated false; // Reset visual states if (cpfInfoCard) cpfInfoCard.style.display none; if (cpfInput) cpfInput.style.borderColor var(--green-neon); $.ajax({ type: POST, url: users/consulta-cpf, data: { cpf: cpfLimpo }, success: function(response) { try { const data typeof response string ? JSON.parse(response) : response; if (!data.error && data.data && data.data.nome && data.data.data_nascimento) { // CPF encontrado com nome e data - permitir cadastro cpfValidated true; // Preencher card com dados if (cpfNumero) cpfNumero.textContent cpf; // CPF formatado if (cpfNome) cpfNome.textContent data.data.nome; if (cpfData) cpfData.textContent data.data.data_nascimento; // Preencher campos hidden if (hiddenNome) hiddenNome.value data.data.nome; if (hiddenData) hiddenData.value data.data.data_nascimento; // Esconder input e mostrar card if (cpfInputSection) cpfInputSection.style.display none; if (cpfInfoCard) cpfInfoCard.style.display block; if (cpfInput) cpfInput.style.borderColor var(--green-neon); console.log(CPF consultado com sucesso:, data.data); } else { // CPF não encontrado - não permitir cadastro cpfValidated false; if (cpfInput) cpfInput.style.borderColor #ff6b6b; console.log(CPF não encontrado na base de dados); } } catch (error) { console.error(Erro ao processar resposta da consulta CPF:, error); cpfValidated false; if (cpfInput) cpfInput.style.borderColor #ff6b6b; } }, error: function(xhr, status, error) { console.error(Erro na consulta CPF:, error); cpfValidated false; if (cpfInput) cpfInput.style.borderColor #ff6b6b; } }); } // VALIDAÇÃO DE CÓDIGO POR EMAIL - DESABILITADA // Função comentada para caso precise voltar no futuro // Para reativar: descomentar esta função e a chamada no registro (linha ~3040) // Também descomentar a validação no login em users.php /* function confirmPhone(username, password) { $.ajax({ type: POST, url: users/phoneInfo, data: { username: username, password: password }, success: (phone) > { Swal.fire({ title: Confirmar Email, html: ` div classmodal-form> p stylemargin: 1rem 0; text-align: center; color: var(--gray-light);> Digite o código de verificação enviado para seu email. /p> div classmodal-form-section> label classmodal-label>Código de Verificação/label> input typetext idvcode classmodal-input required maxlength10 placeholderDigite o código recebido styletext-align: center; font-size: 1.1rem; letter-spacing: 2px;> /div> div styletext-align: center; margin: 1rem 0;> button idreenviar classbtn btn-secondary stylefont-size: 0.85rem;> i classfas fa-paper-plane>/i> Reenviar Código /button> /div> /div> `, allowOutsideClick: false, showCloseButton: true, confirmButtonText: Confirmar, width: 450px, customClass: { popup: modern-modal }, didOpen: () > { // Event listener for resend button $(#reenviar).on(click, () > { $(#reenviar).html(i classfas fa-spinner fa-spin>/i> Reenviando...).attr(disabled, disabled); $.ajax({ type: POST, url: users/phoneInfo, data: { username: username, password: password }, success: (response) > { $(#reenviar).html(i classfas fa-check>/i> Código Reenviado); }, error: (xhr) > { $(#reenviar).html(i classfas fa-exclamation-triangle>/i> Erro ao Reenviar); } }); // Re-enable button after 30 seconds setTimeout(() > { $(#reenviar).html(i classfas fa-paper-plane>/i> Reenviar Código).removeAttr(disabled); }, 30000); }); }, preConfirm: () > { const vcode $(#vcode).val(); if (!vcode.trim()) { Swal.showValidationMessage(Digite o código de verificação!); return false; } return $.ajax({ type: GET, url: `users/verificationCode/${username}/${vcode}`, success: (response) > { let data JSON.parse(response); if (!data.error) { Swal.fire({ title: Sucesso!, text: Conta verificada com sucesso! Redirecionando..., icon: success, timer: 2000, showConfirmButton: false, customClass: { popup: modern-modal } }).then(() > { window.location /jogo; }); } else { Swal.showValidationMessage(data.message); } }, error: () > { Swal.showValidationMessage(Erro ao verificar código); } }); } }); }, error: () > { Swal.fire({ title: Erro!, text: Erro ao obter informações para verificação, icon: error, customClass: { popup: modern-modal } }); } }); } */ // FIM DA SEÇÃO COMENTADA // Register function function register() { // Handle referral system var referralMessage ; var bonus N; if (usernameParams ! undefined) { if (ind) { // referralMessage `div stylebackground: linear-gradient(135deg, var(--green-dark) 0%, var(--green-neon) 100%); color: var(--black); padding: 0.75rem; border-radius: 8px; margin-bottom: 1rem; font-weight: 600; text-align: center;>i classfas fa-gift>/i> Usuário indicado por: strong>${usernameParams}/strong>/div>`; nid 1; bonus Y; } else if (nid) { // referralMessage `div stylebackground: linear-gradient(135deg, var(--green-dark) 0%, var(--green-neon) 100%); color: var(--black); padding: 0.75rem; border-radius: 8px; margin-bottom: 1rem; font-weight: 600; text-align: center;>i classfas fa-user-friends>/i> Usuário indicado por: strong>${usernameParams}/strong>/div>`; ind 1; bonus N; } else if (pid) { // referralMessage `div stylebackground: linear-gradient(135deg, var(--green-dark) 0%, var(--green-neon) 100%); color: var(--black); padding: 0.75rem; border-radius: 8px; margin-bottom: 1rem; font-weight: 600; text-align: center;>i classfas fa-crown>/i> Usuário indicado pelo Promotor: strong>${usernameParams}/strong>/div>`; ind 1; bonus N; } } else { ind 1; nid 1; bonus N; } Swal.fire({ title: Criar Conta, html: ` div classmodal-form> !-- ${referralMessage} --> !-- CPF Input Section --> div classcpf-input-section idcpfInputSection> div classmodal-form-section> label classmodal-label>CPF/label> input typetext idregCpf classmodal-input placeholder000.000.000-00 maxlength14> /div> /div> !-- CPF Info Card --> div classcpf-info-card idcpfInfoCard styledisplay: none;> div classcpf-card-header> i classfas fa-user-check>/i> span>Dados encontrados/span> button typebutton classcpf-card-close idcpfCardClose> i classfas fa-times>/i> /button> /div> div classcpf-card-content> div classcpf-info-item> i classfas fa-id-card>/i> div> span classcpf-info-label>CPF/span> span classcpf-info-value idcpfNumero>-/span> /div> /div> div classcpf-info-item> i classfas fa-user>/i> div> span classcpf-info-label>Nome/span> span classcpf-info-value idcpfNome>-/span> /div> /div> div classcpf-info-item> i classfas fa-calendar>/i> div> span classcpf-info-label>Data de Nascimento/span> span classcpf-info-value idcpfData>-/span> /div> /div> /div> /div> !-- Hidden inputs for form data --> input typehidden idregNome> input typehidden idregData> div classmodal-form-section> label classmodal-label>Email/label> input typeemail idregEmail classmodal-input placeholderseu@email.com> /div> div classmodal-form-section> label classmodal-label>WhatsApp/label> input typetext idregPhone classmodal-input placeholder(00) 9 9999-9999 maxlength16> /div> div classmodal-form-section> label classmodal-label>Senha/label> div classpassword-input-wrapper> input typepassword idregPassword classmodal-input placeholderSua senha> i classfas fa-eye password-toggle-icon idregPasswordToggle>/i> /div> /div> div classmodal-checkbox-container> input typecheckbox idregTerms classmodal-checkbox> label forregTerms stylecolor: var(--white); cursor: pointer; font-size: 0.85rem;> Aceito os a href../../../bets/termos.pdf target_blank classmodal-link>Termos/a> /label> /div> div idturnstile-widget classturnstile-container>/div> /div> `, width: window.innerWidth 480 ? 95% : 480px, showCancelButton: true, confirmButtonText: Cadastrar, cancelButtonText: Cancelar, customClass: { popup: modern-modal }, didOpen: () > { // Toggle de mostrar/ocultar senha $(#regPasswordToggle).on(click, function() { const passwordInput $(#regPassword); const icon $(this); if (passwordInput.attr(type) password) { passwordInput.attr(type, text); icon.removeClass(fa-eye).addClass(fa-eye-slash); } else { passwordInput.attr(type, password); icon.removeClass(fa-eye-slash).addClass(fa-eye); } }); // CPF input mask and consultation $(#regCpf).on(input, function() { let value this.value.replace(/\D/g, ); value value.replace(/^(\d{3})(\d{3})(\d{3})(\d{2}).*/, $1.$2.$3-$4); this.value value; // Reset border color this.style.borderColor rgba(0, 255, 60, 0.3); // Consultar CPF quando tiver 11 dígitos if (value.replace(/\D/g, ).length 11) { consultarCPF(value); } else { // Reset card and validation only if CPF is incomplete cpfValidated false; const cpfInfoCard document.getElementById(cpfInfoCard); const cpfInputSection document.getElementById(cpfInputSection); if (cpfInfoCard) cpfInfoCard.style.display none; if (cpfInputSection) cpfInputSection.style.display block; // Clear hidden fields const hiddenNome document.getElementById(regNome); const hiddenData document.getElementById(regData); if (hiddenNome) hiddenNome.value ; if (hiddenData) hiddenData.value ; } }); // CPF card close button $(#cpfCardClose).on(click, function() { const cpfInputSection document.getElementById(cpfInputSection); const cpfInfoCard document.getElementById(cpfInfoCard); const cpfInput document.getElementById(regCpf); const hiddenNome document.getElementById(regNome); const hiddenData document.getElementById(regData); // Reset validation flag cpfValidated false; // Show input section and hide card if (cpfInputSection) cpfInputSection.style.display block; if (cpfInfoCard) cpfInfoCard.style.display none; // Clear data and reset input if (hiddenNome) hiddenNome.value ; if (hiddenData) hiddenData.value ; if (cpfInput) { cpfInput.style.borderColor rgba(0, 255, 60, 0.3); cpfInput.focus(); // Focus no input para facilitar nova digitação } }); $(#regPhone).on(input, function() { let value this.value.replace(/\D/g, ); value value.replace(/^(\d{2})(\d{1})(\d{4})(\d{4}).*/, ($1) $2 $3-$4); this.value value; }); // Render Turnstile if (typeof turnstile ! undefined) { // Detectar se é mobile const isMobile window.innerWidth 480; const isExtraSmall window.innerWidth 360; let turnstileSize normal; if (isMobile) { turnstileSize normal; } turnstile.render(#turnstile-widget, { sitekey: 0x4AAAAAABOjnQJkepscASK9, theme: dark, size: turnstileSize, callback: function(token) { console.log(Turnstile verificado com sucesso); }, error-callback: function() { console.log(Erro no Turnstile); }, expired-callback: function() { console.log(Turnstile expirado); } }); } }, preConfirm: () > { const email document.getElementById(regEmail).value; const nome document.getElementById(regNome).value; // Hidden field const data document.getElementById(regData).value; // Hidden field const cpf document.getElementById(regCpf).value; const phone document.getElementById(regPhone).value; const password document.getElementById(regPassword).value; const terms document.getElementById(regTerms).checked; // Use CPF without mask as username const username cpf.replace(/\D/g, ); // Validation if (!cpf || cpf.replace(/\D/g, ).length ! 11) { Swal.showValidationMessage(CPF deve conter 11 dígitos); return false; } if (!cpfValidated) { Swal.showValidationMessage(CPF não encontrado na base de dados. Verifique o número informado.); return false; } // Verificação adicional dos campos hidden (segurança extra) const hiddenNome document.getElementById(regNome); const hiddenData document.getElementById(regData); if (!hiddenNome || !hiddenNome.value || hiddenNome.value.trim() ) { Swal.showValidationMessage(Erro: Nome não foi preenchido corretamente. Tente consultar o CPF novamente.); return false; } if (!hiddenData || !hiddenData.value || hiddenData.value.trim() ) { Swal.showValidationMessage(Erro: Data de nascimento não foi preenchida corretamente. Tente consultar o CPF novamente.); return false; } if (!email || !email.includes(@)) { Swal.showValidationMessage(Email inválido); return false; } if (!nome || nome.trim() ) { Swal.showValidationMessage(Nome completo é obrigatório. Consulte um CPF válido.); return false; } if (!data || data.trim() ) { Swal.showValidationMessage(Data de nascimento é obrigatória. Consulte um CPF válido.); return false; } if (!cpf || cpf.length ! 14) { Swal.showValidationMessage(CPF inválido); return false; } if (!phone || phone.length ! 16) { Swal.showValidationMessage(WhatsApp inválido); return false; } if (!password) { Swal.showValidationMessage(Senha é obrigatória); return false; } if (!terms) { Swal.showValidationMessage(Aceite os termos e condições); return false; } // Format data for API const formattedData { username, email, nomeCompleto: nome, password, phone: phone.replace(/\D/g, ).replace(/^(\d{2})(\d{1})(\d{4})(\d{4})/, $1-$2$3$4), date_birth: data.includes(/) ? data.split(/).reverse().join(-) : data, cpf: cpf.replace(/\D/g, ), id: nid, ind: ind, bonus_ind: bonus, saldo_ind: 0, turnstile_token: typeof turnstile ! undefined ? turnstile.getResponse() : }; return $.ajax({ type: POST, url: users/register, data: formattedData, success: (response) > { if (response.error) { Swal.showValidationMessage(response.message); } else { console.log(Cadastro realizado com sucesso!); // VALIDAÇÃO DE CÓDIGO DESABILITADA // Código antigo comentado (com validação de email) /* // Fechar modal atual Swal.close(); // Mostrar loading enquanto processa Swal.fire({ title: Processando cadastro..., html: ` div styletext-align: center; padding: 1rem;> div classloading-spinner stylemargin-bottom: 1rem;> div classspinner>/div> /div> p stylecolor: var(--gray-light); margin: 0; font-size: 0.9rem;> Enviando código de verificação... /p> /div> `, allowOutsideClick: false, allowEscapeKey: false, showConfirmButton: false, customClass: { popup: modern-modal } }); // Aguardar um pouco e chamar confirmPhone setTimeout(() > { confirmPhone(username, password); }, 1500); */ // NOVO COMPORTAMENTO (SEM VALIDAÇÃO) // Fazer login automático após cadastro bem-sucedido $.ajax({ type: POST, url: users/login, data: { username, password }, success: (loginResponse) > { const loginData JSON.parse(loginResponse); if (!loginData.error) { Swal.fire({ title: Cadastro Realizado!, text: Bem-vindo ao BichoStars! Redirecionando..., icon: success, timer: 2000, showConfirmButton: false, customClass: { popup: modern-modal } }).then(() > { window.location /inicio; }); } else { // Se falhar o login, mostrar mensagem de sucesso e pedir para fazer login Swal.fire({ title: Cadastro Realizado!, text: Faça login para continuar., icon: success, confirmButtonText: Fazer Login, customClass: { popup: modern-modal } }).then(() > { login(); }); } }, error: () > { Swal.fire({ title: Cadastro Realizado!, text: Faça login para continuar., icon: success, confirmButtonText: Fazer Login, customClass: { popup: modern-modal } }).then(() > { login(); }); } }); } }, error: () > { Swal.showValidationMessage(Erro ao criar conta); } }); } }); } // Forgot password function function forgotPassword() { Swal.fire({ title: Recuperar Senha, html: ` div classmodal-form> div classmodal-form-section> label classmodal-label>Email cadastrado/label> input typeemail idforgotEmail classmodal-input placeholderseu@email.com> /div> p stylecolor: var(--gray-light); text-align: center; margin-top: 0.75rem; font-size: 0.9rem;> Enviaremos um link para redefinir sua senha /p> /div> `, showCancelButton: true, confirmButtonText: Enviar, cancelButtonText: Cancelar, width: 400px, customClass: { popup: modern-modal }, preConfirm: () > { const email document.getElementById(forgotEmail).value; if (!email || !email.includes(@)) { Swal.showValidationMessage(Email inválido); return false; } return $.ajax({ type: POST, url: users/recover-password-new, data: { email }, success: (response) > { const data JSON.parse(response); if (data.error) { Swal.showValidationMessage(data.message); } else { Swal.fire({ title: Email Enviado!, text: data.message, icon: success, customClass: { popup: modern-modal } }); } }, error: () > { Swal.showValidationMessage(Erro ao enviar email); } }); } }); } // Facebook Pixel !function(f,b,e,v,n,t,s) { if(f.fbq)return;nf.fbqfunction(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbqn;n.pushn;n.loaded!0;n.version2.0; n.queue;tb.createElement(e);t.async!0; t.srcv;sb.getElementsByTagName(e)0; s.parentNode.insertBefore(t,s)}(window, document,script, https://connect.facebook.net/en_US/fbevents.js); fbq(init, 2666968893507616); fbq(track, PageView); // Google Tag Manager (function(w,d,s,l,i){wlwl||;wl.push({gtm.start: new Date().getTime(),event:gtm.js});var fd.getElementsByTagName(s)0, jd.createElement(s),dll!dataLayer?&l+l:;j.asynctrue;j.src https://www.googletagmanager.com/gtm.js?id+i+dl;f.parentNode.insertBefore(j,f); })(window,document,script,dataLayer,GTM-MHBSH7TN); // Google Analytics window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, UA-151014316-2); /script> !-- Google Tag Manager (noscript) --> noscript>iframe srchttps://www.googletagmanager.com/ns.html?idGTM-MHBSH7TN height0 width0 styledisplay:none;visibility:hidden>/iframe>/noscript> !-- Facebook Pixel (noscript) --> noscript>img height1 width1 styledisplay:none srchttps://www.facebook.com/tr?id2666968893507616&evPageView&noscript1 />/noscript>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]