TIF_Nganjuk_E41220879/resources/views/auth/reset-password.blade.php

201 lines
8.9 KiB
PHP

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Reset Password - {{ config('app.name', 'Pencatatan Obat') }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
* { font-family: 'Inter', sans-serif; }
body {
min-height: 100vh;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
display: flex; align-items: center; justify-content: center; padding: 20px;
}
.card-container { width: 100%; max-width: 440px; }
.card-custom {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20px); border-radius: 24px;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
padding: 48px 40px;
border: 1px solid rgba(255, 255, 255, 0.2);
animation: fadeInUp 0.6s ease-out;
}
.card-header-area { text-align: center; margin-bottom: 28px; }
.card-icon {
width: 72px; height: 72px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 20px; display: flex; align-items: center; justify-content: center;
margin: 0 auto 20px;
box-shadow: 0 10px 30px rgba(102, 126, 234, 0.4);
}
.card-icon i { font-size: 32px; color: white; }
.card-header-area h1 { font-size: 1.5rem; font-weight: 700; color: #1a1a2e; margin-bottom: 8px; }
.card-header-area p { color: #6b7280; font-size: 0.9rem; margin: 0; }
.form-floating { margin-bottom: 20px; }
.form-floating > .form-control {
height: 56px; padding: 16px 16px 16px 48px;
border: 2px solid #e5e7eb; border-radius: 14px;
font-size: 0.95rem; transition: all 0.3s ease; background-color: #f9fafb;
}
.form-floating > .form-control:focus {
border-color: #667eea;
box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.15);
background-color: #fff;
}
.form-floating > label { padding-left: 48px; color: #9ca3af; }
.form-floating > .form-control:focus ~ label,
.form-floating > .form-control:not(:placeholder-shown) ~ label {
color: #667eea;
transform: scale(0.85) translateY(-0.75rem) translateX(0.15rem);
}
.input-icon {
position: absolute; left: 16px; top: 50%;
transform: translateY(-50%); color: #9ca3af;
font-size: 1.2rem; z-index: 5; transition: color 0.3s ease;
}
.form-floating:focus-within .input-icon { color: #667eea; }
.password-toggle {
position: absolute; right: 16px; top: 50%;
transform: translateY(-50%); background: none; border: none;
color: #9ca3af; cursor: pointer; z-index: 5; padding: 4px;
transition: color 0.3s ease;
}
.password-toggle:hover { color: #667eea; }
.btn-submit {
width: 100%; height: 52px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border: none; border-radius: 14px; color: white;
font-weight: 600; font-size: 1rem;
transition: all 0.3s ease;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
}
.btn-submit:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.5);
background: linear-gradient(135deg, #5a6fd6 0%, #6a4190 100%);
color: white;
}
.alert { border-radius: 12px; border: none; font-size: 0.9rem; padding: 14px 16px; margin-bottom: 24px; }
.alert-danger { background-color: #fee2e2; color: #991b1b; }
.is-invalid { border-color: #ef4444 !important; }
.invalid-feedback { font-size: 0.85rem; margin-top: 6px; }
.bg-shapes { position: fixed; width: 100%; height: 100%; top: 0; left: 0; overflow: hidden; z-index: -1; }
.bg-shapes span { position: absolute; display: block; background: rgba(255,255,255,0.1); border-radius: 50%; animation: float 8s infinite ease-in-out; }
.bg-shapes span:nth-child(1) { width: 80px; height: 80px; top: 20%; left: 10%; }
.bg-shapes span:nth-child(2) { width: 120px; height: 120px; top: 60%; right: 10%; animation-delay: 2s; }
.bg-shapes span:nth-child(3) { width: 60px; height: 60px; bottom: 20%; left: 20%; animation-delay: 4s; }
@keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
@keyframes float { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20px) rotate(10deg); } }
</style>
</head>
<body>
<div class="bg-shapes"><span></span><span></span><span></span></div>
<div class="card-container">
<div class="card-custom">
<div class="card-header-area">
<div class="card-icon">
<i class="bi bi-shield-lock"></i>
</div>
<h1>Reset Password</h1>
<p>Masukkan password baru Anda</p>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<i class="bi bi-exclamation-circle me-2"></i>
@foreach ($errors->all() as $error)
{{ $error }}
@endforeach
</div>
@endif
<form method="POST" action="{{ route('password.store') }}">
@csrf
<input type="hidden" name="token" value="{{ $request->route('token') }}">
<!-- Email -->
<div class="form-floating position-relative">
<i class="bi bi-envelope input-icon"></i>
<input type="email"
class="form-control @error('email') is-invalid @enderror"
id="email" name="email"
value="{{ old('email', $request->email) }}"
placeholder="Email" required autofocus>
<label for="email">Email</label>
</div>
<!-- Password -->
<div class="form-floating position-relative">
<i class="bi bi-lock input-icon"></i>
<input type="password"
class="form-control @error('password') is-invalid @enderror"
id="password" name="password"
placeholder="Password Baru" required>
<label for="password">Password Baru</label>
<button type="button" class="password-toggle" onclick="togglePassword('password', 'toggleIcon1')">
<i class="bi bi-eye" id="toggleIcon1"></i>
</button>
</div>
<!-- Confirm Password -->
<div class="form-floating position-relative">
<i class="bi bi-lock-fill input-icon"></i>
<input type="password"
class="form-control"
id="password_confirmation" name="password_confirmation"
placeholder="Konfirmasi Password" required>
<label for="password_confirmation">Konfirmasi Password</label>
<button type="button" class="password-toggle" onclick="togglePassword('password_confirmation', 'toggleIcon2')">
<i class="bi bi-eye" id="toggleIcon2"></i>
</button>
</div>
<button type="submit" class="btn btn-submit">
<i class="bi bi-check-lg me-2"></i>Reset Password
</button>
</form>
</div>
</div>
<script>
function togglePassword(inputId, iconId) {
const input = document.getElementById(inputId);
const icon = document.getElementById(iconId);
if (input.type === 'password') {
input.type = 'text';
icon.classList.replace('bi-eye', 'bi-eye-slash');
} else {
input.type = 'password';
icon.classList.replace('bi-eye-slash', 'bi-eye');
}
}
</script>
</body>
</html>