Files
hr-portal-v5-designs/designs/15-performance-reviews.html
T
2026-05-09 19:35:10 +00:00

288 lines
18 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>Performance Reviews — 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; }
.btn-primary { padding: 9px 18px; background: #4F46E5; color: #FFF; border: none; border-radius: 6px; font-size: 14px; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 6px; }
/* ACTIVE CYCLE */
.active-cycle {
background: linear-gradient(135deg, #4F46E5 0%, #6D28D9 100%);
border-radius: 12px; padding: 28px 32px;
color: #FFF; margin-bottom: 24px;
display: flex; align-items: center; justify-content: space-between;
}
.cycle-badge { display: inline-flex; align-items: center; gap: 6px; background: rgba(255,255,255,0.2); padding: 4px 12px; border-radius: 20px; font-size: 12px; font-weight: 600; margin-bottom: 10px; }
.cycle-title { font-size: 22px; font-weight: 700; margin-bottom: 6px; }
.cycle-sub { font-size: 14px; color: rgba(255,255,255,0.8); margin-bottom: 20px; }
.progress-section {}
.progress-label { display: flex; justify-content: space-between; margin-bottom: 6px; }
.progress-text { font-size: 13px; color: rgba(255,255,255,0.8); }
.progress-pct { font-size: 13px; font-weight: 700; color: #FFF; }
.progress-bar { height: 8px; background: rgba(255,255,255,0.2); border-radius: 4px; width: 280px; overflow: hidden; }
.progress-fill { height: 100%; background: #FFFFFF; border-radius: 4px; width: 68%; }
.cycle-meta { margin-top: 12px; display: flex; gap: 20px; }
.cycle-meta-item { display: flex; align-items: center; gap: 6px; font-size: 13px; color: rgba(255,255,255,0.8); }
.cycle-meta-item svg { width: 14px; height: 14px; }
.cycle-right { text-align: right; }
.btn-view-cycle { padding: 10px 20px; background: rgba(255,255,255,0.2); border: 1px solid rgba(255,255,255,0.4); border-radius: 8px; color: #FFF; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.15s; }
.btn-view-cycle:hover { background: rgba(255,255,255,0.3); }
.cycle-stats-mini { display: flex; gap: 20px; margin-top: 16px; }
.cycle-stat-mini { text-align: center; }
.cycle-stat-num { font-size: 22px; font-weight: 700; }
.cycle-stat-label { font-size: 11px; color: rgba(255,255,255,0.7); margin-top: 2px; }
/* TABLE */
.section-title { font-size: 16px; font-weight: 600; color: #111827; margin-bottom: 16px; }
.table-card { background: #FFFFFF; border-radius: 10px; border: 1px solid #E5E7EB; box-shadow: 0 1px 3px rgba(0,0,0,0.06); overflow: hidden; }
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: 16px 16px; font-size: 14px; color: #374151; vertical-align: middle; }
.cycle-name { font-size: 14px; font-weight: 600; color: #111827; }
.cycle-period { font-size: 12px; color: #9CA3AF; margin-top: 2px; }
.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; }
.progress-mini { width: 120px; height: 6px; background: #F3F4F6; border-radius: 3px; overflow: hidden; display: inline-block; margin-right: 6px; }
.progress-mini-fill { height: 100%; background: #4F46E5; border-radius: 3px; }
.progress-row { display: flex; align-items: center; }
.progress-pct-mini { font-size: 12px; font-weight: 600; color: #374151; }
.btn-action { padding: 5px 12px; border: 1px solid #E5E7EB; border-radius: 5px; background: #FFFFFF; color: #374151; font-size: 12px; font-weight: 500; cursor: pointer; margin-right: 4px; }
.btn-action:hover { border-color: #4F46E5; color: #4F46E5; }
</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"><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 active"><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>Performance Reviews</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">Performance Reviews</div>
<button class="btn-primary">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" width="16" height="16"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>
New Review Cycle
</button>
</div>
<!-- ACTIVE CYCLE -->
<div class="active-cycle">
<div>
<div class="cycle-badge">
<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>
Active Cycle
</div>
<div class="cycle-title">Q1 2026 Annual Performance Review</div>
<div class="cycle-sub">Self-assessments, peer reviews, and manager evaluations in progress</div>
<div class="progress-section">
<div class="progress-label">
<span class="progress-text">Overall completion</span>
<span class="progress-pct">68%</span>
</div>
<div class="progress-bar"><div class="progress-fill"></div></div>
</div>
<div class="cycle-meta">
<div class="cycle-meta-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"/><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>
Jan 1 Mar 31, 2026
</div>
<div class="cycle-meta-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>
Deadline: May 20, 2026
</div>
</div>
</div>
<div class="cycle-right">
<button class="btn-view-cycle">View Details</button>
<div class="cycle-stats-mini">
<div class="cycle-stat-mini">
<div class="cycle-stat-num">168</div>
<div class="cycle-stat-label">Completed</div>
</div>
<div class="cycle-stat-mini">
<div class="cycle-stat-num">80</div>
<div class="cycle-stat-label">Pending</div>
</div>
<div class="cycle-stat-mini">
<div class="cycle-stat-num">248</div>
<div class="cycle-stat-label">Total</div>
</div>
</div>
</div>
</div>
<!-- REVIEW CYCLES TABLE -->
<div class="section-title">All Review Cycles</div>
<div class="table-card">
<table>
<thead>
<tr>
<th>Cycle Name</th>
<th>Period</th>
<th>Type</th>
<th>Status</th>
<th>Completion</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="cycle-name">Q1 2026 Annual Review</div>
<div class="cycle-period">Includes self, peer, and manager review</div>
</td>
<td>Jan 1 Mar 31, 2026</td>
<td><span class="badge badge-blue">Annual</span></td>
<td><span class="badge" style="background:#EEF2FF;color:#4F46E5;">In Progress</span></td>
<td>
<div class="progress-row">
<div class="progress-mini"><div class="progress-mini-fill" style="width:68%;"></div></div>
<span class="progress-pct-mini">68%</span>
</div>
</td>
<td>
<button class="btn-action">View</button>
<button class="btn-action">Send Reminder</button>
</td>
</tr>
<tr>
<td>
<div class="cycle-name">Q4 2025 Annual Review</div>
<div class="cycle-period">Full 360-degree review cycle</div>
</td>
<td>Oct 1 Dec 31, 2025</td>
<td><span class="badge badge-blue">Annual</span></td>
<td><span class="badge badge-green">Completed</span></td>
<td>
<div class="progress-row">
<div class="progress-mini"><div class="progress-mini-fill" style="width:100%;background:#10B981;"></div></div>
<span class="progress-pct-mini">100%</span>
</div>
</td>
<td>
<button class="btn-action">View Results</button>
</td>
</tr>
<tr>
<td>
<div class="cycle-name">Mid-Year 2025 Review</div>
<div class="cycle-period">Manager review only</div>
</td>
<td>Apr 1 Jun 30, 2025</td>
<td><span class="badge badge-yellow">Mid-Year</span></td>
<td><span class="badge badge-green">Completed</span></td>
<td>
<div class="progress-row">
<div class="progress-mini"><div class="progress-mini-fill" style="width:100%;background:#10B981;"></div></div>
<span class="progress-pct-mini">100%</span>
</div>
</td>
<td>
<button class="btn-action">View Results</button>
</td>
</tr>
<tr>
<td>
<div class="cycle-name">Q2 2025 Annual Review</div>
<div class="cycle-period">Self and manager review</div>
</td>
<td>Jan 1 Mar 31, 2025</td>
<td><span class="badge badge-blue">Annual</span></td>
<td><span class="badge badge-green">Completed</span></td>
<td>
<div class="progress-row">
<div class="progress-mini"><div class="progress-mini-fill" style="width:100%;background:#10B981;"></div></div>
<span class="progress-pct-mini">100%</span>
</div>
</td>
<td>
<button class="btn-action">View Results</button>
</td>
</tr>
</tbody>
</table>
</div>
</main>
</div>
</body>
</html>