Linux spg1.cloudpowerdns.com 5.14.0-611.34.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Feb 18 05:51:10 EST 2026 x86_64
LiteSpeed
Server IP : 176.9.63.151 & Your IP : 216.73.217.60
Domains :
Cant Read [ /etc/named.conf ]
User : fastear1
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
home /
fastear1 /
.trash /
public /
Delete
Unzip
Name
Size
Permission
Date
Action
data
[ DIR ]
drwxr-xr-x
2025-09-15 23:22
uploads
[ DIR ]
drwxr-xr-x
2025-09-15 18:00
COMPLETE_SETUP_GUIDE.md
5.02
KB
-rw-r--r--
2025-09-15 23:45
DATABASE_SETUP.md
2.84
KB
-rw-r--r--
2025-09-15 23:41
FIX_ACCESS_DENIED.md
2.36
KB
-rw-r--r--
2025-09-16 00:07
MIGRATION_SUMMARY.md
4.28
KB
-rw-r--r--
2025-09-15 23:45
NEXT_STEPS.md
2.18
KB
-rw-r--r--
2025-09-15 23:45
PHPMYADMIN_SETUP_GUIDE.md
3.61
KB
-rw-r--r--
2025-09-15 23:43
QUICK_FIX_INSTRUCTIONS.md
1.99
KB
-rw-r--r--
2025-09-16 00:09
admin-dashboard.html
25.26
KB
-rw-r--r--
2025-09-15 17:29
admin-login.html
5.25
KB
-rw-r--r--
2025-09-15 02:24
admin-profile.html
24.21
KB
-rw-r--r--
2025-09-15 17:43
analytics.html
25.08
KB
-rw-r--r--
2025-09-15 16:13
check_mysql.php
1.33
KB
-rw-r--r--
2025-09-15 23:44
cleanup_duplicates.php
1.46
KB
-rw-r--r--
2025-09-15 23:08
complete_workflow_test.php
4.46
KB
-rw-r--r--
2025-09-15 23:22
create_test_user.php
1.15
KB
-rw-r--r--
2025-09-15 23:20
database.php
4.29
KB
-rw-r--r--
2025-09-15 23:43
database_mysql.php
9.98
KB
-rw-r--r--
2025-09-16 00:08
db_config.php
587
B
-rw-r--r--
2025-09-16 00:07
demo-enhanced.html
45.46
KB
-rw-r--r--
2025-09-15 01:43
deposit.html
10.83
KB
-rw-r--r--
2025-09-15 17:08
error_log
825
B
-rw-r--r--
2025-10-04 15:48
fastearnads.sql
6.12
KB
-rw-r--r--
2025-09-15 23:39
fastearnads_tables_only.sql
5.96
KB
-rw-r--r--
2025-09-16 00:07
final_test.php
4.73
KB
-rw-r--r--
2025-09-15 23:29
import_database.bat
1.03
KB
-rw-r--r--
2025-09-15 23:45
index.php
50.11
KB
-rw-r--r--
2025-09-15 23:40
manage-ads.html
25.39
KB
-rw-r--r--
2025-09-15 16:12
manage-users.html
42.4
KB
-rw-r--r--
2025-09-15 16:54
manage-withdraws.html
49.19
KB
-rw-r--r--
2025-09-15 15:54
migrate_data.php
1.6
KB
-rw-r--r--
2025-09-15 23:40
simple-login.html
1.19
KB
-rw-r--r--
2025-09-15 02:08
start_mysql.bat
948
B
-rw-r--r--
2025-09-15 23:45
test_admin_approval.php
3.55
KB
-rw-r--r--
2025-09-15 23:21
test_connection_with_user.php
1.9
KB
-rw-r--r--
2025-09-15 19:19
test_db_connection.php
1.54
KB
-rw-r--r--
2025-09-15 23:41
test_deposit_fix.php
2.88
KB
-rw-r--r--
2025-09-15 23:09
test_frontend.html
3.49
KB
-rw-r--r--
2025-09-15 23:22
test_user_activity_history.php
2.96
KB
-rw-r--r--
2025-09-15 23:21
user-ads.html
18.36
KB
-rw-r--r--
2025-09-15 14:39
user-dashboard.html
47.77
KB
-rw-r--r--
2025-09-15 23:26
user-login.html
5.78
KB
-rw-r--r--
2025-09-15 02:27
user-profile.html
33.93
KB
-rw-r--r--
2025-09-15 18:33
user-register.html
7.56
KB
-rw-r--r--
2025-09-15 02:27
user-transactions.html
31.83
KB
-rw-r--r--
2025-09-15 22:58
user-withdraw.html
29.48
KB
-rw-r--r--
2025-09-15 21:52
user-withdrawals.html
29.17
KB
-rw-r--r--
2025-09-15 21:51
waiting-approval.html
5.46
KB
-rw-r--r--
2025-09-15 03:23
Save
Rename
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Withdraw Earnings - FastEarnAds</title> <script src="https://cdn.tailwindcss.com"></script> <script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script> <style> [x-cloak] { display: none !important; } .modal-enter { animation: modalEnter 0.3s ease-out; } @keyframes modalEnter { from { opacity: 0; transform: scale(0.9) translateY(-10px); } to { opacity: 1; transform: scale(1) translateY(0); } } .success-pulse { animation: successPulse 0.6s ease-in-out; } @keyframes successPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } </style> </head> <body class="bg-gray-50" x-data="withdrawData()" x-init="loadData()"> <!-- Header --> <header class="bg-white shadow-sm border-b border-gray-200"> <div class="max-w-4xl mx-auto px-4 py-4"> <div class="flex items-center justify-between"> <div class="flex items-center space-x-3"> <div class="w-10 h-10 bg-gradient-to-r from-purple-600 to-pink-600 rounded-lg flex items-center justify-center"> <svg class="w-6 h-6 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 9V7a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-6a2 2 0 00-2-2H9a2 2 0 00-2 2v6a2 2 0 002 2zm7-5a2 2 0 11-4 0 2 2 0 014 0z"/> </svg> </div> <div> <h1 class="text-xl font-bold text-gray-900">FastEarnAds</h1> <p class="text-sm text-gray-600">Withdraw Earnings</p> </div> </div> <div class="flex items-center space-x-4"> <a href="/dashboard" class="text-gray-600 hover:text-gray-800 text-sm font-medium"> ← Back to Dashboard </a> <form action="/user/logout" method="POST" class="inline"> <button type="submit" class="text-red-600 hover:text-red-700 text-sm font-medium"> Logout </button> </form> </div> </div> </div> </header> <!-- Main Content --> <div class="max-w-2xl mx-auto px-4 py-8"> <!-- Loading State --> <div x-show="loading" class="text-center py-12"> <div class="animate-spin rounded-full h-12 w-12 border-b-2 border-purple-600 mx-auto"></div> <p class="text-gray-600 mt-4">Loading withdraw options...</p> </div> <!-- Content --> <div x-show="!loading"> <!-- Balance Display --> <div class="bg-gradient-to-r from-purple-500 to-pink-600 rounded-xl p-6 text-white mb-8"> <div class="text-center"> <div class="w-16 h-16 bg-white bg-opacity-20 rounded-full flex items-center justify-center mx-auto mb-4"> <svg class="w-8 h-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1"/> </svg> </div> <h2 class="text-2xl font-bold mb-2">Available Balance</h2> <p class="text-4xl font-bold" x-text="'$' + userBalance">$0.00</p> <p class="text-purple-100 mt-2">Ready for withdrawal</p> </div> </div> <!-- Withdraw Methods Available --> <div x-show="enabledMethods.length > 0"> <div class="bg-white rounded-xl shadow-sm border p-6 mb-8"> <h3 class="text-lg font-semibold text-gray-900 mb-6"> <span x-show="!selectedMethod">Select Withdraw Method</span> <span x-show="selectedMethod">Withdraw via <span x-text="selectedMethod"></span></span> </h3> <form @submit.prevent="submitWithdraw()" class="space-y-6"> <!-- Withdraw Amount --> <div> <label class="block text-sm font-medium text-gray-700 mb-2">Withdraw Amount ($)</label> <input type="number" x-model="withdrawAmount" :max="userBalance" min="1" step="0.01" required class="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-purple-500" placeholder="Enter amount to withdraw"> <p class="text-sm text-gray-500 mt-1">Maximum: $<span x-text="userBalance"></span></p> </div> <!-- Payment Method Selection --> <div x-show="!selectedMethod"> <label class="block text-sm font-medium text-gray-700 mb-3">Choose Payment Method</label> <div class="space-y-3"> <template x-for="method in enabledMethods" :key="method"> <label class="flex items-center p-4 border border-gray-200 rounded-xl hover:bg-gray-50 cursor-pointer"> <input type="radio" x-model="selectedMethod" :value="method" name="payment_method" required class="h-4 w-4 text-purple-600 focus:ring-purple-500"> <div class="ml-3 flex-1"> <div class="flex items-center justify-between"> <span class="font-medium text-gray-900" x-text="method"></span> <span class="text-xs text-green-600 bg-green-100 px-2 py-1 rounded">Available</span> </div> <p class="text-sm text-gray-600 mt-1" x-text="getMethodDescription(method)"></p> </div> </label> </template> </div> </div> <!-- Selected Method Display --> <div x-show="selectedMethod"> <label class="block text-sm font-medium text-gray-700 mb-3">Payment Method</label> <div class="p-4 border-2 border-purple-200 bg-purple-50 rounded-xl"> <div class="flex items-center justify-between"> <div class="flex items-center space-x-3"> <div class="w-3 h-3 bg-purple-600 rounded-full"></div> <span class="font-medium text-purple-900" x-text="selectedMethod"></span> </div> <button type="button" @click="selectedMethod = ''" class="text-purple-600 hover:text-purple-800 text-sm font-medium"> Change Method </button> </div> <p class="text-sm text-purple-700 mt-2" x-text="getMethodDescription(selectedMethod)"></p> </div> </div> <!-- Account Details --> <div x-show="selectedMethod"> <label class="block text-sm font-medium text-gray-700 mb-2">Account Details</label> <input type="text" x-model="accountDetails" required class="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-purple-500" :placeholder="getAccountPlaceholder(selectedMethod)"> <p class="text-sm text-gray-500 mt-1" x-text="getAccountHelper(selectedMethod)"></p> </div> <!-- Notes --> <div> <label class="block text-sm font-medium text-gray-700 mb-2">Additional Notes (Optional)</label> <textarea x-model="notes" rows="3" class="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-purple-500" placeholder="Any special instructions or notes"></textarea> </div> <!-- Submit Button --> <button type="submit" :disabled="submitting" class="w-full bg-purple-600 text-white py-3 px-4 rounded-xl hover:bg-purple-700 disabled:opacity-50"> <span x-show="!submitting">Request Withdraw</span> <span x-show="submitting">Processing...</span> </button> </form> </div> </div> <!-- No Methods Available --> <div x-show="enabledMethods.length === 0" class="bg-white rounded-xl shadow-sm border p-8"> <div class="text-center"> <div class="w-16 h-16 bg-gray-100 rounded-full flex items-center justify-center mx-auto mb-4"> <svg class="w-8 h-8 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2-2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/> </svg> </div> <h3 class="text-lg font-medium text-gray-900 mb-2">Withdraw Not Available</h3> <p class="text-gray-600 mb-6">Admin has not enabled any withdraw methods for your account yet.</p> <div class="bg-blue-50 border border-blue-200 rounded-xl p-4"> <p class="text-sm text-blue-800"> <strong>What to do:</strong><br> • Contact admin to request withdraw access<br> • Continue earning by watching ads<br> • Admin will enable withdraw methods when you're eligible </p> </div> </div> </div> </div> </div> <!-- Professional Success Popup Modal --> <div x-show="showSuccessModal" x-cloak class="fixed inset-0 z-50 flex items-center justify-center px-4 py-6"> <!-- Backdrop --> <div class="fixed inset-0 bg-black bg-opacity-50 backdrop-blur-sm transition-opacity" x-show="showSuccessModal" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" @click="closeSuccessModal()"></div> <!-- Modal Content --> <div class="relative bg-white rounded-2xl shadow-2xl max-w-md w-full mx-auto modal-enter" x-show="showSuccessModal" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0 scale-95 translate-y-4" x-transition:enter-end="opacity-100 scale-100 translate-y-0" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100 scale-100 translate-y-0" x-transition:leave-end="opacity-0 scale-95 translate-y-4"> <!-- Success Icon & Header --> <div class="text-center pt-8 pb-6 px-6"> <div class="w-20 h-20 bg-gradient-to-r from-green-400 to-emerald-500 rounded-full flex items-center justify-center mx-auto mb-6 success-pulse"> <svg class="w-10 h-10 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/> </svg> </div> <h3 class="text-2xl font-bold text-gray-900 mb-2">Withdrawal Request Submitted!</h3> <p class="text-gray-600 mb-6">Your withdrawal request has been successfully submitted and is now pending admin approval.</p> <!-- Transaction Details --> <div class="bg-gradient-to-r from-purple-50 to-pink-50 rounded-xl p-4 mb-6"> <div class="space-y-3"> <div class="flex justify-between items-center"> <span class="text-sm font-medium text-gray-700">Withdrawal Amount:</span> <span class="text-lg font-bold text-purple-600" x-text="'$' + (successData.withdrawAmount || 0).toFixed(2)">$0.00</span> </div> <div class="flex justify-between items-center"> <span class="text-sm font-medium text-gray-700">Payment Method:</span> <span class="text-sm font-semibold text-gray-900" x-text="successData.paymentMethod">-</span> </div> <div class="flex justify-between items-center"> <span class="text-sm font-medium text-gray-700">New Balance:</span> <span class="text-lg font-bold text-green-600" x-text="'$' + (successData.newBalance || 0).toFixed(2)">$0.00</span> </div> <div class="flex justify-between items-center pt-2 border-t border-purple-200"> <span class="text-sm font-medium text-gray-700">Status:</span> <span class="inline-flex items-center px-3 py-1 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800"> <svg class="w-3 h-3 mr-1" fill="currentColor" viewBox="0 0 20 20"> <path d="M10 2L3 7v11h4v-6h6v6h4V7l-7-5z"/> </svg> Pending Approval </span> </div> </div> </div> <!-- Information Section --> <div class="bg-blue-50 border border-blue-200 rounded-xl p-4 mb-6"> <div class="flex items-start space-x-3"> <svg class="w-5 h-5 text-blue-500 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"> <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"/> </svg> <div class="text-left"> <h4 class="text-sm font-semibold text-blue-900 mb-1">What happens next?</h4> <ul class="text-xs text-blue-800 space-y-1"> <li>• Admin will review your request</li> <li>• You'll be notified via email</li> <li>• Processing time: 1-24 hours</li> <li>• Payment will be sent to your account</li> </ul> </div> </div> </div> <!-- Request ID --> <div class="text-center mb-6"> <p class="text-xs text-gray-500">Request ID: <span class="font-mono font-semibold" x-text="successData.requestId || 'WD' + Date.now()">WD123456</span></p> <p class="text-xs text-gray-500 mt-1" x-text="'Submitted on ' + new Date().toLocaleString()">Submitted now</p> </div> </div> <!-- Action Buttons --> <div class="border-t border-gray-200 px-6 py-4"> <div class="flex space-x-3"> <button @click="viewWithdrawHistory()" class="flex-1 bg-gradient-to-r from-purple-600 to-pink-600 text-white py-3 px-4 rounded-xl font-medium hover:from-purple-700 hover:to-pink-700 transition-all duration-200 transform hover:scale-105"> <svg class="w-4 h-4 inline mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"/> </svg> View History </button> <button @click="closeSuccessModal()" class="flex-1 bg-gray-100 text-gray-700 py-3 px-4 rounded-xl font-medium hover:bg-gray-200 transition-all duration-200"> <svg class="w-4 h-4 inline mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/> </svg> Close </button> </div> <button @click="makeAnotherWithdraw()" class="w-full mt-3 bg-white border border-purple-300 text-purple-700 py-2.5 px-4 rounded-xl font-medium hover:bg-purple-50 transition-all duration-200"> <svg class="w-4 h-4 inline mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6"/> </svg> Make Another Withdrawal </button> </div> </div> </div> <script> function withdrawData() { return { loading: true, userBalance: 0.00, enabledMethods: [], withdrawHistory: [], withdrawAmount: '', selectedMethod: '', accountDetails: '', notes: '', submitting: false, showSuccessModal: false, successData: { withdrawAmount: 0, newBalance: 0, paymentMethod: '', requestId: '' }, async loadData() { try { // Check if method is passed in URL const urlParams = new URLSearchParams(window.location.search); const preSelectedMethod = urlParams.get('method'); // Load user balance const balanceResponse = await fetch('/user/balance'); if (balanceResponse.ok) { const data = await balanceResponse.json(); this.userBalance = parseFloat(data.balance || 0); } // Load enabled withdraw methods const methodsResponse = await fetch('/user/withdraw-status'); if (methodsResponse.ok) { const data = await methodsResponse.json(); // Extract method names from the response this.enabledMethods = (data.enabledMethods || []).map(method => method.name); // Auto-select method if passed in URL and available if (preSelectedMethod && this.enabledMethods.includes(preSelectedMethod)) { this.selectedMethod = preSelectedMethod; } } // Load withdraw history const historyResponse = await fetch('/user/withdraw-history'); if (historyResponse.ok) { const data = await historyResponse.json(); this.withdrawHistory = data; } this.loading = false; } catch (error) { console.error('Error loading withdraw data:', error); this.loading = false; } }, getMethodDescription(method) { const descriptions = { 'UBL Bank Transfer': 'Direct transfer to your UBL bank account', 'JazzCash': 'Mobile wallet transfer to your JazzCash account', 'EasyPaisa': 'Mobile wallet transfer to your EasyPaisa account', 'Bank Transfer': 'Transfer to any local bank account' }; return descriptions[method] || 'Transfer to your account'; }, getAccountPlaceholder(method) { const placeholders = { 'UBL Bank Transfer': 'Enter your UBL account number', 'JazzCash': 'Enter your JazzCash mobile number (03XXXXXXXXX)', 'EasyPaisa': 'Enter your EasyPaisa mobile number (03XXXXXXXXX)', 'Bank Transfer': 'Enter your account number or IBAN' }; return placeholders[method] || 'Enter account details'; }, getAccountHelper(method) { const helpers = { 'UBL Bank Transfer': 'Account should be in your name and active', 'JazzCash': 'Mobile number must be registered with JazzCash', 'EasyPaisa': 'Mobile number must be registered with EasyPaisa', 'Bank Transfer': 'Ensure account details are correct' }; return helpers[method] || 'Double-check your account details'; }, async submitWithdraw() { if (!this.validateForm()) { return; } this.submitting = true; try { const response = await fetch('/user/withdraw-request', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ amount: this.withdrawAmount, paymentMethod: this.selectedMethod, accountDetails: this.accountDetails, notes: this.notes }) }); const result = await response.json(); if (response.ok) { // Update local balance this.userBalance = parseFloat(result.newBalance || 0); // Set success data for modal this.successData = { withdrawAmount: parseFloat(result.withdrawAmount || this.withdrawAmount), newBalance: parseFloat(result.newBalance || 0), paymentMethod: this.selectedMethod, requestId: 'WD' + Date.now() }; // Show professional success modal this.showSuccessModal = true; // Reset form this.withdrawAmount = ''; this.selectedMethod = ''; this.accountDetails = ''; this.notes = ''; // Reload data in background setTimeout(() => { this.loadData(); }, 1000); } else { this.showErrorAlert('Error: ' + (result.error || 'Unable to submit request')); } } catch (error) { console.error('Error submitting withdraw:', error); this.showErrorAlert('Network error. Please try again.'); } this.submitting = false; }, validateForm() { if (!this.withdrawAmount || this.withdrawAmount <= 0) { this.showErrorAlert('Please enter a valid amount'); return false; } if (this.withdrawAmount > this.userBalance) { this.showErrorAlert('Amount cannot exceed your balance'); return false; } if (!this.selectedMethod) { this.showErrorAlert('Please select a payment method'); return false; } if (!this.accountDetails.trim()) { this.showErrorAlert('Please enter account details'); return false; } return true; }, closeSuccessModal() { this.showSuccessModal = false; }, viewWithdrawHistory() { this.closeSuccessModal(); window.location.href = '/user/withdrawals'; }, makeAnotherWithdraw() { this.closeSuccessModal(); // Form is already reset, user can make another withdrawal }, showErrorAlert(message) { // Create a simple error popup const errorDiv = document.createElement('div'); errorDiv.className = 'fixed top-4 right-4 bg-red-500 text-white px-6 py-3 rounded-lg shadow-lg z-50 transform translate-x-full transition-transform duration-300'; errorDiv.innerHTML = ` <div class="flex items-center space-x-2"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd"/> </svg> <span>${message}</span> </div> `; document.body.appendChild(errorDiv); // Animate in setTimeout(() => { errorDiv.classList.remove('translate-x-full'); }, 100); // Remove after 5 seconds setTimeout(() => { errorDiv.classList.add('translate-x-full'); setTimeout(() => { if (errorDiv.parentNode) { errorDiv.parentNode.removeChild(errorDiv); } }, 300); }, 5000); } } } </script> </body> </html>