Files
hr-portal-v5-designs/designs/12-payroll-dashboard.html
2026-05-09 19:35:10 +00:00

279 lines
18 KiB
HTML
Raw Permalink 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="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Payroll — HR Portal</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'Inter', sans-serif; background: #FAFAFA; color: #111827; display: flex; min-height: 100vh; }
.sidebar { width: 240px; min-height: 100vh; background: #FFFFFF; border-right: 1px solid #E5E7EB; display: flex; flex-direction: column; position: fixed; top: 0; left: 0; bottom: 0; z-index: 50; }
.sidebar-logo { padding: 20px 20px 16px; display: flex; align-items: center; gap: 10px; font-size: 18px; font-weight: 700; color: #111827; border-bottom: 1px solid #F3F4F6; }
.logo-icon { width: 32px; height: 32px; background: #4F46E5; border-radius: 8px; display: flex; align-items: center; justify-content: center; }
.logo-icon svg { width: 16px; height: 16px; }
.sidebar-nav { flex: 1; padding: 12px 0; overflow-y: auto; }
.nav-item { display: flex; align-items: center; gap: 10px; padding: 9px 16px; margin: 1px 8px; border-radius: 6px; font-size: 14px; font-weight: 500; color: #6B7280; text-decoration: none; cursor: pointer; }
.nav-item:hover { background: #F9FAFB; color: #111827; }
.nav-item.active { background: #EEF2FF; color: #4F46E5; font-weight: 600; }
.nav-item svg { width: 18px; height: 18px; flex-shrink: 0; }
.nav-badge { margin-left: auto; background: #F59E0B; color: #FFF; font-size: 11px; font-weight: 600; padding: 1px 7px; border-radius: 10px; }
.sidebar-footer { padding: 16px; border-top: 1px solid #F3F4F6; }
.user-row { display: flex; align-items: center; gap: 10px; padding: 8px; }
.user-avatar { width: 34px; height: 34px; border-radius: 50%; background: #4F46E5; color: #FFF; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600; }
.user-name { font-size: 13px; font-weight: 600; color: #111827; }
.user-role { font-size: 11px; color: #9CA3AF; }
.logout-btn { width: 100%; margin-top: 8px; padding: 7px; border: 1.5px solid #E5E7EB; border-radius: 6px; background: transparent; color: #6B7280; font-size: 13px; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px; }
.main-wrapper { margin-left: 240px; flex: 1; display: flex; flex-direction: column; }
.topnav { height: 64px; background: #FFFFFF; border-bottom: 1px solid #E5E7EB; display: flex; align-items: center; gap: 16px; padding: 0 28px; position: sticky; top: 0; z-index: 40; }
.breadcrumb { display: flex; align-items: center; gap: 8px; font-size: 14px; }
.breadcrumb a { color: #9CA3AF; text-decoration: none; }
.breadcrumb svg { width: 14px; height: 14px; color: #D1D5DB; }
.breadcrumb span { color: #111827; font-weight: 500; }
.topnav-actions { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.icon-btn { width: 36px; height: 36px; border-radius: 8px; border: 1.5px solid #E5E7EB; background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer; position: relative; }
.icon-btn svg { width: 18px; height: 18px; color: #6B7280; }
.notif-badge { position: absolute; top: -4px; right: -4px; background: #EF4444; color: #FFF; font-size: 10px; font-weight: 700; width: 16px; height: 16px; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 2px solid #FFFFFF; }
.topnav-avatar { width: 36px; height: 36px; border-radius: 50%; background: #4F46E5; color: #FFF; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600; cursor: pointer; }
.content { padding: 28px; }
.page-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; }
.page-title { font-size: 22px; font-weight: 700; }
/* MONTH SELECTOR */
.month-selector { display: flex; align-items: center; gap: 12px; background: #FFFFFF; border: 1.5px solid #E5E7EB; border-radius: 8px; padding: 8px 16px; }
.month-nav-btn { width: 28px; height: 28px; border-radius: 6px; border: 1px solid #E5E7EB; background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer; color: #6B7280; }
.month-nav-btn svg { width: 14px; height: 14px; }
.month-label { font-size: 15px; font-weight: 600; color: #111827; min-width: 120px; text-align: center; }
/* STATUS CARD */
.payroll-status-card {
background: linear-gradient(135deg, #F9FAFB 0%, #FFFFFF 100%);
border: 2px dashed #E5E7EB;
border-radius: 12px; padding: 28px;
display: flex; align-items: center; justify-content: space-between;
margin-bottom: 24px;
}
.payroll-status-card.pending { border-color: #FCD34D; background: linear-gradient(135deg, #FFFBEB 0%, #FFFFFF 100%); }
.status-info {}
.status-title { font-size: 18px; font-weight: 700; color: #111827; margin-bottom: 4px; }
.status-sub { font-size: 14px; color: #6B7280; }
.status-badge { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: 20px; font-size: 12px; font-weight: 600; margin-top: 10px; }
.status-badge.draft { background: #FEF9C3; color: #A16207; }
.btn-generate { padding: 12px 24px; background: #4F46E5; color: #FFF; border: none; border-radius: 8px; font-size: 15px; font-weight: 600; cursor: pointer; transition: background 0.15s; }
.btn-generate:hover { background: #4338CA; }
/* STATS ROW */
.stats-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }
.stat-card { background: #FFFFFF; border-radius: 10px; padding: 20px; border: 1px solid #E5E7EB; box-shadow: 0 1px 3px rgba(0,0,0,0.06); }
.stat-label { font-size: 12px; color: #6B7280; font-weight: 500; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.4px; }
.stat-value { font-size: 24px; font-weight: 700; color: #111827; }
.stat-sub { font-size: 12px; color: #9CA3AF; margin-top: 4px; }
/* TWO COL */
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.card { background: #FFFFFF; border-radius: 10px; border: 1px solid #E5E7EB; box-shadow: 0 1px 3px rgba(0,0,0,0.06); overflow: hidden; }
.card-header-row { padding: 16px 20px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid #F3F4F6; }
.card-title { font-size: 15px; font-weight: 600; color: #111827; }
.card-action { font-size: 13px; color: #4F46E5; cursor: pointer; font-weight: 500; }
table { width: 100%; border-collapse: collapse; }
thead { background: #F9FAFB; border-bottom: 1px solid #E5E7EB; }
th { padding: 12px 16px; font-size: 12px; font-weight: 600; color: #6B7280; text-align: left; text-transform: uppercase; letter-spacing: 0.4px; }
tbody tr { border-bottom: 1px solid #F3F4F6; transition: background 0.1s; }
tbody tr:last-child { border-bottom: none; }
tbody tr:hover { background: #FAFAFA; }
td { padding: 14px 16px; font-size: 14px; color: #374151; vertical-align: middle; }
td strong { color: #111827; font-weight: 600; }
.badge { padding: 3px 9px; border-radius: 4px; font-size: 11px; font-weight: 600; }
.badge-green { background: #ECFDF5; color: #059669; }
.badge-blue { background: #EFF6FF; color: #3B82F6; }
.badge-yellow { background: #FFFBEB; color: #D97706; }
.badge-gray { background: #F3F4F6; color: #6B7280; }
</style>
</head>
<body>
<aside class="sidebar">
<div class="sidebar-logo"><div class="logo-icon"><svg viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="2"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg></div>HR Portal</div>
<nav class="sidebar-nav">
<a href="04-admin-dashboard.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></svg>Dashboard</a>
<a href="05-employee-directory.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>Employees</a>
<a href="08-department-management.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>Departments</a>
<a href="09-leave-requests.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>Leave Management<span class="nav-badge">7</span></a>
<a href="11-attendance.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>Attendance</a>
<a href="12-payroll-dashboard.html" class="nav-item active"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="5" width="20" height="14" rx="2"/><line x1="2" y1="10" x2="22" y2="10"/></svg>Payroll</a>
<a href="13-recruitment.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2" ry="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg>Recruitment</a>
<a href="14-expense-claims.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>Expense Claims</a>
<a href="15-performance-reviews.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg>Performance</a>
<a href="16-reports.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21.21 15.89A10 10 0 1 1 8 2.83"/><path d="M22 12A10 10 0 0 0 12 2v10z"/></svg>Reports</a>
<a href="20-org-chart.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="1" width="6" height="5" rx="1"/><rect x="1" y="14" width="6" height="5" rx="1"/><rect x="17" y="14" width="6" height="5" rx="1"/><path d="M4 14v-4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v4"/><line x1="12" y1="6" x2="12" y2="9"/></svg>Org Chart</a>
<a href="#" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg>Announcements</a>
<a href="17-settings.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.07 4.93l-1.41 1.41M4.93 4.93l1.41 1.41M12 2v2M12 20v2M2 12h2M20 12h2M17.66 17.66l-1.41-1.41M6.34 17.66l1.41-1.41"/></svg>Settings</a>
</nav>
<div class="sidebar-footer">
<div class="user-row"><div class="user-avatar">SC</div><div><div class="user-name">Sarah Chen</div><div class="user-role">HR Administrator</div></div></div>
<button class="logout-btn">Sign Out</button>
</div>
</aside>
<div class="main-wrapper">
<header class="topnav">
<div class="breadcrumb">
<a href="04-admin-dashboard.html">Home</a>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg>
<span>Payroll</span>
</div>
<div class="topnav-actions">
<div class="icon-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 17H2a3 3 0 0 0 3-3V9a7 7 0 0 1 14 0v5a3 3 0 0 0 3 3zm-8.27 4a2 2 0 0 1-3.46 0"/></svg><span class="notif-badge">3</span></div>
<div class="topnav-avatar">SC</div>
</div>
</header>
<main class="content">
<div class="page-header">
<div class="page-title">Payroll</div>
<div class="month-selector">
<button class="month-nav-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="15 18 9 12 15 6"/></svg></button>
<span class="month-label">May 2026</span>
<button class="month-nav-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg></button>
</div>
</div>
<!-- STATUS CARD -->
<div class="payroll-status-card pending">
<div class="status-info">
<div class="status-title">May 2026 Payroll</div>
<div class="status-sub">Payroll has not been generated yet. Review attendance and leave data before processing.</div>
<div class="status-badge draft">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
Not Generated
</div>
</div>
<div style="text-align:right;">
<div style="font-size:12px;color:#9CA3AF;margin-bottom:12px;">Pay date: May 31, 2026</div>
<button class="btn-generate">Generate Payroll</button>
</div>
</div>
<!-- STATS -->
<div class="stats-row">
<div class="stat-card">
<div class="stat-label">Total Employees</div>
<div class="stat-value">248</div>
<div class="stat-sub">On active payroll</div>
</div>
<div class="stat-card">
<div class="stat-label">Gross Payroll</div>
<div class="stat-value" style="color:#4F46E5;">$284,500</div>
<div class="stat-sub">+2.1% vs April</div>
</div>
<div class="stat-card">
<div class="stat-label">Total Deductions</div>
<div class="stat-value" style="color:#EF4444;">$43,200</div>
<div class="stat-sub">Tax, PF, insurance</div>
</div>
<div class="stat-card">
<div class="stat-label">Net Payable</div>
<div class="stat-value" style="color:#10B981;">$241,300</div>
<div class="stat-sub">After all deductions</div>
</div>
</div>
<!-- TWO COLUMN -->
<div class="two-col">
<!-- SALARY STRUCTURES -->
<div class="card">
<div class="card-header-row">
<span class="card-title">Salary Structures</span>
<span class="card-action">Manage</span>
</div>
<table>
<thead>
<tr>
<th>Structure Name</th>
<th>Base Salary</th>
<th>Employees</th>
</tr>
</thead>
<tbody>
<tr>
<td><div style="font-size:14px;font-weight:500;color:#111827;">Junior (L1)</div><div style="font-size:12px;color:#9CA3AF;">$60K $85K / year</div></td>
<td><strong>$6,800</strong>/mo</td>
<td><span style="font-size:14px;font-weight:500;">42</span></td>
</tr>
<tr>
<td><div style="font-size:14px;font-weight:500;color:#111827;">Mid-Level (L2)</div><div style="font-size:12px;color:#9CA3AF;">$85K $110K / year</div></td>
<td><strong>$8,200</strong>/mo</td>
<td><span style="font-size:14px;font-weight:500;">98</span></td>
</tr>
<tr>
<td><div style="font-size:14px;font-weight:500;color:#111827;">Senior (L3)</div><div style="font-size:12px;color:#9CA3AF;">$110K $145K / year</div></td>
<td><strong>$10,500</strong>/mo</td>
<td><span style="font-size:14px;font-weight:500;">67</span></td>
</tr>
<tr>
<td><div style="font-size:14px;font-weight:500;color:#111827;">Senior (L4)</div><div style="font-size:12px;color:#9CA3AF;">$145K $180K / year</div></td>
<td><strong>$13,200</strong>/mo</td>
<td><span style="font-size:14px;font-weight:500;">28</span></td>
</tr>
<tr>
<td><div style="font-size:14px;font-weight:500;color:#111827;">Lead (L5+)</div><div style="font-size:12px;color:#9CA3AF;">$180K $220K / year</div></td>
<td><strong>$17,000</strong>/mo</td>
<td><span style="font-size:14px;font-weight:500;">13</span></td>
</tr>
</tbody>
</table>
</div>
<!-- PAYROLL HISTORY -->
<div class="card">
<div class="card-header-row">
<span class="card-title">Recent Payroll History</span>
<span class="card-action">View all</span>
</div>
<table>
<thead>
<tr>
<th>Period</th>
<th>Net Payable</th>
<th>Employees</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>April 2026</strong></td>
<td>$235,800</td>
<td>244</td>
<td><span class="badge badge-green">Paid</span></td>
</tr>
<tr>
<td><strong>March 2026</strong></td>
<td>$231,200</td>
<td>241</td>
<td><span class="badge badge-green">Paid</span></td>
</tr>
<tr>
<td><strong>February 2026</strong></td>
<td>$228,500</td>
<td>239</td>
<td><span class="badge badge-green">Paid</span></td>
</tr>
<tr>
<td><strong>January 2026</strong></td>
<td>$224,900</td>
<td>236</td>
<td><span class="badge badge-green">Paid</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</main>
</div>
</body>
</html>