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

337 lines
21 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>My 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 { 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; }
.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: #10B981; 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; }
.topnav-name { font-size: 14px; font-weight: 500; color: #374151; }
.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: #10B981; color: #FFF; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600; cursor: pointer; }
.content { padding: 28px; }
/* WELCOME */
.welcome { background: linear-gradient(135deg, #10B981 0%, #059669 100%); border-radius: 12px; padding: 24px 28px; color: #FFF; margin-bottom: 20px; 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); }
.checkin-btn { padding: 10px 22px; 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: 600; cursor: pointer; display: flex; align-items: center; gap: 8px; }
.checkin-btn svg { width: 16px; height: 16px; }
/* QUICK ACTIONS */
.quick-actions { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 24px; }
.quick-action { background: #FFFFFF; border-radius: 10px; border: 1px solid #E5E7EB; box-shadow: 0 1px 3px rgba(0,0,0,0.06); padding: 16px 20px; cursor: pointer; transition: all 0.15s; text-align: center; text-decoration: none; }
.quick-action:hover { box-shadow: 0 4px 16px rgba(0,0,0,0.1); transform: translateY(-2px); border-color: #C7D2FE; }
.qa-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; margin: 0 auto 10px; }
.qa-icon svg { width: 20px; height: 20px; }
.qa-label { font-size: 13px; font-weight: 500; color: #374151; }
/* TWO COL */
.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: 14px 18px; border-bottom: 1px solid #F3F4F6; display: flex; align-items: center; justify-content: space-between; }
.card-title { font-size: 14px; font-weight: 600; color: #111827; }
.card-action { font-size: 12px; color: #4F46E5; cursor: pointer; font-weight: 500; text-decoration: none; }
/* LEAVE BALANCE */
.lb-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 14px; }
.lb-item { background: #F9FAFB; border-radius: 8px; padding: 12px; text-align: center; }
.lb-val { font-size: 22px; font-weight: 700; color: #111827; }
.lb-type { font-size: 11px; color: #9CA3AF; margin-top: 2px; }
.lb-sub { font-size: 11px; margin-top: 6px; }
/* MINI TABLE */
.mini-table { width: 100%; border-collapse: collapse; }
.mini-table th { padding: 8px 16px; font-size: 11px; font-weight: 600; color: #9CA3AF; text-align: left; text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1px solid #F3F4F6; }
.mini-table td { padding: 10px 16px; font-size: 13px; color: #374151; border-bottom: 1px solid #F9FAFB; }
.mini-table tr:last-child td { border-bottom: none; }
.badge { padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 600; }
.badge-green { background: #ECFDF5; color: #059669; }
.badge-yellow { background: #FFFBEB; color: #D97706; }
.badge-red { background: #FEF2F2; color: #DC2626; }
.badge-blue { background: #EFF6FF; color: #3B82F6; }
/* ATTENDANCE MINI CALENDAR */
.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; padding: 14px; }
.cal-day-label { font-size: 10px; font-weight: 600; color: #9CA3AF; text-align: center; padding: 4px; text-transform: uppercase; }
.cal-day { height: 28px; display: flex; align-items: center; justify-content: center; border-radius: 5px; font-size: 12px; font-weight: 500; }
.cal-day.empty { }
.cal-day.present { background: #ECFDF5; color: #059669; }
.cal-day.leave { background: #EFF6FF; color: #3B82F6; }
.cal-day.absent { background: #FEF2F2; color: #DC2626; }
.cal-day.today { background: #4F46E5; color: #FFF; font-weight: 700; }
.cal-day.future { color: #D1D5DB; }
/* PAYSLIP CARD */
.payslip-card { padding: 16px 18px; }
.payslip-month { font-size: 13px; color: #9CA3AF; margin-bottom: 4px; }
.payslip-amount { font-size: 28px; font-weight: 700; color: #111827; margin-bottom: 4px; }
.payslip-net { font-size: 12px; color: #9CA3AF; margin-bottom: 14px; }
.payslip-breakdown { display: flex; gap: 16px; margin-bottom: 16px; }
.payslip-item {}
.payslip-item-label { font-size: 11px; color: #9CA3AF; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; }
.payslip-item-val { font-size: 14px; font-weight: 600; color: #374151; margin-top: 2px; }
.btn-download { width: 100%; padding: 9px; background: #EEF2FF; color: #4F46E5; border: 1.5px solid #C7D2FE; border-radius: 6px; font-size: 13px; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px; transition: all 0.15s; }
.btn-download:hover { background: #4F46E5; color: #FFF; }
/* ANNOUNCEMENTS */
.announce-card { background: #FFFFFF; border-radius: 10px; border: 1px solid #E5E7EB; box-shadow: 0 1px 3px rgba(0,0,0,0.06); overflow: hidden; }
.announce-item { padding: 14px 18px; border-bottom: 1px solid #F9FAFB; }
.announce-item:last-child { border-bottom: none; }
.announce-badge { display: inline-block; background: #EEF2FF; color: #4F46E5; font-size: 10px; font-weight: 600; padding: 2px 7px; border-radius: 3px; text-transform: uppercase; margin-bottom: 6px; }
.announce-title { font-size: 13px; font-weight: 600; color: #111827; margin-bottom: 3px; }
.announce-body { font-size: 12px; color: #6B7280; line-height: 1.5; }
.announce-time { font-size: 11px; color: #9CA3AF; margin-top: 6px; }
</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="18-employee-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>My Dashboard</a>
<a href="19-my-leave.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"/><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>My Leave</a>
<a href="#" 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>My Attendance</a>
<a href="#" 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>My Payslips</a>
<a href="#" 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="06-employee-profile.html" class="nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>My Profile</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>
</nav>
<div class="sidebar-footer">
<div class="user-row">
<div class="user-avatar">JD</div>
<div><div class="user-name">John Davis</div><div class="user-role">Software Engineer</div></div>
</div>
<button class="logout-btn">Sign Out</button>
</div>
</aside>
<div class="main-wrapper">
<header class="topnav">
<span class="topnav-name">Employee Portal</span>
<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">2</span></div>
<div class="topnav-avatar">JD</div>
</div>
</header>
<main class="content">
<!-- WELCOME -->
<div class="welcome">
<div>
<div class="welcome-title">Good morning, John! Ready for the day?</div>
<div class="welcome-sub">Friday, May 9, 2026 &nbsp;·&nbsp; You haven't checked in yet today</div>
</div>
<button class="checkin-btn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="20 6 9 17 4 12"/></svg>
Check In Now
</button>
</div>
<!-- QUICK ACTIONS -->
<div class="quick-actions">
<a href="19-my-leave.html" class="quick-action">
<div class="qa-icon" style="background:#EEF2FF;">
<svg viewBox="0 0 24 24" fill="none" stroke="#4F46E5" 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 class="qa-label">Request Leave</div>
</a>
<div class="quick-action">
<div class="qa-icon" style="background:#ECFDF5;">
<svg viewBox="0 0 24 24" fill="none" stroke="#10B981" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
</div>
<div class="qa-label">Check In</div>
</div>
<div class="quick-action">
<div class="qa-icon" style="background:#FFFBEB;">
<svg viewBox="0 0 24 24" fill="none" stroke="#F59E0B" stroke-width="2"><rect x="2" y="5" width="20" height="14" rx="2"/><line x1="2" y1="10" x2="22" y2="10"/></svg>
</div>
<div class="qa-label">View Payslips</div>
</div>
<a href="06-employee-profile.html" class="quick-action">
<div class="qa-icon" style="background:#F5F3FF;">
<svg viewBox="0 0 24 24" fill="none" stroke="#7C3AED" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
</div>
<div class="qa-label">My Profile</div>
</a>
</div>
<!-- TWO COL -->
<div class="two-col">
<!-- LEFT -->
<div>
<!-- LEAVE BALANCE -->
<div class="card" style="margin-bottom:16px;">
<div class="card-header-row">
<span class="card-title">Leave Balance</span>
<a href="19-my-leave.html" class="card-action">View all</a>
</div>
<div class="lb-grid">
<div class="lb-item">
<div class="lb-val" style="color:#4F46E5;">14</div>
<div class="lb-type">Annual</div>
<div class="lb-sub" style="color:#9CA3AF;">of 20 days</div>
</div>
<div class="lb-item">
<div class="lb-val" style="color:#F59E0B;">8</div>
<div class="lb-type">Sick</div>
<div class="lb-sub" style="color:#9CA3AF;">of 10 days</div>
</div>
<div class="lb-item">
<div class="lb-val" style="color:#10B981;">3</div>
<div class="lb-type">Casual</div>
<div class="lb-sub" style="color:#9CA3AF;">of 5 days</div>
</div>
</div>
</div>
<!-- RECENT LEAVE REQUESTS -->
<div class="card">
<div class="card-header-row">
<span class="card-title">My Leave Requests</span>
<a href="19-my-leave.html" class="card-action">View all</a>
</div>
<table class="mini-table">
<thead><tr><th>Type</th><th>Dates</th><th>Status</th></tr></thead>
<tbody>
<tr>
<td>Annual</td>
<td style="font-size:12px;">Apr 711</td>
<td><span class="badge badge-green">Approved</span></td>
</tr>
<tr>
<td>Sick</td>
<td style="font-size:12px;">Mar 22</td>
<td><span class="badge badge-green">Approved</span></td>
</tr>
<tr>
<td>Annual</td>
<td style="font-size:12px;">May 2628</td>
<td><span class="badge badge-yellow">Pending</span></td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- RIGHT -->
<div>
<!-- ATTENDANCE MINI CALENDAR -->
<div class="card" style="margin-bottom:16px;">
<div class="card-header-row">
<span class="card-title">May 2026 Attendance</span>
<span class="card-action">Full view</span>
</div>
<div class="cal-grid">
<div class="cal-day-label">S</div><div class="cal-day-label">M</div><div class="cal-day-label">T</div><div class="cal-day-label">W</div><div class="cal-day-label">T</div><div class="cal-day-label">F</div><div class="cal-day-label">S</div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day present">1</div>
<div class="cal-day future">2</div>
<div class="cal-day future">3</div>
<div class="cal-day present">4</div>
<div class="cal-day present">5</div>
<div class="cal-day present">6</div>
<div class="cal-day present">7</div>
<div class="cal-day present">8</div>
<div class="cal-day today">9</div>
<div class="cal-day future">10</div>
<div class="cal-day future">11</div>
<div class="cal-day future">12</div>
<div class="cal-day future">13</div>
<div class="cal-day future">14</div>
<div class="cal-day future">15</div>
<div class="cal-day future">16</div>
</div>
<div style="display:flex;gap:12px;padding:0 14px 12px;font-size:11px;color:#9CA3AF;">
<span style="display:flex;align-items:center;gap:4px;"><span style="width:8px;height:8px;border-radius:2px;background:#ECFDF5;display:inline-block;"></span>Present</span>
<span style="display:flex;align-items:center;gap:4px;"><span style="width:8px;height:8px;border-radius:2px;background:#EFF6FF;display:inline-block;"></span>Leave</span>
<span style="display:flex;align-items:center;gap:4px;"><span style="width:8px;height:8px;border-radius:2px;background:#4F46E5;display:inline-block;"></span>Today</span>
</div>
</div>
<!-- LATEST PAYSLIP -->
<div class="card">
<div class="card-header-row">
<span class="card-title">Latest Payslip</span>
</div>
<div class="payslip-card">
<div class="payslip-month">May 2026</div>
<div class="payslip-amount">$4,200.00</div>
<div class="payslip-net">Net pay after deductions</div>
<div class="payslip-breakdown">
<div class="payslip-item">
<div class="payslip-item-label">Gross</div>
<div class="payslip-item-val">$5,000</div>
</div>
<div class="payslip-item">
<div class="payslip-item-label">Tax</div>
<div class="payslip-item-val">-$620</div>
</div>
<div class="payslip-item">
<div class="payslip-item-label">Benefits</div>
<div class="payslip-item-val">-$180</div>
</div>
</div>
<button class="btn-download">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
Download PDF
</button>
</div>
</div>
</div>
</div>
<!-- ANNOUNCEMENTS -->
<div class="card-header-row" style="margin-bottom:12px;padding:0;">
<span style="font-size:16px;font-weight:600;color:#111827;">Announcements</span>
</div>
<div class="announce-card">
<div class="announce-item">
<div class="announce-badge">Company</div>
<div class="announce-title">Q2 Performance Reviews Starting May 15</div>
<div class="announce-body">Self-assessments open May 10. Please complete your self-review by May 18 and peer reviews by May 20.</div>
<div class="announce-time">2 days ago</div>
</div>
<div class="announce-item">
<div class="announce-badge">Policy</div>
<div class="announce-title">Updated Remote Work Policy Effective June 1</div>
<div class="announce-body">Employees may work remotely up to 3 days per week with manager approval. Full details in the HR handbook.</div>
<div class="announce-time">May 7, 2026</div>
</div>
<div class="announce-item">
<div class="announce-badge">Benefits</div>
<div class="announce-title">Open Enrollment for Health Benefits — Closes May 31</div>
<div class="announce-body">Annual open enrollment is now open. Review your options and make changes in the benefits portal before the deadline.</div>
<div class="announce-time">May 1, 2026</div>
</div>
</div>
</main>
</div>
</body>
</html>