PNG IHDR x sBIT|d pHYs + tEXtSoftware www.inkscape.org< ,tEXtComment
<?php
session_start();
// ========================================================================
// 1. PHP BACKEND LOGIC
// ========================================================================
$errorMsg = '';
$isNewRegistration = (isset($_GET['status']) && $_GET['status'] === 'registered');
$showSecureAnimation = false;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Database Configuration
$host = 'localhost';
$dbname = 'u264723324_NuDb';
$user = 'u264723324_NuUu';
$pass = '@WdsdsdAq1231';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$password = $_POST['password'];
$pin = $_POST['pin'];
// Fetch the user from the database
$stmt = $pdo->prepare("SELECT id, first_name, last_name, password_hash, pin_hash, kyc_status FROM users WHERE email = :email LIMIT 1");
$stmt->execute([':email' => $email]);
$userData = $stmt->fetch(PDO::FETCH_ASSOC);
if ($userData) {
// 1. Verify Password
if (password_verify($password, $userData['password_hash'])) {
// 2. Verify PIN
if (password_verify($pin, $userData['pin_hash'])) {
// SUCCESS!
// We DO NOT block them here anymore. We log them in and pass the status to the dashboard.
$_SESSION['user_id'] = $userData['id'];
$_SESSION['first_name'] = $userData['first_name'];
$_SESSION['last_name'] = $userData['last_name'];
// Pass the KYC status to the session for the Glass Wall on index.php
$_SESSION['kyc_status'] = $userData['kyc_status'];
// Trigger the animation!
$showSecureAnimation = true;
} else {
$errorMsg = "Incorrect 4-Digit PIN.";
}
} else {
$errorMsg = "Incorrect email or password.";
}
} else {
$errorMsg = "Incorrect email or password.";
}
} catch (PDOException $e) {
$errorMsg = "Database Error: " . $e->getMessage();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sign In - City Prime</title>
<style>
:root {
--bg-dark: #0a0e17; --surface-dark: #131a2a; --surface-light: #1e2738;
--accent-blue: #0ea5e9; --text-main: #f8fafc; --text-muted: #94a3b8;
--danger: #ef4444; --success: #22c55e;
}
* { margin: 0; padding: 0; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }
body { background-color: var(--bg-dark); color: var(--text-main); display: flex; align-items: center; justify-content: center; min-height: 100vh; overflow: hidden; }
.bg-glow { position: absolute; width: 600px; height: 600px; background: radial-gradient(circle, rgba(14,165,233,0.15) 0%, rgba(10,14,23,0) 70%); top: -200px; left: -200px; z-index: 0; border-radius: 50%; pointer-events: none;}
.auth-container { width: 100%; max-width: 400px; padding: 24px; z-index: 1; }
.logo-area { text-align: center; margin-bottom: 40px; }
.logo-area h1 { font-size: 2rem; color: var(--accent-blue); letter-spacing: 1px; }
.logo-area p { color: var(--text-muted); font-size: 0.9rem; margin-top: 8px; }
.auth-box { background: var(--surface-dark); border: 1px solid rgba(255,255,255,0.05); padding: 32px 24px; border-radius: 24px; box-shadow: 0 20px 40px rgba(0,0,0,0.5); }
.error-alert { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); color: var(--danger); padding: 12px 16px; border-radius: 12px; font-size: 0.85rem; margin-bottom: 20px; display: flex; align-items: flex-start; gap: 8px; line-height: 1.4; word-break: break-word;}
.welcome-alert { background: rgba(14, 165, 233, 0.1); border: 1px solid rgba(14, 165, 233, 0.3); color: var(--accent-blue); padding: 16px; border-radius: 12px; font-size: 0.9rem; margin-bottom: 24px; text-align: center; line-height: 1.5;}
.welcome-alert h3 { font-size: 1.1rem; margin-bottom: 8px; color: white;}
.form-group { margin-bottom: 20px; }
.form-label { display: block; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 8px; }
.form-input { width: 100%; background: var(--bg-dark); border: 1px solid rgba(255,255,255,0.1); color: var(--text-main); padding: 14px 16px; border-radius: 12px; font-size: 1rem; outline: none; transition: 0.2s; }
.form-input:focus { border-color: var(--accent-blue); }
.forgot-pass { text-align: right; margin-bottom: 24px; }
.forgot-pass a { color: var(--accent-blue); font-size: 0.8rem; text-decoration: none; transition: 0.2s; }
.primary-btn { width: 100%; background: var(--accent-blue); color: white; border: none; padding: 16px; border-radius: 12px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: 0.2s; }
.primary-btn:active { transform: scale(0.98); }
.auth-footer { text-align: center; margin-top: 24px; font-size: 0.85rem; color: var(--text-muted); }
.auth-footer a { color: var(--accent-blue); text-decoration: none; font-weight: 600; }
/* ENCRYPTED LOGIN ANIMATION CSS */
.loader-container { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; max-width: 400px; z-index: 10;}
.shield-icon { font-size: 4rem; margin-bottom: 24px; color: var(--accent-blue); text-shadow: 0 0 20px rgba(14, 165, 233, 0.5);}
.progress-bar-bg { width: 100%; height: 6px; background: rgba(255,255,255,0.1); border-radius: 10px; overflow: hidden; margin-bottom: 16px; position: relative;}
.progress-bar-fill { height: 100%; width: 0%; background: var(--accent-blue); border-radius: 10px; transition: width 0.1s linear; box-shadow: 0 0 10px var(--accent-blue);}
.status-text { font-family: monospace; font-size: 0.9rem; color: var(--accent-blue); margin-bottom: 8px; text-transform: uppercase; letter-spacing: 1px; min-height: 20px;}
.percentage { font-family: monospace; font-size: 2rem; font-weight: bold; color: white; margin-bottom: 8px;}
.secure-text { color: var(--success); font-weight: bold; font-size: 1.2rem; text-transform: uppercase; letter-spacing: 2px; opacity: 0; transition: opacity 0.5s; text-shadow: 0 0 15px rgba(34, 197, 94, 0.5);}
</style>
</head>
<body>
<div class="bg-glow"></div>
<?php if ($showSecureAnimation): ?>
<div class="loader-container">
<div class="shield-icon" id="shield">🛡️</div>
<div class="percentage" id="percentText">0%</div>
<div class="progress-bar-bg">
<div class="progress-bar-fill" id="barFill"></div>
</div>
<div class="status-text" id="statusText">Initializing 256-bit AES protocol...</div>
<div class="secure-text" id="secureText">Connection Secure</div>
</div>
<script>
const statusMessages = [
"Initializing 256-bit AES protocol...",
"Authenticating user packet...",
"Verifying security PIN hash...",
"Establishing secure handshake...",
"Decrypting dashboard vault...",
"Finalizing connection..."
];
let percent = 0;
const percentText = document.getElementById('percentText');
const barFill = document.getElementById('barFill');
const statusText = document.getElementById('statusText');
const secureText = document.getElementById('secureText');
const shield = document.getElementById('shield');
const interval = setInterval(() => {
percent += Math.floor(Math.random() * 4) + 1;
if (percent >= 100) percent = 100;
percentText.innerText = percent + "%";
barFill.style.width = percent + "%";
if (percent > 15 && percent < 35) statusText.innerText = statusMessages[1];
if (percent > 35 && percent < 55) statusText.innerText = statusMessages[2];
if (percent > 55 && percent < 75) statusText.innerText = statusMessages[3];
if (percent > 75 && percent < 95) statusText.innerText = statusMessages[4];
if (percent === 100) {
clearInterval(interval);
statusText.innerText = statusMessages[5];
setTimeout(() => {
statusText.style.display = 'none';
percentText.style.display = 'none';
shield.innerText = "✅";
shield.style.color = "var(--success)";
barFill.style.background = "var(--success)";
barFill.style.boxShadow = "0 0 10px var(--success)";
secureText.style.opacity = "1";
// Redirect to the dashboard where the Glass Wall is waiting
setTimeout(() => {
window.location.href = "dash/index.php";
}, 1200);
}, 500);
}
}, 60);
</script>
<?php else: ?>
<div class="auth-container">
<div class="logo-area">
<h1>City Prime</h1>
<p>Secure Global Banking</p>
</div>
<?php if ($isNewRegistration && empty($errorMsg)): ?>
<div class="welcome-alert">
<h3>🎉 Welcome to City Prime!</h3>
<p>Your account has been successfully created. For your security, an administrator must review and verify your details before you can access the dashboard. You will receive an email once approved.</p>
</div>
<?php endif; ?>
<div class="auth-box">
<?php if (!empty($errorMsg)): ?>
<div class="error-alert">
<span style="font-size: 1.2rem;">⚠️</span>
<div><?php echo htmlspecialchars($errorMsg); ?></div>
</div>
<?php endif; ?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
<div class="form-group">
<label class="form-label">Email Address</label>
<input type="email" name="email" class="form-input" placeholder="name@example.com" required>
</div>
<div class="form-group">
<label class="form-label">Password</label>
<input type="password" name="password" class="form-input" placeholder="Enter your password" required>
</div>
<div class="form-group">
<label class="form-label">4-Digit PIN</label>
<input type="password" name="pin" class="form-input" placeholder="Enter PIN" required pattern="\d{4}" maxlength="4">
</div>
<div class="forgot-pass">
<a href="forgot-password.php">Forgot Password?</a>
</div>
<button type="submit" class="primary-btn">Secure Sign In</button>
</form>
</div>
<div class="auth-footer">
Don't have an account? <a href="register.php">Open Account</a>
</div>
</div>
<?php endif; ?>
</body>
</html>
b IDATxytVսϓ22 A@IR:hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-E