Suwandiaminsangaji

Untitled

Oct 11th, 2025
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.75 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="id">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Login - Sistem Penyimpanan Surat</title>
  7.  
  8. <!-- Bootstrap CSS -->
  9. <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
  10.  
  11. <!-- Font Awesome -->
  12. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
  13.  
  14. <!-- Google Fonts -->
  15. <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
  16.  
  17. <style>
  18. body {
  19. font-family: 'Inter', sans-serif;
  20. background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  21. min-height: 100vh;
  22. }
  23.  
  24. .login-container {
  25. max-width: 1000px;
  26. margin: 0 auto;
  27. border-radius: 20px;
  28. overflow: hidden;
  29. box-shadow: 0 25px 50px rgba(0,0,0,0.1);
  30. background: white;
  31. }
  32.  
  33. .image-section {
  34. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  35. padding: 60px 40px;
  36. display: flex;
  37. align-items: center;
  38. justify-content: center;
  39. flex-direction: column;
  40. position: relative;
  41. overflow: hidden;
  42. }
  43.  
  44. .image-section::before {
  45. content: '';
  46. position: absolute;
  47. top: 0;
  48. left: 0;
  49. right: 0;
  50. bottom: 0;
  51. background: url('{{ asset('assets/images/logo/locked.png') }}') center/contain no-repeat;
  52. opacity: 0.1;
  53. z-index: 1;
  54. }
  55.  
  56. .image-content {
  57. position: relative;
  58. z-index: 2;
  59. text-align: center;
  60. color: white;
  61. }
  62.  
  63. .image-content h2 {
  64. font-size: 2.5rem;
  65. font-weight: 700;
  66. margin-bottom: 20px;
  67. text-shadow: 0 2px 10px rgba(0,0,0,0.3);
  68. }
  69.  
  70. .image-content p {
  71. font-size: 1.1rem;
  72. opacity: 0.9;
  73. line-height: 1.6;
  74. }
  75.  
  76. .logo-main {
  77. width: 120px;
  78. height: 120px;
  79. background: rgba(255,255,255,0.2);
  80. border-radius: 50%;
  81. display: flex;
  82. align-items: center;
  83. justify-content: center;
  84. margin-bottom: 30px;
  85. backdrop-filter: blur(10px);
  86. border: 2px solid rgba(255,255,255,0.3);
  87. }
  88.  
  89. .form-section {
  90. padding: 60px 40px;
  91. }
  92.  
  93. .login-card {
  94. border: none;
  95. border-radius: 0;
  96. box-shadow: none;
  97. background: transparent;
  98. }
  99.  
  100. .form-control {
  101. border: 2px solid #f1f3f4;
  102. border-radius: 10px;
  103. padding: 12px 15px;
  104. font-size: 14px;
  105. transition: all 0.3s ease;
  106. }
  107.  
  108. .form-control:focus {
  109. border-color: #667eea;
  110. box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
  111. background-color: #fafbfc;
  112. }
  113.  
  114. .input-group-text {
  115. border: 2px solid #f1f3f4;
  116. border-right: none;
  117. background-color: #f8f9fa;
  118. border-radius: 10px 0 0 10px;
  119. }
  120.  
  121. .input-group .form-control {
  122. border-left: none;
  123. border-radius: 0 10px 10px 0;
  124. }
  125.  
  126. .btn-login {
  127. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  128. border: none;
  129. border-radius: 10px;
  130. font-weight: 600;
  131. padding: 15px;
  132. font-size: 16px;
  133. transition: all 0.3s ease;
  134. position: relative;
  135. overflow: hidden;
  136. }
  137.  
  138. .btn-login:hover {
  139. transform: translateY(-2px);
  140. box-shadow: 0 15px 35px rgba(102, 126, 234, 0.3);
  141. }
  142.  
  143. .btn-login::before {
  144. content: '';
  145. position: absolute;
  146. top: 0;
  147. left: -100%;
  148. width: 100%;
  149. height: 100%;
  150. background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
  151. transition: left 0.5s ease;
  152. }
  153.  
  154. .btn-login:hover::before {
  155. left: 100%;
  156. }
  157.  
  158. .form-title {
  159. color: #2d3748;
  160. font-weight: 700;
  161. margin-bottom: 10px;
  162. }
  163.  
  164. .form-subtitle {
  165. color: #718096;
  166. margin-bottom: 30px;
  167. }
  168.  
  169. @media (max-width: 768px) {
  170. .image-section {
  171. padding: 40px 20px;
  172. }
  173.  
  174. .form-section {
  175. padding: 40px 20px;
  176. }
  177.  
  178. .image-content h2 {
  179. font-size: 1.8rem;
  180. }
  181.  
  182. .logo-main {
  183. width: 80px;
  184. height: 80px;
  185. }
  186. }
  187. </style>
  188. </head>
  189. <body class="d-flex align-items-center justify-content-center py-5">
  190. <div class="container">
  191. <div class="login-container">
  192. <div class="row g-0 h-100">
  193. <!-- Image Section -->
  194. <div class="col-lg-6">
  195. <div class="image-section h-100">
  196. <div class="image-content">
  197. <div class="logo-main">
  198. <img src="{{asset('assets/img/logo.png')}}" alt="Logo" width="60" height="60" style="filter: brightness(0) invert(1);">
  199. </div>
  200.  
  201. </div>
  202. </div>
  203. </div>
  204.  
  205. <!-- Form Section -->
  206. <div class="col-lg-6">
  207. <div class="form-section">
  208. <div class="login-card">
  209. <div class="card-body p-0">
  210. <!-- Form Header -->
  211. <div class="text-center mb-4">
  212. <h1 class="form-title h3">Masuk ke Sistem</h1>
  213. <p class="form-subtitle">Silakan masukkan kredensial Anda untuk mengakses dashboard</p>
  214. </div>
  215.  
  216. <!-- Login Form -->
  217. <form method="POST" action="{{ route('login.post') }}">
  218. @csrf
  219.  
  220. <div class="mb-3">
  221. <label for="email" class="form-label fw-semibold text-dark">Alamat Email</label>
  222. <div class="input-group">
  223. <span class="input-group-text">
  224. <i class="fas fa-envelope text-muted"></i>
  225. </span>
  226. <input type="email"
  227. id="email"
  228. name="email"
  229. value="{{ old('email') }}"
  230. class="form-control @error('email') is-invalid @enderror"
  231. placeholder="Masukkan alamat email"
  232. required>
  233. </div>
  234. @error('email')
  235. <div class="invalid-feedback">{{ $message }}</div>
  236. @enderror
  237. </div>
  238.  
  239. <div class="mb-4">
  240. <label for="password" class="form-label fw-semibold text-dark">Password</label>
  241. <div class="input-group">
  242. <span class="input-group-text">
  243. <i class="fas fa-lock text-muted"></i>
  244. </span>
  245. <input type="password"
  246. id="password"
  247. name="password"
  248. class="form-control @error('password') is-invalid @enderror"
  249. placeholder="Masukkan password"
  250. required>
  251. </div>
  252. @error('password')
  253. <div class="invalid-feedback">{{ $message }}</div>
  254. @enderror
  255. </div>
  256.  
  257. <div class="mb-4">
  258. <div class="form-check">
  259. <input class="form-check-input" type="checkbox" id="remember" name="remember">
  260. <label class="form-check-label text-muted" for="remember">
  261. Ingat saya
  262. </label>
  263. </div>
  264. </div>
  265.  
  266. <button type="submit" class="btn btn-login text-white w-100 mb-3">
  267. <i class="fas fa-sign-in-alt me-2"></i>
  268. Masuk ke Dashboard
  269. </button>
  270. </form>
  271.  
  272. <!-- Additional Links -->
  273. <div class="text-center">
  274. <small class="text-muted">
  275. Lupa password? <a href="#" class="text-decoration-none" style="color: #667eea;">Reset disini</a>
  276. </small>
  277. </div>
  278. </div>
  279. </div>
  280. </div>
  281. </div>
  282. </div>
  283. </div>
  284.  
  285. <!-- Footer -->
  286. <div class="text-center mt-4">
  287. <p class="text-muted mb-0">
  288. <small>&copy; {{ date('Y') }} Sistem Penyimpanan Surat. All rights reserved.</small>
  289. </p>
  290. </div>
  291. </div>
  292.  
  293. <!-- Bootstrap JS -->
  294. <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  295.  
  296. <!-- Login Animation -->
  297. <script>
  298. document.addEventListener('DOMContentLoaded', function() {
  299. // Animate login container
  300. const loginContainer = document.querySelector('.login-container');
  301. loginContainer.style.opacity = '0';
  302. loginContainer.style.transform = 'translateY(30px)';
  303.  
  304. setTimeout(() => {
  305. loginContainer.style.transition = 'all 0.8s ease';
  306. loginContainer.style.opacity = '1';
  307. loginContainer.style.transform = 'translateY(0)';
  308. }, 100);
  309.  
  310. // Animate form elements
  311. const formElements = document.querySelectorAll('.form-section .mb-3, .form-section .mb-4, .btn-login');
  312. formElements.forEach((element, index) => {
  313. element.style.opacity = '0';
  314. element.style.transform = 'translateX(20px)';
  315.  
  316. setTimeout(() => {
  317. element.style.transition = 'all 0.6s ease';
  318. element.style.opacity = '1';
  319. element.style.transform = 'translateX(0)';
  320. }, 300 + (index * 100));
  321. });
  322.  
  323. // Animate image section elements
  324. const imageElements = document.querySelectorAll('.image-content > *');
  325. imageElements.forEach((element, index) => {
  326. element.style.opacity = '0';
  327. element.style.transform = 'translateY(20px)';
  328.  
  329. setTimeout(() => {
  330. element.style.transition = 'all 0.6s ease';
  331. element.style.opacity = '1';
  332. element.style.transform = 'translateY(0)';
  333. }, 500 + (index * 150));
  334. });
  335.  
  336. // Add floating animation to logo
  337. const logo = document.querySelector('.logo-main');
  338. if (logo) {
  339. setInterval(() => {
  340. logo.style.transform = 'translateY(-5px)';
  341. setTimeout(() => {
  342. logo.style.transform = 'translateY(0)';
  343. }, 1000);
  344. }, 2000);
  345. }
  346. });
  347.  
  348. // Add form validation feedback
  349. const inputs = document.querySelectorAll('input[required]');
  350. inputs.forEach(input => {
  351. input.addEventListener('blur', function() {
  352. if (this.value.trim() === '') {
  353. this.classList.add('is-invalid');
  354. } else {
  355. this.classList.remove('is-invalid');
  356. this.classList.add('is-valid');
  357. }
  358. });
  359.  
  360. input.addEventListener('input', function() {
  361. if (this.classList.contains('is-invalid') && this.value.trim() !== '') {
  362. this.classList.remove('is-invalid');
  363. this.classList.add('is-valid');
  364. }
  365. });
  366. });
  367. </script>
  368. </body>
  369. </html>
  370.  
Advertisement
Add Comment
Please, Sign In to add comment