Files
hr-portal/designs/03-admin-dashboard.html
2026-05-04 15:56:20 +00:00

390 lines
23 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>HR Portal — Admin Dashboard</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;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: #F8FAFC; color: #0F172A; display: flex; min-height: 100vh; }
.sidebar { width: 240px; min-height: 100vh; background: #1E293B; display: flex; flex-direction: column; flex-shrink: 0; position: fixed; top: 0; left: 0; bottom: 0; }
.sidebar-logo { padding: 20px 20px 16px; border-bottom: 1px solid rgba(255,255,255,0.08); display: flex; align-items: center; gap: 10px; }
.sidebar-logo-icon { width: 36px; height: 36px; background: #4F46E5; border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.sidebar-logo-text { font-size: 15px; font-weight: 700; color: #fff; }
.sidebar-logo-sub { font-size: 11px; color: #94A3B8; margin-top: 1px; }
.sidebar-nav { padding: 16px 0; flex: 1; }
.nav-section-label { font-size: 10px; font-weight: 600; color: #475569; text-transform: uppercase; letter-spacing: 0.8px; padding: 12px 20px 6px; }
.nav-item { display: flex; align-items: center; gap: 10px; padding: 10px 20px; font-size: 14px; font-weight: 500; color: #94A3B8; cursor: pointer; border-left: 3px solid transparent; transition: all 0.15s; text-decoration: none; }
.nav-item:hover { color: #fff; background: rgba(255,255,255,0.05); }
.nav-item.active { color: #818CF8; background: rgba(79,70,229,0.15); border-left-color: #4F46E5; font-weight: 600; }
.nav-item svg { width: 18px; height: 18px; flex-shrink: 0; }
.nav-badge { margin-left: auto; background: #EF4444; color: #fff; font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 999px; }
.sidebar-footer { padding: 16px 20px; border-top: 1px solid rgba(255,255,255,0.08); }
.sidebar-user { display: flex; align-items: center; gap: 10px; }
.avatar-sm { width: 34px; height: 34px; border-radius: 50%; background: #7C3AED; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; color: #fff; flex-shrink: 0; }
.sidebar-user-name { font-size: 13px; font-weight: 600; color: #E2E8F0; }
.sidebar-user-role { font-size: 11px; color: #64748B; }
.main { margin-left: 240px; flex: 1; display: flex; flex-direction: column; }
.topbar { height: 64px; background: #fff; border-bottom: 1px solid #E2E8F0; display: flex; align-items: center; justify-content: space-between; padding: 0 28px; position: sticky; top: 0; z-index: 10; }
.topbar-left { display: flex; align-items: center; gap: 12px; }
.topbar-title { font-size: 16px; font-weight: 600; color: #0F172A; }
.role-badge { background: #7C3AED; color: #fff; font-size: 11px; font-weight: 700; padding: 3px 10px; border-radius: 999px; letter-spacing: 0.3px; }
.topbar-right { display: flex; align-items: center; gap: 16px; }
.icon-btn { width: 38px; height: 38px; border-radius: 8px; background: #F1F5F9; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; position: relative; }
.icon-btn svg { width: 18px; height: 18px; color: #64748B; }
.notif-dot { position: absolute; top: 8px; right: 8px; width: 8px; height: 8px; background: #EF4444; border-radius: 50%; border: 2px solid #fff; }
.topbar-user { display: flex; align-items: center; gap: 10px; }
.avatar { width: 38px; height: 38px; border-radius: 50%; background: #7C3AED; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; color: #fff; flex-shrink: 0; }
.topbar-user-name { font-size: 14px; font-weight: 600; color: #0F172A; }
.topbar-user-id { font-size: 12px; color: #64748B; }
.content { padding: 28px; flex: 1; }
.page-title { font-size: 20px; font-weight: 700; color: #0F172A; margin-bottom: 4px; }
.page-subtitle { font-size: 13px; color: #64748B; margin-bottom: 24px; }
.cards-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-bottom: 28px; }
.card { background: #fff; border-radius: 12px; padding: 20px 24px; box-shadow: 0 1px 3px rgba(0,0,0,0.07); border: 1px solid #F1F5F9; }
.card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.card-label { font-size: 12px; font-weight: 600; color: #64748B; text-transform: uppercase; letter-spacing: 0.5px; }
.card-icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; }
.card-icon.indigo { background: #EEF2FF; } .card-icon.indigo svg { color: #4F46E5; }
.card-icon.red { background: #FEF2F2; } .card-icon.red svg { color: #EF4444; }
.card-icon.green { background: #ECFDF5; } .card-icon.green svg { color: #10B981; }
.card-icon.amber { background: #FFFBEB; } .card-icon.amber svg { color: #F59E0B; }
.card-icon svg { width: 18px; height: 18px; }
.card-value { font-size: 30px; font-weight: 700; color: #0F172A; line-height: 1; }
.card-meta { font-size: 12px; color: #64748B; margin-top: 6px; }
.card-trend { display: flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 600; margin-top: 6px; }
.trend-up { color: #10B981; } .trend-down { color: #EF4444; }
.section-title { font-size: 15px; font-weight: 700; color: #0F172A; margin-bottom: 14px; display: flex; align-items: center; justify-content: space-between; }
.view-all { font-size: 12px; font-weight: 500; color: #4F46E5; cursor: pointer; text-decoration: none; }
.two-cols { display: grid; grid-template-columns: 1fr 320px; gap: 20px; }
/* TABLE */
.table-card { background: #fff; border-radius: 12px; box-shadow: 0 1px 3px rgba(0,0,0,0.07); border: 1px solid #F1F5F9; overflow: hidden; margin-bottom: 20px; }
table { width: 100%; border-collapse: collapse; }
thead th { background: #F8FAFC; padding: 12px 16px; text-align: left; font-size: 11px; font-weight: 700; color: #64748B; text-transform: uppercase; letter-spacing: 0.5px; border-bottom: 1px solid #E2E8F0; }
tbody td { padding: 14px 16px; font-size: 13px; color: #374151; border-bottom: 1px solid #F1F5F9; vertical-align: middle; }
tbody tr:last-child td { border-bottom: none; }
tbody tr:hover { background: #FAFBFC; }
.emp-name { font-weight: 600; color: #0F172A; }
.emp-id { font-size: 11px; color: #94A3B8; margin-top: 1px; }
.badge { display: inline-flex; align-items: center; padding: 3px 9px; border-radius: 999px; font-size: 11px; font-weight: 600; }
.badge-indigo { background: #EEF2FF; color: #4F46E5; }
.badge-amber { background: #FFFBEB; color: #D97706; }
.badge-green { background: #ECFDF5; color: #059669; }
.badge-red { background: #FEF2F2; color: #DC2626; }
.btn-sm { padding: 5px 12px; border-radius: 6px; font-size: 12px; font-weight: 600; cursor: pointer; border: none; font-family: 'Inter', sans-serif; }
.btn-approve { background: #ECFDF5; color: #059669; }
.btn-approve:hover { background: #D1FAE5; }
.btn-reject { background: #FEF2F2; color: #DC2626; margin-left: 4px; }
.btn-reject:hover { background: #FEE2E2; }
/* PAYROLL CARD */
.payroll-card { background: #fff; border-radius: 12px; padding: 20px 24px; box-shadow: 0 1px 3px rgba(0,0,0,0.07); border: 1px solid #F1F5F9; }
.payroll-month { font-size: 18px; font-weight: 700; color: #0F172A; margin-bottom: 4px; }
.payroll-status { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; }
.status-dot { width: 8px; height: 8px; border-radius: 50%; }
.payroll-stats { display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px; }
.payroll-stat { display: flex; justify-content: space-between; align-items: center; }
.payroll-stat-label { font-size: 12px; color: #64748B; }
.payroll-stat-val { font-size: 13px; font-weight: 600; color: #0F172A; }
.btn-primary { background: #4F46E5; color: #fff; border: none; border-radius: 8px; padding: 10px 18px; font-size: 13px; font-weight: 600; cursor: pointer; font-family: 'Inter', sans-serif; width: 100%; }
.btn-primary:hover { background: #4338CA; }
</style>
</head>
<body>
<aside class="sidebar">
<div class="sidebar-logo">
<div class="sidebar-logo-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
<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>
<div>
<div class="sidebar-logo-text">TechCorp HR</div>
<div class="sidebar-logo-sub">Admin Portal</div>
</div>
</div>
<nav class="sidebar-nav">
<div class="nav-section-label">Administration</div>
<a class="nav-item active" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="nav-item" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="nav-item" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>
Attendance
</a>
<a class="nav-item" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg>
Leave Approvals
<span class="nav-badge">12</span>
</a>
<a class="nav-item" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
Payroll
</a>
<a class="nav-item" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>
Reimbursements
<span class="nav-badge">8</span>
</a>
<a class="nav-item" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
Announcements
</a>
<a class="nav-item" href="#">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>
Reports
</a>
</nav>
<div class="sidebar-footer">
<div class="sidebar-user">
<div class="avatar-sm">PK</div>
<div>
<div class="sidebar-user-name">Priya Kapoor</div>
<div class="sidebar-user-role">HR Admin · EMP-00012</div>
</div>
</div>
</div>
</aside>
<div class="main">
<header class="topbar">
<div class="topbar-left">
<div class="topbar-title">Admin Dashboard</div>
<span class="role-badge">HR ADMIN</span>
</div>
<div class="topbar-right">
<button class="icon-btn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
<span class="notif-dot"></span>
</button>
<div class="topbar-user">
<div>
<div class="topbar-user-name">Priya Kapoor</div>
<div class="topbar-user-id">HR Admin</div>
</div>
<div class="avatar">PK</div>
</div>
</div>
</header>
<div class="content">
<div class="page-title">Admin Dashboard</div>
<div class="page-subtitle">Monday, 4 May 2026 — Overview of all HR operations</div>
<div class="cards-grid">
<div class="card">
<div class="card-header">
<div class="card-label">Total Employees</div>
<div class="card-icon indigo">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>
</div>
<div class="card-value">247</div>
<div class="card-trend trend-up">↑ 3 <span style="color:#64748B;font-weight:400;">new this month</span></div>
</div>
<div class="card">
<div class="card-header">
<div class="card-label">Pending Leave Approvals</div>
<div class="card-icon red">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>
</div>
</div>
<div class="card-value">12</div>
<div class="card-meta">5 urgent — older than 48 hrs</div>
</div>
<div class="card">
<div class="card-header">
<div class="card-label">Today's Attendance Rate</div>
<div class="card-icon green">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
</div>
</div>
<div class="card-value">94<span style="font-size:16px;color:#64748B;">%</span></div>
<div class="card-meta">232 / 247 employees present</div>
</div>
<div class="card">
<div class="card-header">
<div class="card-label">Pending Reimbursements</div>
<div class="card-icon amber">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
</div>
</div>
<div class="card-value">8</div>
<div class="card-meta">Total value: ₹32,400</div>
</div>
</div>
<div class="two-cols">
<!-- PENDING APPROVALS TABLE -->
<div>
<div class="section-title">
Pending Approvals
<a href="#" class="view-all">View all →</a>
</div>
<div class="table-card">
<table>
<thead>
<tr>
<th>Employee</th>
<th>Type</th>
<th>Details</th>
<th>Requested On</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="emp-name">Arjun Mehta</div>
<div class="emp-id">EMP-00183 · Engineering</div>
</td>
<td><span class="badge badge-indigo">Casual Leave</span></td>
<td>May 79 (3 days)</td>
<td>May 2, 2026</td>
<td>
<button class="btn-sm btn-approve">Approve</button>
<button class="btn-sm btn-reject">Reject</button>
</td>
</tr>
<tr>
<td>
<div class="emp-name">Sunita Rao</div>
<div class="emp-id">EMP-00091 · Finance</div>
</td>
<td><span class="badge badge-amber">Reimbursement</span></td>
<td>Travel claim — ₹3,200</td>
<td>May 1, 2026</td>
<td>
<button class="btn-sm btn-approve">Approve</button>
<button class="btn-sm btn-reject">Reject</button>
</td>
</tr>
<tr>
<td>
<div class="emp-name">Vikram Nair</div>
<div class="emp-id">EMP-00147 · Sales</div>
</td>
<td><span class="badge badge-indigo">Sick Leave</span></td>
<td>May 56 (2 days)</td>
<td>May 3, 2026</td>
<td>
<button class="btn-sm btn-approve">Approve</button>
<button class="btn-sm btn-reject">Reject</button>
</td>
</tr>
<tr>
<td>
<div class="emp-name">Meera Iyer</div>
<div class="emp-id">EMP-00229 · HR</div>
</td>
<td><span class="badge badge-amber">Reimbursement</span></td>
<td>Medical claim — ₹1,800</td>
<td>Apr 30, 2026</td>
<td>
<button class="btn-sm btn-approve">Approve</button>
<button class="btn-sm btn-reject">Reject</button>
</td>
</tr>
<tr>
<td>
<div class="emp-name">Deepak Joshi</div>
<div class="emp-id">EMP-00064 · Operations</div>
</td>
<td><span class="badge badge-indigo">Earned Leave</span></td>
<td>May 1216 (5 days)</td>
<td>Apr 28, 2026</td>
<td>
<button class="btn-sm btn-approve">Approve</button>
<button class="btn-sm btn-reject">Reject</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- PAYROLL MINI CARD -->
<div>
<div class="section-title">Payroll Status</div>
<div class="payroll-card">
<div class="payroll-month">May 2026</div>
<div class="payroll-status">
<div class="status-dot" style="background:#F59E0B;"></div>
<span style="font-size:13px;font-weight:600;color:#D97706;">Not Generated</span>
</div>
<div class="payroll-stats">
<div class="payroll-stat">
<span class="payroll-stat-label">Eligible Employees</span>
<span class="payroll-stat-val">247</span>
</div>
<div class="payroll-stat">
<span class="payroll-stat-label">Processing Period</span>
<span class="payroll-stat-val">May 131, 2026</span>
</div>
<div class="payroll-stat">
<span class="payroll-stat-label">Pay Date</span>
<span class="payroll-stat-val">May 31, 2026</span>
</div>
<div class="payroll-stat">
<span class="payroll-stat-label">Estimated Total</span>
<span class="payroll-stat-val">~₹1,24,35,000</span>
</div>
</div>
<div style="height:1px;background:#F1F5F9;margin-bottom:16px;"></div>
<button class="btn-primary">Generate Payroll</button>
<div style="margin-top:8px;text-align:center;font-size:11px;color:#94A3B8;">Attendance data locks on May 28</div>
</div>
<div style="margin-top:20px;">
<div class="section-title">Dept. Headcount</div>
<div class="card" style="padding:16px 20px;">
<div style="display:flex;flex-direction:column;gap:10px;">
<div style="display:flex;justify-content:space-between;align-items:center;">
<span style="font-size:13px;color:#374151;">Engineering</span>
<span style="font-size:13px;font-weight:600;color:#0F172A;">89</span>
</div>
<div style="height:4px;background:#F1F5F9;border-radius:999px;"><div style="width:36%;height:100%;background:#4F46E5;border-radius:999px;"></div></div>
<div style="display:flex;justify-content:space-between;align-items:center;">
<span style="font-size:13px;color:#374151;">Sales</span>
<span style="font-size:13px;font-weight:600;color:#0F172A;">62</span>
</div>
<div style="height:4px;background:#F1F5F9;border-radius:999px;"><div style="width:25%;height:100%;background:#10B981;border-radius:999px;"></div></div>
<div style="display:flex;justify-content:space-between;align-items:center;">
<span style="font-size:13px;color:#374151;">Finance</span>
<span style="font-size:13px;font-weight:600;color:#0F172A;">38</span>
</div>
<div style="height:4px;background:#F1F5F9;border-radius:999px;"><div style="width:15%;height:100%;background:#F59E0B;border-radius:999px;"></div></div>
<div style="display:flex;justify-content:space-between;align-items:center;">
<span style="font-size:13px;color:#374151;">Operations</span>
<span style="font-size:13px;font-weight:600;color:#0F172A;">41</span>
</div>
<div style="height:4px;background:#F1F5F9;border-radius:999px;"><div style="width:17%;height:100%;background:#3B82F6;border-radius:999px;"></div></div>
<div style="display:flex;justify-content:space-between;align-items:center;">
<span style="font-size:13px;color:#374151;">HR</span>
<span style="font-size:13px;font-weight:600;color:#0F172A;">17</span>
</div>
<div style="height:4px;background:#F1F5F9;border-radius:999px;"><div style="width:7%;height:100%;background:#8B5CF6;border-radius:999px;"></div></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>