654 lines
29 KiB
HTML
654 lines
29 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Dashboard — 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 */
|
||
.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; flex-shrink: 0;
|
||
}
|
||
.logo-icon svg { width: 16px; height: 16px; }
|
||
.sidebar-nav { flex: 1; padding: 12px 0; overflow-y: auto; }
|
||
.nav-section-label {
|
||
padding: 8px 16px 4px;
|
||
font-size: 11px; font-weight: 600; color: #9CA3AF;
|
||
text-transform: uppercase; letter-spacing: 0.6px;
|
||
}
|
||
.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;
|
||
transition: all 0.15s;
|
||
}
|
||
.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: #EF4444; color: #FFF;
|
||
font-size: 11px; font-weight: 600;
|
||
padding: 1px 7px; border-radius: 10px;
|
||
}
|
||
.nav-badge.yellow { background: #F59E0B; }
|
||
.sidebar-footer {
|
||
padding: 16px;
|
||
border-top: 1px solid #F3F4F6;
|
||
}
|
||
.user-row {
|
||
display: flex; align-items: center; gap: 10px;
|
||
padding: 8px; border-radius: 8px;
|
||
cursor: pointer; transition: background 0.15s;
|
||
}
|
||
.user-row:hover { background: #F9FAFB; }
|
||
.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; flex-shrink: 0;
|
||
}
|
||
.user-info { flex: 1; min-width: 0; }
|
||
.user-name { font-size: 13px; font-weight: 600; color: #111827; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
||
.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; font-weight: 500;
|
||
cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px;
|
||
transition: all 0.15s;
|
||
}
|
||
.logout-btn:hover { border-color: #EF4444; color: #EF4444; }
|
||
|
||
/* MAIN */
|
||
.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;
|
||
}
|
||
.search-bar {
|
||
flex: 1; max-width: 360px;
|
||
display: flex; align-items: center; gap: 8px;
|
||
background: #F9FAFB; border: 1.5px solid #E5E7EB; border-radius: 8px;
|
||
padding: 8px 14px;
|
||
}
|
||
.search-bar svg { width: 16px; height: 16px; color: #9CA3AF; flex-shrink: 0; }
|
||
.search-bar input {
|
||
border: none; background: transparent; font-size: 14px; color: #111827;
|
||
outline: none; width: 100%;
|
||
}
|
||
.search-bar input::placeholder { color: #9CA3AF; }
|
||
.topnav-actions { display: flex; align-items: center; gap: 8px; margin-left: auto; }
|
||
.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; transition: all 0.15s;
|
||
}
|
||
.icon-btn:hover { background: #F9FAFB; border-color: #D1D5DB; }
|
||
.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; }
|
||
|
||
/* WELCOME BANNER */
|
||
.welcome-banner {
|
||
background: linear-gradient(135deg, #4F46E5 0%, #7C3AED 100%);
|
||
border-radius: 12px; padding: 24px 28px;
|
||
margin-bottom: 24px; color: #FFFFFF;
|
||
display: flex; align-items: center; justify-content: space-between;
|
||
}
|
||
.welcome-title { font-size: 20px; font-weight: 700; margin-bottom: 4px; }
|
||
.welcome-sub { font-size: 14px; color: rgba(255,255,255,0.8); }
|
||
.welcome-right { text-align: right; }
|
||
.welcome-date { font-size: 13px; color: rgba(255,255,255,0.7); margin-bottom: 4px; }
|
||
.welcome-btn {
|
||
padding: 8px 16px; background: rgba(255,255,255,0.2); border: 1px solid rgba(255,255,255,0.3);
|
||
border-radius: 6px; color: #FFF; font-size: 13px; font-weight: 500; cursor: pointer;
|
||
transition: all 0.15s;
|
||
}
|
||
.welcome-btn:hover { background: rgba(255,255,255,0.3); }
|
||
|
||
/* 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);
|
||
transition: all 0.2s;
|
||
}
|
||
.stat-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
|
||
.stat-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
|
||
.stat-label { font-size: 13px; color: #6B7280; font-weight: 500; }
|
||
.stat-icon {
|
||
width: 36px; height: 36px; border-radius: 8px;
|
||
display: flex; align-items: center; justify-content: center;
|
||
}
|
||
.stat-icon svg { width: 18px; height: 18px; }
|
||
.stat-value { font-size: 28px; font-weight: 700; color: #111827; margin-bottom: 4px; }
|
||
.stat-change { font-size: 12px; color: #6B7280; display: flex; align-items: center; gap: 4px; }
|
||
.stat-change.up { color: #10B981; }
|
||
.stat-change.down { color: #EF4444; }
|
||
|
||
/* TWO COL GRID */
|
||
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 24px; }
|
||
.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; text-decoration: none; }
|
||
.card-action:hover { text-decoration: underline; }
|
||
|
||
/* LEAVE REQUESTS */
|
||
.leave-item {
|
||
padding: 14px 20px;
|
||
border-bottom: 1px solid #F9FAFB;
|
||
display: flex; align-items: center; gap: 12px;
|
||
transition: background 0.1s;
|
||
}
|
||
.leave-item:hover { background: #FAFAFA; }
|
||
.leave-item:last-child { border-bottom: none; }
|
||
.emp-avatar {
|
||
width: 36px; height: 36px; border-radius: 50%;
|
||
display: flex; align-items: center; justify-content: center;
|
||
font-size: 13px; font-weight: 600; color: #FFF; flex-shrink: 0;
|
||
}
|
||
.leave-info { flex: 1; }
|
||
.leave-emp-name { font-size: 14px; font-weight: 500; color: #111827; }
|
||
.leave-meta { font-size: 12px; color: #9CA3AF; margin-top: 1px; }
|
||
.badge {
|
||
padding: 2px 8px; border-radius: 4px;
|
||
font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px;
|
||
}
|
||
.badge-blue { background: #EFF6FF; color: #3B82F6; }
|
||
.badge-green { background: #ECFDF5; color: #10B981; }
|
||
.badge-yellow { background: #FFFBEB; color: #F59E0B; }
|
||
.badge-red { background: #FEF2F2; color: #EF4444; }
|
||
.badge-purple { background: #F5F3FF; color: #7C3AED; }
|
||
.badge-indigo { background: #EEF2FF; color: #4F46E5; }
|
||
.badge-gray { background: #F3F4F6; color: #6B7280; }
|
||
.leave-actions { display: flex; gap: 6px; }
|
||
.btn-approve {
|
||
padding: 5px 12px; background: #ECFDF5; color: #10B981;
|
||
border: 1px solid #BBF7D0; border-radius: 5px;
|
||
font-size: 12px; font-weight: 600; cursor: pointer; transition: all 0.15s;
|
||
}
|
||
.btn-approve:hover { background: #10B981; color: #FFF; }
|
||
.btn-reject {
|
||
padding: 5px 12px; background: #FEF2F2; color: #EF4444;
|
||
border: 1px solid #FECACA; border-radius: 5px;
|
||
font-size: 12px; font-weight: 600; cursor: pointer; transition: all 0.15s;
|
||
}
|
||
.btn-reject:hover { background: #EF4444; color: #FFF; }
|
||
|
||
/* ACTIVITY */
|
||
.activity-item {
|
||
padding: 12px 20px;
|
||
display: flex; align-items: flex-start; gap: 12px;
|
||
border-bottom: 1px solid #F9FAFB;
|
||
transition: background 0.1s;
|
||
}
|
||
.activity-item:hover { background: #FAFAFA; }
|
||
.activity-item:last-child { border-bottom: none; }
|
||
.activity-icon {
|
||
width: 32px; height: 32px; border-radius: 8px;
|
||
display: flex; align-items: center; justify-content: center;
|
||
flex-shrink: 0;
|
||
}
|
||
.activity-content { flex: 1; }
|
||
.activity-text { font-size: 13px; color: #374151; line-height: 1.5; }
|
||
.activity-text strong { color: #111827; }
|
||
.activity-time { font-size: 12px; color: #9CA3AF; margin-top: 2px; }
|
||
|
||
/* BOTTOM ROW */
|
||
.bottom-row { display: grid; grid-template-columns: 3fr 2fr; gap: 20px; }
|
||
.dept-bar-item { padding: 10px 20px; display: flex; align-items: center; gap: 12px; }
|
||
.dept-bar-item:not(:last-child) { border-bottom: 1px solid #F9FAFB; }
|
||
.dept-name { font-size: 13px; font-weight: 500; color: #374151; width: 100px; flex-shrink: 0; }
|
||
.dept-bar-track { flex: 1; height: 8px; background: #F3F4F6; border-radius: 4px; overflow: hidden; }
|
||
.dept-bar-fill { height: 100%; border-radius: 4px; }
|
||
.dept-count { font-size: 13px; color: #6B7280; width: 40px; text-align: right; flex-shrink: 0; }
|
||
|
||
.announce-item { padding: 14px 20px; border-bottom: 1px solid #F9FAFB; }
|
||
.announce-item:last-child { border-bottom: none; }
|
||
.announce-title { font-size: 14px; font-weight: 600; color: #111827; margin-bottom: 3px; }
|
||
.announce-body { font-size: 13px; color: #6B7280; line-height: 1.5; }
|
||
.announce-meta { font-size: 11px; color: #9CA3AF; margin-top: 6px; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- SIDEBAR -->
|
||
<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 active">
|
||
<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 yellow">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">
|
||
<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"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></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 class="user-info">
|
||
<div class="user-name">Sarah Chen</div>
|
||
<div class="user-role">HR Administrator</div>
|
||
</div>
|
||
</div>
|
||
<button class="logout-btn">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||
<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/>
|
||
<polyline points="16 17 21 12 16 7"/>
|
||
<line x1="21" y1="12" x2="9" y2="12"/>
|
||
</svg>
|
||
Sign Out
|
||
</button>
|
||
</div>
|
||
</aside>
|
||
|
||
<!-- MAIN -->
|
||
<div class="main-wrapper">
|
||
<!-- TOPNAV -->
|
||
<header class="topnav">
|
||
<div class="search-bar">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||
<circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
|
||
</svg>
|
||
<input type="text" placeholder="Search employees, leaves, reports...">
|
||
</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="icon-btn">
|
||
<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>
|
||
</div>
|
||
<div class="topnav-avatar">SC</div>
|
||
</div>
|
||
</header>
|
||
|
||
<!-- CONTENT -->
|
||
<main class="content">
|
||
|
||
<!-- WELCOME BANNER -->
|
||
<div class="welcome-banner">
|
||
<div>
|
||
<div class="welcome-title">Good morning, Sarah! Here's what needs your attention.</div>
|
||
<div class="welcome-sub">You have 7 pending leave requests and 2 new job applications to review.</div>
|
||
</div>
|
||
<div class="welcome-right">
|
||
<div class="welcome-date">Friday, May 9, 2026</div>
|
||
<button class="welcome-btn">View Action Items</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- STATS ROW -->
|
||
<div class="stats-row">
|
||
<div class="stat-card">
|
||
<div class="stat-header">
|
||
<span class="stat-label">Total Employees</span>
|
||
<div class="stat-icon" style="background:#EEF2FF;">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="#4F46E5" 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>
|
||
</div>
|
||
<div class="stat-value">248</div>
|
||
<div class="stat-change up">
|
||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="18 15 12 9 6 15"/></svg>
|
||
+5 this month
|
||
</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-header">
|
||
<span class="stat-label">On Leave Today</span>
|
||
<div class="stat-icon" style="background:#FFF7ED;">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2">
|
||
<rect x="3" y="4" width="18" height="18" rx="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>
|
||
</div>
|
||
</div>
|
||
<div class="stat-value">12</div>
|
||
<div class="stat-change">4.8% of workforce</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-header">
|
||
<span class="stat-label">Pending Approvals</span>
|
||
<div class="stat-icon" style="background:#FEF2F2;">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2">
|
||
<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/>
|
||
<line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/>
|
||
</svg>
|
||
</div>
|
||
</div>
|
||
<div class="stat-value">7</div>
|
||
<div class="stat-change down">
|
||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"/></svg>
|
||
Needs action today
|
||
</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div class="stat-header">
|
||
<span class="stat-label">May Payroll</span>
|
||
<div class="stat-icon" style="background:#ECFDF5;">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="#10B981" stroke-width="2">
|
||
<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="stat-value">$284.5K</div>
|
||
<div class="stat-change up">
|
||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="18 15 12 9 6 15"/></svg>
|
||
+2.1% vs last month
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- TWO COLUMN -->
|
||
<div class="two-col">
|
||
<!-- PENDING LEAVE REQUESTS -->
|
||
<div class="card">
|
||
<div class="card-header-row">
|
||
<span class="card-title">Pending Leave Requests</span>
|
||
<a href="09-leave-requests.html" class="card-action">View all (7)</a>
|
||
</div>
|
||
<div class="leave-item">
|
||
<div class="emp-avatar" style="background:#4F46E5;">MR</div>
|
||
<div class="leave-info">
|
||
<div class="leave-emp-name">Michael Rodriguez</div>
|
||
<div class="leave-meta">May 12 – May 15 · 4 days</div>
|
||
</div>
|
||
<span class="badge badge-blue">Annual</span>
|
||
<div class="leave-actions">
|
||
<button class="btn-approve">Approve</button>
|
||
<button class="btn-reject">Reject</button>
|
||
</div>
|
||
</div>
|
||
<div class="leave-item">
|
||
<div class="emp-avatar" style="background:#10B981;">PP</div>
|
||
<div class="leave-info">
|
||
<div class="leave-emp-name">Priya Patel</div>
|
||
<div class="leave-meta">May 13 – May 13 · 1 day</div>
|
||
</div>
|
||
<span class="badge badge-yellow">Sick</span>
|
||
<div class="leave-actions">
|
||
<button class="btn-approve">Approve</button>
|
||
<button class="btn-reject">Reject</button>
|
||
</div>
|
||
</div>
|
||
<div class="leave-item">
|
||
<div class="emp-avatar" style="background:#F59E0B;">JK</div>
|
||
<div class="leave-info">
|
||
<div class="leave-emp-name">James Kim</div>
|
||
<div class="leave-meta">May 19 – May 23 · 5 days</div>
|
||
</div>
|
||
<span class="badge badge-blue">Annual</span>
|
||
<div class="leave-actions">
|
||
<button class="btn-approve">Approve</button>
|
||
<button class="btn-reject">Reject</button>
|
||
</div>
|
||
</div>
|
||
<div class="leave-item">
|
||
<div class="emp-avatar" style="background:#EF4444;">AL</div>
|
||
<div class="leave-info">
|
||
<div class="leave-emp-name">Aisha Larsson</div>
|
||
<div class="leave-meta">May 26 – May 28 · 3 days</div>
|
||
</div>
|
||
<span class="badge badge-purple">Casual</span>
|
||
<div class="leave-actions">
|
||
<button class="btn-approve">Approve</button>
|
||
<button class="btn-reject">Reject</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- RECENT ACTIVITY -->
|
||
<div class="card">
|
||
<div class="card-header-row">
|
||
<span class="card-title">Recent Activity</span>
|
||
<a href="#" class="card-action">View log</a>
|
||
</div>
|
||
<div class="activity-item">
|
||
<div class="activity-icon" style="background:#EEF2FF;">
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#4F46E5" stroke-width="2">
|
||
<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="8.5" cy="7" r="4"/><line x1="20" y1="8" x2="20" y2="14"/><line x1="23" y1="11" x2="17" y2="11"/>
|
||
</svg>
|
||
</div>
|
||
<div class="activity-content">
|
||
<div class="activity-text"><strong>David Thompson</strong> was added to Engineering team</div>
|
||
<div class="activity-time">2 hours ago</div>
|
||
</div>
|
||
</div>
|
||
<div class="activity-item">
|
||
<div class="activity-icon" style="background:#ECFDF5;">
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#10B981" stroke-width="2">
|
||
<polyline points="20 6 9 17 4 12"/>
|
||
</svg>
|
||
</div>
|
||
<div class="activity-content">
|
||
<div class="activity-text">Leave request for <strong>Ravi Shankar</strong> was approved</div>
|
||
<div class="activity-time">3 hours ago</div>
|
||
</div>
|
||
</div>
|
||
<div class="activity-item">
|
||
<div class="activity-icon" style="background:#FFF7ED;">
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2">
|
||
<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 class="activity-content">
|
||
<div class="activity-text">April payroll of <strong>$278,400</strong> was processed</div>
|
||
<div class="activity-time">Yesterday, 4:30 PM</div>
|
||
</div>
|
||
</div>
|
||
<div class="activity-item">
|
||
<div class="activity-icon" style="background:#F5F3FF;">
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#7C3AED" stroke-width="2">
|
||
<rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/>
|
||
</svg>
|
||
</div>
|
||
<div class="activity-content">
|
||
<div class="activity-text">New job posted: <strong>Senior Frontend Engineer</strong></div>
|
||
<div class="activity-time">Yesterday, 2:00 PM</div>
|
||
</div>
|
||
</div>
|
||
<div class="activity-item">
|
||
<div class="activity-icon" style="background:#FEF2F2;">
|
||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#EF4444" stroke-width="2">
|
||
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
||
</svg>
|
||
</div>
|
||
<div class="activity-content">
|
||
<div class="activity-text"><strong>Company announcement</strong> sent to all employees</div>
|
||
<div class="activity-time">May 8, 10:00 AM</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- BOTTOM ROW -->
|
||
<div class="bottom-row">
|
||
<!-- DEPARTMENT OVERVIEW -->
|
||
<div class="card">
|
||
<div class="card-header-row">
|
||
<span class="card-title">Department Overview</span>
|
||
<a href="08-department-management.html" class="card-action">Manage</a>
|
||
</div>
|
||
<div class="dept-bar-item">
|
||
<span class="dept-name">Engineering</span>
|
||
<div class="dept-bar-track">
|
||
<div class="dept-bar-fill" style="width:62%;background:#4F46E5;"></div>
|
||
</div>
|
||
<span class="dept-count">45</span>
|
||
</div>
|
||
<div class="dept-bar-item">
|
||
<span class="dept-name">Operations</span>
|
||
<div class="dept-bar-track">
|
||
<div class="dept-bar-fill" style="width:43%;background:#3B82F6;"></div>
|
||
</div>
|
||
<span class="dept-count">31</span>
|
||
</div>
|
||
<div class="dept-bar-item">
|
||
<span class="dept-name">Sales</span>
|
||
<div class="dept-bar-track">
|
||
<div class="dept-bar-fill" style="width:33%;background:#10B981;"></div>
|
||
</div>
|
||
<span class="dept-count">24</span>
|
||
</div>
|
||
<div class="dept-bar-item">
|
||
<span class="dept-name">Marketing</span>
|
||
<div class="dept-bar-track">
|
||
<div class="dept-bar-fill" style="width:25%;background:#F59E0B;"></div>
|
||
</div>
|
||
<span class="dept-count">18</span>
|
||
</div>
|
||
<div class="dept-bar-item">
|
||
<span class="dept-name">Finance</span>
|
||
<div class="dept-bar-track">
|
||
<div class="dept-bar-fill" style="width:17%;background:#7C3AED;"></div>
|
||
</div>
|
||
<span class="dept-count">12</span>
|
||
</div>
|
||
<div class="dept-bar-item">
|
||
<span class="dept-name">HR</span>
|
||
<div class="dept-bar-track">
|
||
<div class="dept-bar-fill" style="width:11%;background:#EF4444;"></div>
|
||
</div>
|
||
<span class="dept-count">8</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ANNOUNCEMENTS -->
|
||
<div class="card">
|
||
<div class="card-header-row">
|
||
<span class="card-title">Announcements</span>
|
||
<a href="#" class="card-action">Post new</a>
|
||
</div>
|
||
<div class="announce-item">
|
||
<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
|
||
<span class="badge badge-indigo">Company</span>
|
||
<span style="font-size:11px;color:#9CA3AF;">Pinned</span>
|
||
</div>
|
||
<div class="announce-title">Q2 Performance Reviews Starting May 15</div>
|
||
<div class="announce-body">All managers must complete peer review forms by May 20. Self-assessments open from May 10.</div>
|
||
<div class="announce-meta">Posted by Sarah Chen · 2 days ago</div>
|
||
</div>
|
||
<div class="announce-item">
|
||
<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
|
||
<span class="badge badge-green">Policy</span>
|
||
</div>
|
||
<div class="announce-title">Updated Remote Work Policy</div>
|
||
<div class="announce-body">Effective June 1, employees may work remotely up to 3 days per week with manager approval.</div>
|
||
<div class="announce-meta">Posted by HR Team · May 7, 2026</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</main>
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|