Files
hr-portal-designs/designs/07-payslips.html
T
2026-05-04 15:56:20 +00:00

348 lines
22 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 — Payslips</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;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: #F8FAFC; color: #0F172A; display: flex; min-height: 100vh; }
.sidebar { width: 240px; min-height: 100vh; background: #1E293B; display: flex; flex-direction: column; flex-shrink: 0; position: fixed; top: 0; left: 0; bottom: 0; }
.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: #4F46E5; 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: 11px; color: #94A3B8; margin-top: 1px; }
.sidebar-nav { padding: 16px 0; flex: 1; }
.nav-section-label { font-size: 10px; font-weight: 600; color: #475569; text-transform: uppercase; letter-spacing: 0.8px; padding: 12px 20px 6px; }
.nav-item { display: flex; align-items: center; gap: 10px; padding: 10px 20px; font-size: 14px; font-weight: 500; color: #94A3B8; cursor: pointer; border-left: 3px solid transparent; text-decoration: none; }
.nav-item:hover { color: #fff; background: rgba(255,255,255,0.05); }
.nav-item.active { color: #818CF8; background: rgba(79,70,229,0.15); border-left-color: #4F46E5; font-weight: 600; }
.nav-item svg { width: 18px; height: 18px; flex-shrink: 0; }
.sidebar-footer { padding: 16px 20px; border-top: 1px solid rgba(255,255,255,0.08); }
.sidebar-user { display: flex; align-items: center; gap: 10px; }
.avatar-sm { width: 34px; height: 34px; border-radius: 50%; background: #4F46E5; 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: #E2E8F0; }
.sidebar-user-role { font-size: 11px; color: #64748B; }
.main { margin-left: 240px; flex: 1; display: flex; flex-direction: column; }
.topbar { height: 64px; background: #fff; border-bottom: 1px solid #E2E8F0; display: flex; align-items: center; justify-content: space-between; padding: 0 28px; position: sticky; top: 0; z-index: 10; }
.topbar-title { font-size: 16px; font-weight: 600; color: #0F172A; }
.topbar-right { display: flex; align-items: center; gap: 16px; }
.icon-btn { width: 38px; height: 38px; border-radius: 8px; background: #F1F5F9; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; position: relative; }
.icon-btn svg { width: 18px; height: 18px; color: #64748B; }
.notif-dot { position: absolute; top: 8px; right: 8px; width: 8px; height: 8px; background: #EF4444; border-radius: 50%; border: 2px solid #fff; }
.topbar-user { display: flex; align-items: center; gap: 10px; }
.avatar { width: 38px; height: 38px; border-radius: 50%; background: #4F46E5; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; color: #fff; flex-shrink: 0; }
.topbar-user-name { font-size: 14px; font-weight: 600; color: #0F172A; }
.topbar-user-id { font-size: 12px; color: #64748B; }
.content { padding: 28px; flex: 1; }
.page-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; }
.page-title { font-size: 20px; font-weight: 700; color: #0F172A; }
.page-subtitle { font-size: 13px; color: #64748B; margin-top: 3px; }
.two-cols { display: grid; grid-template-columns: 1fr 340px; gap: 24px; }
/* PAYSLIP GRID */
.year-filter { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.year-filter label { font-size: 13px; font-weight: 600; color: #374151; }
select { padding: 8px 12px; border: 1.5px solid #E2E8F0; border-radius: 8px; font-size: 13px; font-family: 'Inter', sans-serif; color: #374151; background: #fff; outline: none; }
select:focus { border-color: #4F46E5; }
.payslips-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.payslip-card {
background: #fff; border-radius: 12px; padding: 18px 20px;
box-shadow: 0 1px 3px rgba(0,0,0,0.07); border: 1px solid #F1F5F9;
transition: box-shadow 0.15s;
}
.payslip-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
.payslip-card.highlighted { border: 2px solid #4F46E5; background: #FAFAFE; }
.payslip-month { font-size: 15px; font-weight: 700; color: #0F172A; margin-bottom: 4px; }
.payslip-net { font-size: 13px; color: #4F46E5; font-weight: 600; margin-bottom: 10px; }
.badge { display: inline-flex; align-items: center; padding: 3px 9px; border-radius: 999px; font-size: 11px; font-weight: 600; }
.badge-green { background: #ECFDF5; color: #059669; }
.badge-amber { background: #FFFBEB; color: #D97706; }
.payslip-actions { margin-top: 12px; }
.btn-download {
display: flex; align-items: center; gap: 6px;
width: 100%; padding: 8px 0; background: transparent; border: 1.5px solid #E2E8F0;
border-radius: 7px; font-size: 12px; font-weight: 600; color: #64748B; cursor: pointer;
font-family: 'Inter', sans-serif; justify-content: center;
}
.btn-download:hover { background: #F8FAFC; border-color: #4F46E5; color: #4F46E5; }
.btn-download svg { width: 14px; height: 14px; }
.payslip-card.pending .btn-download { opacity: 0.4; cursor: not-allowed; }
/* EXPANDED PAYSLIP */
.payslip-detail { background: #fff; border-radius: 12px; box-shadow: 0 1px 3px rgba(0,0,0,0.07); border: 1px solid #F1F5F9; overflow: hidden; }
.detail-header { background: #1E293B; padding: 20px 24px; color: #fff; }
.detail-header-top { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 8px; }
.detail-company { font-size: 14px; font-weight: 700; color: #fff; }
.detail-period { font-size: 12px; color: #94A3B8; }
.detail-emp { font-size: 13px; color: #CBD5E1; }
.detail-net { text-align: right; }
.detail-net-label { font-size: 11px; color: #94A3B8; text-transform: uppercase; letter-spacing: 0.5px; }
.detail-net-amount { font-size: 28px; font-weight: 800; color: #fff; }
.detail-body { padding: 20px 24px; }
.detail-section-title { font-size: 11px; font-weight: 700; color: #64748B; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px; }
.detail-rows { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
.detail-row { display: flex; justify-content: space-between; align-items: center; }
.detail-row-label { font-size: 13px; color: #374151; }
.detail-row-val { font-size: 13px; font-weight: 600; color: #0F172A; }
.detail-divider { border: none; border-top: 1px solid #F1F5F9; margin: 8px 0 12px; }
.detail-total-row { display: flex; justify-content: space-between; align-items: center; background: #F8FAFC; padding: 10px 12px; border-radius: 8px; margin-bottom: 16px; }
.detail-total-label { font-size: 13px; font-weight: 700; color: #0F172A; }
.detail-total-val { font-size: 14px; font-weight: 800; }
.net-pay-bar { background: linear-gradient(135deg, #4F46E5, #7C3AED); padding: 14px 16px; border-radius: 10px; display: flex; justify-content: space-between; align-items: center; }
.net-pay-label { font-size: 13px; font-weight: 700; color: rgba(255,255,255,0.8); }
.net-pay-amount { font-size: 20px; font-weight: 800; color: #fff; }
.btn-download-full { width: 100%; padding: 11px; background: #4F46E5; color: #fff; border: none; border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; font-family: 'Inter', sans-serif; margin-top: 16px; display: flex; align-items: center; justify-content: center; gap: 8px; }
.btn-download-full svg { width: 16px; height: 16px; }
</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="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
<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">TechCorp HR</div>
<div class="sidebar-logo-sub">Employee Portal</div>
</div>
</div>
<nav class="sidebar-nav">
<div class="nav-section-label">Main Menu</div>
<a class="nav-item" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="nav-item" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>Attendance</a>
<a class="nav-item" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg>Leave</a>
<a class="nav-item active" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>Payslips</a>
<a class="nav-item" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>Reimbursements</a>
<a class="nav-item" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>Tax &amp; Form 16</a>
<a class="nav-item" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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>Announcements</a>
</nav>
<div class="sidebar-footer">
<div class="sidebar-user">
<div class="avatar-sm">RS</div>
<div>
<div class="sidebar-user-name">Rahul Sharma</div>
<div class="sidebar-user-role">EMP-00247 · Engineering</div>
</div>
</div>
</div>
</aside>
<div class="main">
<header class="topbar">
<div class="topbar-title">My Payslips</div>
<div class="topbar-right">
<button class="icon-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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-dot"></span></button>
<div class="topbar-user">
<div><div class="topbar-user-name">Rahul Sharma</div><div class="topbar-user-id">EMP-00247</div></div>
<div class="avatar">RS</div>
</div>
</div>
</header>
<div class="content">
<div class="page-header">
<div>
<div class="page-title">Payslips</div>
<div class="page-subtitle">View and download your monthly salary statements</div>
</div>
</div>
<div class="two-cols">
<!-- PAYSLIP LIST -->
<div>
<div class="year-filter">
<label>Financial Year:</label>
<select>
<option>FY 2025-26</option>
<option>FY 2024-25</option>
<option>FY 2023-24</option>
</select>
</div>
<div class="payslips-grid">
<div class="payslip-card">
<div class="payslip-month">May 2026</div>
<div class="payslip-net">Net Pay: —</div>
<span class="badge badge-amber">Not Generated</span>
<div class="payslip-actions">
<button class="btn-download" disabled>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="payslip-card highlighted">
<div class="payslip-month">April 2026</div>
<div class="payslip-net">Net Pay: ₹68,500</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions">
<button class="btn-download">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="payslip-card">
<div class="payslip-month">March 2026</div>
<div class="payslip-net">Net Pay: ₹68,500</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions">
<button class="btn-download">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="payslip-card">
<div class="payslip-month">February 2026</div>
<div class="payslip-net">Net Pay: ₹65,200</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions">
<button class="btn-download">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="payslip-card">
<div class="payslip-month">January 2026</div>
<div class="payslip-net">Net Pay: ₹68,500</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions">
<button class="btn-download">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="payslip-card">
<div class="payslip-month">December 2025</div>
<div class="payslip-net">Net Pay: ₹72,000</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions">
<button class="btn-download">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 class="payslip-card">
<div class="payslip-month">November 2025</div>
<div class="payslip-net">Net Pay: ₹68,500</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions"><button class="btn-download"><svg 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 class="payslip-card">
<div class="payslip-month">October 2025</div>
<div class="payslip-net">Net Pay: ₹68,500</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions"><button class="btn-download"><svg 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 class="payslip-card">
<div class="payslip-month">September 2025</div>
<div class="payslip-net">Net Pay: ₹68,500</div>
<span class="badge badge-green">Generated</span>
<div class="payslip-actions"><button class="btn-download"><svg 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>
<!-- PAYSLIP DETAIL -->
<div>
<div style="font-size:13px;font-weight:700;color:#0F172A;margin-bottom:14px;">April 2026 — Breakdown</div>
<div class="payslip-detail">
<div class="detail-header">
<div class="detail-header-top">
<div>
<div class="detail-company">TechCorp Solutions Pvt. Ltd.</div>
<div class="detail-period">April 130, 2026 · 22 working days</div>
<div class="detail-emp" style="margin-top:6px;">Rahul Sharma · EMP-00247<br/>Senior Software Engineer, Engineering</div>
</div>
<div class="detail-net">
<div class="detail-net-label">Net Pay</div>
<div class="detail-net-amount">₹68,500</div>
</div>
</div>
</div>
<div class="detail-body">
<!-- EARNINGS -->
<div class="detail-section-title" style="color:#10B981;">Earnings</div>
<div class="detail-rows">
<div class="detail-row">
<span class="detail-row-label">Basic Salary</span>
<span class="detail-row-val">₹40,000</span>
</div>
<div class="detail-row">
<span class="detail-row-label">House Rent Allowance (HRA)</span>
<span class="detail-row-val">₹16,000</span>
</div>
<div class="detail-row">
<span class="detail-row-label">Dearness Allowance (DA)</span>
<span class="detail-row-val">₹4,000</span>
</div>
<div class="detail-row">
<span class="detail-row-label">Special Allowance</span>
<span class="detail-row-val">₹10,000</span>
</div>
<div class="detail-row">
<span class="detail-row-label">Transport Allowance</span>
<span class="detail-row-val">₹3,200</span>
</div>
</div>
<div class="detail-total-row">
<span class="detail-total-label">Gross Earnings</span>
<span class="detail-total-val" style="color:#10B981;">₹73,200</span>
</div>
<!-- DEDUCTIONS -->
<div class="detail-section-title" style="color:#EF4444;">Deductions</div>
<div class="detail-rows">
<div class="detail-row">
<span class="detail-row-label">Provident Fund (PF)</span>
<span class="detail-row-val" style="color:#EF4444;">−₹4,800</span>
</div>
<div class="detail-row">
<span class="detail-row-label">Professional Tax (PT)</span>
<span class="detail-row-val" style="color:#EF4444;">−₹200</span>
</div>
<div class="detail-row">
<span class="detail-row-label">TDS (Income Tax)</span>
<span class="detail-row-val" style="color:#EF4444;">−₹8,700</span>
</div>
<div class="detail-row">
<span class="detail-row-label">ESI Contribution</span>
<span class="detail-row-val" style="color:#EF4444;">−₹0</span>
</div>
</div>
<div class="detail-total-row">
<span class="detail-total-label">Total Deductions</span>
<span class="detail-total-val" style="color:#EF4444;">₹13,700</span>
</div>
<div class="net-pay-bar">
<span class="net-pay-label">NET PAY (Take Home)</span>
<span class="net-pay-amount">₹68,500</span>
</div>
<button class="btn-download-full">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 April 2026 Payslip PDF
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>