Files
hr-portal-v4-designs/06-attendance.html
T
2026-05-09 17:32:32 +00:00

388 lines
26 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>HR Portal v4 — Attendance Dashboard</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f8fafc; color: #0f172a; display: flex; min-height: 100vh; }
.sidebar { width: 240px; min-height: 100vh; background: #1e3a5f; display: flex; flex-direction: column; position: fixed; top: 0; left: 0; z-index: 100; }
.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: #2563eb; 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: 10px; color: #94a3b8; margin-top: 1px; }
.sidebar-nav { flex: 1; padding: 12px 0; overflow-y: auto; }
.nav-section-label { font-size: 10px; font-weight: 600; color: #64748b; letter-spacing: 0.8px; text-transform: uppercase; padding: 8px 20px 4px; }
.nav-item { display: flex; align-items: center; gap: 10px; padding: 9px 20px; color: #cbd5e1; font-size: 13.5px; font-weight: 500; cursor: pointer; border-left: 3px solid transparent; text-decoration: none; }
.nav-item:hover { background: rgba(255,255,255,0.07); color: #fff; }
.nav-item.active { background: rgba(37,99,235,0.25); color: #fff; border-left-color: #2563eb; }
.nav-badge { margin-left: auto; background: #2563eb; color: #fff; font-size: 10px; font-weight: 700; padding: 1px 6px; border-radius: 20px; }
.sidebar-footer { padding: 14px 16px; border-top: 1px solid rgba(255,255,255,0.08); display: flex; align-items: center; gap: 10px; }
.sidebar-avatar { width: 34px; height: 34px; border-radius: 50%; background: #2563eb; 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: #fff; }
.sidebar-user-role { font-size: 11px; color: #94a3b8; }
.main { margin-left: 240px; display: flex; flex-direction: column; flex: 1; }
.header { position: sticky; top: 0; z-index: 50; background: #fff; border-bottom: 1px solid #e2e8f0; padding: 0 28px; height: 60px; display: flex; align-items: center; gap: 16px; }
.header-title { font-size: 16px; font-weight: 700; flex: 1; }
.icon-btn { width: 36px; height: 36px; border-radius: 8px; border: 1px solid #e2e8f0; background: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; position: relative; color: #64748b; }
.notif-badge { position: absolute; top: -4px; right: -4px; width: 16px; height: 16px; background: #dc2626; border-radius: 50%; font-size: 9px; font-weight: 700; color: #fff; display: flex; align-items: center; justify-content: center; border: 2px solid #fff; }
.header-avatar { width: 34px; height: 34px; border-radius: 50%; background: #1e3a5f; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; color: #fff; cursor: pointer; }
.content { padding: 28px; flex: 1; }
.page-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
.page-title { font-size: 20px; font-weight: 700; }
.page-sub { font-size: 13px; color: #64748b; margin-top: 2px; }
/* CONTROLS */
.controls-row { display: flex; align-items: center; gap: 12px; background: #fff; border: 1px solid #e2e8f0; border-radius: 10px; padding: 14px 20px; margin-bottom: 20px; }
.date-input { display: flex; align-items: center; gap: 8px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 8px 14px; font-size: 13px; color: #374151; font-family: inherit; }
.filter-select { appearance: none; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 8px 32px 8px 12px; font-size: 13px; color: #374151; font-family: inherit; cursor: pointer; outline: none; background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2364748b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 10px center; }
/* SUMMARY CARDS */
.summary-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }
.summary-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 18px 20px; display: flex; align-items: center; gap: 14px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); }
.summary-icon { width: 44px; height: 44px; border-radius: 10px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.summary-icon.green { background: #f0fdf4; }
.summary-icon.red { background: #fef2f2; }
.summary-icon.blue { background: #eff6ff; }
.summary-icon.yellow { background: #fffbeb; }
.summary-value { font-size: 28px; font-weight: 800; letter-spacing: -0.5px; }
.summary-label { font-size: 12px; color: #64748b; font-weight: 500; margin-top: 2px; }
/* TABLE */
.table-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); overflow: hidden; margin-bottom: 24px; }
.table-header { padding: 16px 20px; border-bottom: 1px solid #f1f5f9; display: flex; align-items: center; justify-content: space-between; }
.table-title { font-size: 14px; font-weight: 700; }
table { width: 100%; border-collapse: collapse; }
th { font-size: 11px; font-weight: 600; color: #64748b; text-transform: uppercase; letter-spacing: 0.5px; padding: 10px 16px; text-align: left; background: #f8fafc; border-bottom: 1px solid #e2e8f0; white-space: nowrap; }
td { padding: 12px 16px; font-size: 13px; color: #374151; border-bottom: 1px solid #f1f5f9; vertical-align: middle; }
tr:last-child td { border-bottom: none; }
tr:hover td { background: #fafbfd; }
.emp-cell { display: flex; align-items: center; gap: 10px; }
.emp-avatar { width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; color: #fff; flex-shrink: 0; }
.emp-name { font-size: 13px; font-weight: 600; color: #0f172a; }
.emp-dept { font-size: 11px; color: #94a3b8; }
.time-text { font-size: 13px; font-weight: 500; font-variant-numeric: tabular-nums; }
.hours-text { font-size: 13px; font-weight: 600; color: #0f172a; }
.loc-btn { display: inline-flex; align-items: center; gap: 4px; color: #2563eb; font-size: 12px; font-weight: 500; cursor: pointer; }
.status-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-right: 5px; }
.status-present { color: #16a34a; }
.status-absent { color: #dc2626; }
.status-halfday { color: #d97706; }
.status-leave { color: #64748b; }
.status-pill { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 20px; font-size: 11px; font-weight: 600; white-space: nowrap; }
.pill-present { background: #f0fdf4; color: #16a34a; }
.pill-absent { background: #fef2f2; color: #dc2626; }
.pill-halfday { background: #fffbeb; color: #d97706; }
.pill-leave { background: #f1f5f9; color: #475569; }
/* CALENDAR HEATMAP */
.heatmap-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); overflow: hidden; }
.heatmap-header { padding: 16px 20px; border-bottom: 1px solid #f1f5f9; display: flex; align-items: center; justify-content: space-between; }
.heatmap-title { font-size: 14px; font-weight: 700; }
.calendar { padding: 20px; }
.cal-months { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 4px; }
.cal-day-header { font-size: 11px; font-weight: 600; color: #94a3b8; text-align: center; padding: 4px 0; }
.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.cal-cell {
aspect-ratio: 1; border-radius: 6px;
display: flex; align-items: center; justify-content: center;
font-size: 11px; font-weight: 500; cursor: pointer;
transition: transform 0.1s;
}
.cal-cell:hover { transform: scale(1.1); }
.cal-cell.empty { background: transparent; cursor: default; }
.cal-cell.h0 { background: #f1f5f9; color: #94a3b8; }
.cal-cell.h1 { background: #dcfce7; color: #166534; }
.cal-cell.h2 { background: #86efac; color: #166534; }
.cal-cell.h3 { background: #4ade80; color: #14532d; }
.cal-cell.h4 { background: #16a34a; color: #fff; }
.cal-cell.h5 { background: #15803d; color: #fff; }
.cal-cell.weekend { background: #f8fafc; color: #cbd5e1; cursor: default; }
.cal-cell.today { outline: 2px solid #2563eb; outline-offset: 1px; }
.heatmap-legend { display: flex; align-items: center; gap: 8px; padding: 0 20px 16px; font-size: 12px; color: #64748b; }
.legend-label { font-size: 11px; }
.legend-cells { display: flex; gap: 4px; }
.legend-cell { width: 16px; height: 16px; border-radius: 3px; }
</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="#fff" stroke-width="2.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="sidebar-logo-text">HR Portal v4</div><div class="sidebar-logo-sub">Admin Console</div></div>
</div>
<nav class="sidebar-nav">
<div class="nav-section-label">Main</div>
<a class="nav-item" href="02-admin-dashboard.html"><svg width="16" height="16" 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 class="nav-item" href="03-employee-list.html"><svg width="16" height="16" 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 class="nav-item" href="#"><svg width="16" height="16" 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>
<div class="nav-section-label" style="margin-top:8px;">Operations</div>
<a class="nav-item" href="04-leave-management.html"><svg width="16" height="16" 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">5</span></a>
<a class="nav-item active" href="#"><svg width="16" height="16" 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 class="nav-item" href="05-payroll.html"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" 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>Payroll</a>
<a class="nav-item" href="07-recruitment.html"><svg width="16" height="16" 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>Recruitment</a>
<a class="nav-item" href="#"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>Performance</a>
<div class="nav-section-label" style="margin-top:8px;">Analytics</div>
<a class="nav-item" href="#"><svg width="16" height="16" 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>Reports</a>
<a class="nav-item" href="#"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"/></svg>Settings</a>
</nav>
<div class="sidebar-footer">
<div class="sidebar-avatar">AK</div>
<div><div class="sidebar-user-name">Arun Kumar</div><div class="sidebar-user-role">Super Admin</div></div>
</div>
</aside>
<div class="main">
<header class="header">
<div class="header-title">Attendance</div>
<div style="display:flex;align-items:center;gap:8px">
<div class="icon-btn"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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-badge">5</span></div>
<div class="header-avatar">AK</div>
</div>
</header>
<div class="content">
<div class="page-top">
<div>
<div class="page-title">Attendance Dashboard</div>
<div class="page-sub">Real-time attendance tracking and management</div>
</div>
<div style="display:flex;gap:10px">
<button style="display:flex;align-items:center;gap:6px;background:#fff;color:#374151;border:1px solid #e2e8f0;border-radius:8px;padding:9px 16px;font-size:13px;font-weight:500;cursor:pointer;font-family:inherit">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="21 15 15 15 15 21"/><path d="M18 15V9a6 6 0 0 0-6-6H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6"/></svg>
Export
</button>
</div>
</div>
<!-- Controls -->
<div class="controls-row">
<div class="date-input">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" 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>
Friday, May 9, 2026
</div>
<select class="filter-select">
<option>All Departments</option>
<option>Engineering</option>
<option>Product</option>
<option>Sales</option>
<option>HR</option>
</select>
<select class="filter-select">
<option>All Shifts</option>
<option>Morning (9AM6PM)</option>
<option>Evening (2PM11PM)</option>
<option>Night (10PM7AM)</option>
</select>
<div style="margin-left:auto;display:flex;align-items:center;gap:6px;font-size:12px;color:#16a34a;font-weight:600">
<div style="width:8px;height:8px;border-radius:50%;background:#16a34a;animation:pulse 2s infinite"></div>
Live &mdash; Last updated 2 min ago
</div>
</div>
<!-- Summary Cards -->
<div class="summary-grid">
<div class="summary-card">
<div class="summary-icon green">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#16a34a" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
</div>
<div>
<div class="summary-value" style="color:#16a34a">198</div>
<div class="summary-label">Present Today</div>
</div>
</div>
<div class="summary-card">
<div class="summary-icon red">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#dc2626" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="15" y1="9" x2="9" y2="15"/><line x1="9" y1="9" x2="15" y2="15"/></svg>
</div>
<div>
<div class="summary-value" style="color:#dc2626">32</div>
<div class="summary-label">Absent</div>
</div>
</div>
<div class="summary-card">
<div class="summary-icon blue">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#2563eb" 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>
</div>
<div>
<div class="summary-value" style="color:#2563eb">12</div>
<div class="summary-label">On Leave</div>
</div>
</div>
<div class="summary-card">
<div class="summary-icon yellow">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#d97706" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
</div>
<div>
<div class="summary-value" style="color:#d97706">5</div>
<div class="summary-label">Half Day</div>
</div>
</div>
</div>
<!-- Attendance Table -->
<div class="table-card">
<div class="table-header">
<div class="table-title">Today's Attendance Log</div>
<div style="font-size:12px;color:#64748b">Showing 8 of 247 employees</div>
</div>
<table>
<thead>
<tr>
<th>Employee</th>
<th>Clock In</th>
<th>Clock Out</th>
<th>Hours Worked</th>
<th>GPS Location</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#7c3aed">PS</div><div><div class="emp-name">Priya Sharma</div><div class="emp-dept">Engineering</div></div></div></td>
<td><span class="time-text">09:02 AM</span></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="hours-text">7h 32m</span></td>
<td><span class="loc-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>Mumbai Office</span></td>
<td><span class="status-pill pill-present">Present</span></td>
</tr>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#0891b2">RV</div><div><div class="emp-name">Rahul Verma</div><div class="emp-dept">Product</div></div></div></td>
<td><span class="time-text">09:18 AM</span></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="hours-text">7h 16m</span></td>
<td><span class="loc-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>WFH</span></td>
<td><span class="status-pill pill-present">Present</span></td>
</tr>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#16a34a">AP</div><div><div class="emp-name">Anjali Patel</div><div class="emp-dept">HR</div></div></div></td>
<td><span class="time-text">09:45 AM</span></td>
<td><span class="time-text">01:30 PM</span></td>
<td><span class="hours-text" style="color:#d97706">3h 45m</span></td>
<td><span class="loc-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>Mumbai Office</span></td>
<td><span class="status-pill pill-halfday">Half Day</span></td>
</tr>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#d97706">VS</div><div><div class="emp-name">Vikram Singh</div><div class="emp-dept">Sales</div></div></div></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="hours-text" style="color:#94a3b8">0h 0m</span></td>
<td><span style="color:#94a3b8;font-size:12px">No data</span></td>
<td><span class="status-pill pill-leave">On Leave</span></td>
</tr>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#dc2626">MI</div><div><div class="emp-name">Meena Iyer</div><div class="emp-dept">Finance</div></div></div></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="hours-text" style="color:#94a3b8">0h 0m</span></td>
<td><span style="color:#94a3b8;font-size:12px">No data</span></td>
<td><span class="status-pill pill-leave">On Leave</span></td>
</tr>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#475569">DN</div><div><div class="emp-name">Deepak Nair</div><div class="emp-dept">Engineering</div></div></div></td>
<td><span class="time-text" style="color:#dc2626"></span></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="hours-text" style="color:#dc2626"></span></td>
<td><span style="color:#94a3b8;font-size:12px">No data</span></td>
<td><span class="status-pill pill-absent">Absent</span></td>
</tr>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#0e7490">NK</div><div><div class="emp-name">Neha Kapoor</div><div class="emp-dept">Marketing</div></div></div></td>
<td><span class="time-text">08:52 AM</span></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="hours-text">7h 42m</span></td>
<td><span class="loc-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>Bangalore Office</span></td>
<td><span class="status-pill pill-present">Present</span></td>
</tr>
<tr>
<td><div class="emp-cell"><div class="emp-avatar" style="background:#7c3aed">SG</div><div><div class="emp-name">Suresh Gupta</div><div class="emp-dept">Engineering</div></div></div></td>
<td><span class="time-text">09:01 AM</span></td>
<td><span class="time-text" style="color:#94a3b8"></span></td>
<td><span class="hours-text">7h 33m</span></td>
<td><span class="loc-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>Mumbai Office</span></td>
<td><span class="status-pill pill-present">Present</span></td>
</tr>
</tbody>
</table>
</div>
<!-- Monthly Heatmap -->
<div class="heatmap-card">
<div class="heatmap-header">
<div class="heatmap-title">Monthly Attendance Heatmap — May 2026</div>
<div style="font-size:12px;color:#64748b">Priya Sharma &bull; Engineering</div>
</div>
<div class="calendar">
<div class="cal-months">
<div class="cal-day-header">Mon</div>
<div class="cal-day-header">Tue</div>
<div class="cal-day-header">Wed</div>
<div class="cal-day-header">Thu</div>
<div class="cal-day-header">Fri</div>
<div class="cal-day-header">Sat</div>
<div class="cal-day-header">Sun</div>
</div>
<div class="cal-grid">
<!-- Week 1: May 1 starts on Thursday -->
<div class="cal-cell empty"></div>
<div class="cal-cell empty"></div>
<div class="cal-cell empty"></div>
<div class="cal-cell h5">1</div>
<div class="cal-cell h4">2</div>
<div class="cal-cell weekend">3</div>
<div class="cal-cell weekend">4</div>
<!-- Week 2 -->
<div class="cal-cell h5">5</div>
<div class="cal-cell h4">6</div>
<div class="cal-cell h5">7</div>
<div class="cal-cell h3">8</div>
<div class="cal-cell today h2">9</div>
<div class="cal-cell weekend">10</div>
<div class="cal-cell weekend">11</div>
<!-- Week 3 -->
<div class="cal-cell h0">12</div>
<div class="cal-cell h0">13</div>
<div class="cal-cell h0">14</div>
<div class="cal-cell h0">15</div>
<div class="cal-cell h0">16</div>
<div class="cal-cell weekend">17</div>
<div class="cal-cell weekend">18</div>
<!-- Week 4 -->
<div class="cal-cell h0">19</div>
<div class="cal-cell h0">20</div>
<div class="cal-cell h0">21</div>
<div class="cal-cell h0">22</div>
<div class="cal-cell h0">23</div>
<div class="cal-cell weekend">24</div>
<div class="cal-cell weekend">25</div>
<!-- Week 5 -->
<div class="cal-cell h0">26</div>
<div class="cal-cell h0">27</div>
<div class="cal-cell h0">28</div>
<div class="cal-cell h0">29</div>
<div class="cal-cell h0">30</div>
<div class="cal-cell weekend">31</div>
<div class="cal-cell empty"></div>
</div>
</div>
<div class="heatmap-legend">
<span class="legend-label">Less</span>
<div class="legend-cells">
<div class="legend-cell" style="background:#f1f5f9"></div>
<div class="legend-cell" style="background:#dcfce7"></div>
<div class="legend-cell" style="background:#86efac"></div>
<div class="legend-cell" style="background:#4ade80"></div>
<div class="legend-cell" style="background:#16a34a"></div>
<div class="legend-cell" style="background:#15803d"></div>
</div>
<span class="legend-label">More</span>
<span style="margin-left:16px;color:#2563eb;font-weight:500">Today outlined in blue</span>
<span style="margin-left:8px;color:#94a3b8">Weekends in grey</span>
</div>
</div>
</div>
</div>
</body>
</html>