deploy: hr-portal-designs

This commit is contained in:
TenX PM
2026-05-04 15:56:20 +00:00
commit 96d64f4b6f
16 changed files with 5629 additions and 0 deletions
+347
View File
@@ -0,0 +1,347 @@
<!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>