Files
D1041231012_MuhammadArabbiG…/login.html
T

340 lines
9.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="utf-8" />
<title>Login SIG Pendataan Warga Kurang Mampu</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: Arial, sans-serif;
background: linear-gradient(135deg, #1a3a5c 0%, #2e6da4 50%, #4a9fd4 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.login-wrapper {
width: 100%;
max-width: 420px;
padding: 20px;
}
/* ── Header ── */
.login-header {
text-align: center;
margin-bottom: 28px;
color: white;
}
.login-header .icon {
font-size: 52px;
display: block;
margin-bottom: 10px;
filter: drop-shadow(0 2px 6px rgba(0,0,0,0.3));
}
.login-header h1 {
font-size: 20px;
font-weight: 700;
line-height: 1.3;
letter-spacing: 0.3px;
}
.login-header p {
font-size: 13px;
opacity: 0.85;
margin-top: 4px;
}
/* ── Card ── */
.login-card {
background: white;
border-radius: 14px;
padding: 32px 28px 28px;
box-shadow: 0 20px 60px rgba(0,0,0,0.25);
}
.login-card h2 {
font-size: 18px;
color: #1a3a5c;
margin-bottom: 22px;
text-align: center;
}
/* ── Form ── */
.form-group {
margin-bottom: 18px;
}
.form-group label {
display: block;
font-size: 13px;
font-weight: 600;
color: #444;
margin-bottom: 6px;
}
.form-group .input-wrap {
position: relative;
}
.form-group .input-icon {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
font-size: 16px;
color: #888;
pointer-events: none;
}
.form-group input {
width: 100%;
padding: 11px 12px 11px 38px;
border: 1.5px solid #ddd;
border-radius: 8px;
font-size: 14px;
color: #222;
transition: border-color 0.2s, box-shadow 0.2s;
outline: none;
}
.form-group input:focus {
border-color: #2e6da4;
box-shadow: 0 0 0 3px rgba(46,109,164,0.15);
}
/* ── Role tabs ── */
.role-tabs {
display: flex;
gap: 10px;
margin-bottom: 22px;
}
.role-tab {
flex: 1;
padding: 10px 8px;
border: 2px solid #ddd;
border-radius: 8px;
background: #f9f9f9;
cursor: pointer;
text-align: center;
font-size: 13px;
font-weight: 600;
color: #666;
transition: all 0.2s;
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
}
.role-tab .tab-icon { font-size: 22px; }
.role-tab.active {
border-color: #2e6da4;
background: #eaf2fb;
color: #1a3a5c;
}
.role-tab:hover:not(.active) {
border-color: #aac4e0;
background: #f4f8fd;
}
/* ── Button ── */
.btn-login {
width: 100%;
padding: 13px;
background: linear-gradient(135deg, #1a3a5c, #2e6da4);
color: white;
border: none;
border-radius: 8px;
font-size: 15px;
font-weight: 700;
cursor: pointer;
transition: opacity 0.2s, transform 0.1s;
letter-spacing: 0.5px;
}
.btn-login:hover { opacity: 0.92; }
.btn-login:active { transform: scale(0.99); }
/* ── Error ── */
.error-msg {
display: none;
background: #fff0f0;
border: 1px solid #f5c0c0;
color: #c0392b;
border-radius: 7px;
padding: 10px 14px;
font-size: 13px;
margin-bottom: 16px;
align-items: center;
gap: 8px;
}
.error-msg.show { display: flex; }
/* ── Demo hint ── */
.demo-hint {
margin-top: 20px;
background: #f4f8fd;
border: 1px solid #d0e4f5;
border-radius: 8px;
padding: 12px 14px;
font-size: 12px;
color: #555;
}
.demo-hint strong { color: #1a3a5c; }
.demo-hint table { width: 100%; border-collapse: collapse; margin-top: 6px; }
.demo-hint td { padding: 3px 6px; }
.demo-hint td:first-child { color: #888; width: 80px; }
.demo-hint td:last-child { font-family: monospace; color: #2e6da4; font-weight: bold; }
/* ── Footer ── */
.login-footer {
text-align: center;
margin-top: 18px;
font-size: 12px;
color: rgba(255,255,255,0.6);
}
@media (max-width: 480px) {
.login-card { padding: 24px 18px 20px; }
}
</style>
</head>
<body>
<div class="login-wrapper">
<!-- Header -->
<div class="login-header">
<span class="icon">🗺️</span>
<h1>SIG Pendataan Warga Kurang Mampu</h1>
<p>Kota Pontianak, Kalimantan Barat</p>
</div>
<!-- Card -->
<div class="login-card">
<h2>Masuk ke Sistem</h2>
<!-- Role selector -->
<div class="role-tabs">
<div class="role-tab active" id="tabAdmin" onclick="pilihRole('admin')">
<span class="tab-icon">🛡️</span>
Admin
</div>
<div class="role-tab" id="tabUser" onclick="pilihRole('user')">
<span class="tab-icon">👤</span>
Pengguna
</div>
</div>
<!-- Error -->
<div class="error-msg" id="errorMsg">
<span>⚠️</span>
<span id="errorText">Username atau password salah.</span>
</div>
<!-- Form -->
<div class="form-group">
<label for="username">Username</label>
<div class="input-wrap">
<span class="input-icon">👤</span>
<input type="text" id="username" placeholder="Masukkan username"
onkeydown="if(event.key==='Enter') doLogin()">
</div>
</div>
<div class="form-group">
<label for="password">Password</label>
<div class="input-wrap">
<span class="input-icon">🔒</span>
<input type="password" id="password" placeholder="Masukkan password"
onkeydown="if(event.key==='Enter') doLogin()">
</div>
</div>
<button class="btn-login" onclick="doLogin()">Masuk</button>
<!-- Demo credentials -->
<div class="demo-hint">
<strong>Akun Demo:</strong>
<table>
<tr><td>Admin</td><td>admin / admin123</td></tr>
<tr><td>Pengguna</td><td>user / user123</td></tr>
</table>
</div>
</div>
<div class="login-footer">
&copy; 2025 Sistem Informasi Geografis Pontianak
</div>
</div>
<script>
var roleAktif = 'admin';
function pilihRole(role) {
roleAktif = role;
document.getElementById('tabAdmin').classList.toggle('active', role === 'admin');
document.getElementById('tabUser').classList.toggle('active', role === 'user');
document.getElementById('errorMsg').classList.remove('show');
}
// ── Akun yang diizinkan ──────────────────────────────────────
// Pada implementasi nyata, validasi dilakukan di server (PHP+DB).
// Di sini validasi dilakukan di klien untuk keperluan demo/prototype.
var akunValid = {
admin: { username: 'admin', password: 'admin123' },
user: { username: 'user', password: 'user123' }
};
function doLogin() {
var username = document.getElementById('username').value.trim();
var password = document.getElementById('password').value;
var akun = akunValid[roleAktif];
var errEl = document.getElementById('errorMsg');
var errTxt = document.getElementById('errorText');
// Validasi kosong
if (!username || !password) {
errTxt.textContent = 'Username dan password wajib diisi.';
errEl.classList.add('show');
return;
}
// Validasi kredensial
if (username === akun.username && password === akun.password) {
// Simpan sesi ke sessionStorage
sessionStorage.setItem('sig_role', roleAktif);
sessionStorage.setItem('sig_username', username);
sessionStorage.setItem('sig_loggedin', '1');
// Redirect ke halaman utama
window.location.href = 'pendataanwarga2.html';
} else {
errTxt.textContent = 'Username atau password salah.';
errEl.classList.add('show');
document.getElementById('password').value = '';
document.getElementById('password').focus();
}
}
// Jika sudah login, langsung redirect
if (sessionStorage.getItem('sig_loggedin') === '1') {
window.location.href = 'pendataanwarga2.html';
}
</script>
</body>
</html>