Files
hr-portal-v5-designs/designs/04-admin-dashboard.html
T
2026-05-09 19:35:10 +00:00

654 lines
29 KiB
HTML
Raw 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>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 &nbsp;·&nbsp; 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 &nbsp;·&nbsp; 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 &nbsp;·&nbsp; 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 &nbsp;·&nbsp; 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 &nbsp;·&nbsp; 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 &nbsp;·&nbsp; May 7, 2026</div>
</div>
</div>
</div>
</main>
</div>
</body>
</html>