Files
2026-05-09 19:35:10 +00:00

352 lines
21 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Org Chart — 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; overflow-x: auto; }
.page-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 28px; }
.page-title { font-size: 22px; font-weight: 700; }
.btn-outline { padding: 8px 16px; border: 1.5px solid #E5E7EB; border-radius: 6px; background: #FFFFFF; color: #374151; font-size: 14px; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 6px; }
/* ORG CHART */
.org-chart { display: flex; flex-direction: column; align-items: center; min-width: 900px; }
/* PERSON CARD */
.person-card {
background: #FFFFFF; border-radius: 10px; border: 1px solid #E5E7EB;
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
padding: 14px 16px; width: 150px; text-align: center;
cursor: pointer; transition: all 0.2s;
position: relative;
}
.person-card:hover { box-shadow: 0 4px 16px rgba(0,0,0,0.14); border-color: #C7D2FE; transform: translateY(-1px); }
.person-card.ceo { width: 180px; border-color: #4F46E5; }
.person-avatar {
width: 48px; height: 48px; border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 16px; font-weight: 700; color: #FFF;
margin: 0 auto 8px;
}
.person-card.ceo .person-avatar { width: 56px; height: 56px; font-size: 18px; }
.person-name { font-size: 13px; font-weight: 600; color: #111827; margin-bottom: 2px; }
.person-title { font-size: 11px; color: #9CA3AF; line-height: 1.4; }
.person-card.ceo .person-name { font-size: 14px; }
/* CONNECTOR LINES */
.connector-down {
width: 2px; background: #E5E7EB; height: 32px; margin: 0 auto;
}
.connector-horizontal {
display: flex; align-items: flex-start; position: relative;
}
.connector-horizontal::before {
content: ''; position: absolute; top: 0; left: 50%;
transform: translateX(-50%);
width: 2px; height: 32px; background: #E5E7EB;
}
/* LEVEL WRAPPER */
.level { display: flex; gap: 0; align-items: flex-start; position: relative; }
.level::before {
content: ''; position: absolute; top: 0; left: 0; right: 0;
height: 2px; background: #E5E7EB;
}
.level-item {
display: flex; flex-direction: column; align-items: center;
padding: 0 16px; flex: 1;
}
.level-connector-up {
width: 2px; height: 32px; background: #E5E7EB; margin-bottom: 0;
}
/* SUBLEVEL */
.sublevel { display: flex; gap: 8px; margin-top: 0; align-items: flex-start; }
.sublevel-item { display: flex; flex-direction: column; align-items: center; }
.sublevel-connector { width: 2px; height: 20px; background: #E5E7EB; }
.sublevel-h-connector { height: 2px; background: #E5E7EB; width: 100%; position: absolute; top: 20px; }
/* CLEANER APPROACH */
.org-wrapper {
display: flex; flex-direction: column; align-items: center;
gap: 0;
}
/* CEO */
.ceo-row { display: flex; flex-direction: column; align-items: center; }
.vert-line { width: 2px; height: 32px; background: #D1D5DB; }
.horiz-line { height: 2px; background: #D1D5DB; }
/* DEPT HEADS ROW */
.dept-row {
display: flex; align-items: flex-start; gap: 0; position: relative;
margin-top: 0;
}
.dept-col { display: flex; flex-direction: column; align-items: center; padding: 0 20px; }
.dept-col-top { width: 2px; height: 32px; background: #D1D5DB; }
.dept-col-connector { position: relative; width: 100%; }
/* TEAM MEMBERS */
.team-row { display: flex; gap: 10px; position: relative; margin-top: 16px; }
.team-member { display: flex; flex-direction: column; align-items: center; }
.team-member-connector { width: 2px; height: 20px; background: #D1D5DB; }
.person-card-sm {
background: #FFFFFF; border-radius: 8px; border: 1px solid #E5E7EB;
box-shadow: 0 1px 4px rgba(0,0,0,0.06);
padding: 10px 12px; width: 120px; text-align: center;
cursor: pointer; transition: all 0.15s;
}
.person-card-sm:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.1); border-color: #C7D2FE; }
.avatar-sm { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600; color: #FFF; margin: 0 auto 6px; }
.name-sm { font-size: 12px; font-weight: 600; color: #111827; margin-bottom: 1px; }
.title-sm { font-size: 10px; color: #9CA3AF; line-height: 1.3; }
/* DEPT ROW HORIZONTAL CONNECTOR */
.dept-horiz { display: flex; align-items: center; width: 100%; position: relative; }
.dept-horiz::before {
content: ''; position: absolute; top: 32px; left: 20%; right: 20%;
height: 2px; background: #D1D5DB;
}
</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"><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 active"><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>Organization Chart</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>
<div class="page-title">Organization Chart</div>
<div style="font-size:13px;color:#9CA3AF;margin-top:3px;">TechFlow Inc. &nbsp;·&nbsp; 248 employees</div>
</div>
<div style="display:flex;gap:8px;">
<button class="btn-outline">
<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>
Export PDF
</button>
<button class="btn-outline">
<svg width="15" height="15" 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>
Search People
</button>
</div>
</div>
<!-- ORG CHART -->
<div style="background:#FFFFFF;border-radius:12px;border:1px solid #E5E7EB;padding:40px;overflow-x:auto;box-shadow:0 1px 3px rgba(0,0,0,0.06);">
<div class="org-wrapper">
<!-- CEO -->
<div class="ceo-row">
<div class="person-card ceo">
<div class="person-avatar" style="background:#111827;">RP</div>
<div class="person-name">Robert Park</div>
<div class="person-title">Chief Executive Officer</div>
</div>
<div class="vert-line"></div>
</div>
<!-- HORIZONTAL CONNECTOR -->
<div style="display:flex;width:820px;height:2px;background:linear-gradient(to right, transparent 12.5%, #D1D5DB 12.5%, #D1D5DB 87.5%, transparent 87.5%);"></div>
<!-- DEPT HEADS ROW -->
<div style="display:flex;width:820px;">
<!-- Engineering -->
<div class="dept-col" style="flex:1;">
<div class="dept-col-top"></div>
<div class="person-card">
<div class="person-avatar" style="background:#4F46E5;">MR</div>
<div class="person-name">Michael Rodriguez</div>
<div class="person-title">VP Engineering</div>
</div>
<div class="vert-line" style="height:20px;"></div>
<div style="display:flex;height:2px;background:linear-gradient(to right,transparent 25%,#D1D5DB 25%,#D1D5DB 75%,transparent 75%);width:260px;"></div>
<div style="display:flex;gap:10px;margin-top:0;">
<div class="team-member">
<div class="vert-line" style="height:16px;"></div>
<div class="person-card-sm">
<div class="avatar-sm" style="background:#6366F1;">JK</div>
<div class="name-sm">James Kim</div>
<div class="title-sm">Frontend Dev</div>
</div>
</div>
<div class="team-member">
<div class="vert-line" style="height:16px;"></div>
<div class="person-card-sm">
<div class="avatar-sm" style="background:#8B5CF6;">NW</div>
<div class="name-sm">Noah Williams</div>
<div class="title-sm">DevOps Engineer</div>
</div>
</div>
</div>
</div>
<!-- HR -->
<div class="dept-col" style="flex:1;">
<div class="dept-col-top"></div>
<div class="person-card">
<div class="person-avatar" style="background:#10B981;">SC</div>
<div class="person-name">Sarah Chen</div>
<div class="person-title">HR Director</div>
</div>
<div class="vert-line" style="height:20px;"></div>
<div style="display:flex;height:2px;background:#D1D5DB;width:140px;margin:0 auto;"></div>
<div style="display:flex;gap:10px;margin-top:0;justify-content:center;">
<div class="team-member">
<div class="vert-line" style="height:16px;"></div>
<div class="person-card-sm">
<div class="avatar-sm" style="background:#34D399;">LM</div>
<div class="name-sm">Lily Martin</div>
<div class="title-sm">HR Specialist</div>
</div>
</div>
</div>
</div>
<!-- Finance -->
<div class="dept-col" style="flex:1;">
<div class="dept-col-top"></div>
<div class="person-card">
<div class="person-avatar" style="background:#F59E0B;">PP</div>
<div class="person-name">Priya Patel</div>
<div class="person-title">Finance Director</div>
</div>
<div class="vert-line" style="height:20px;"></div>
<div style="display:flex;height:2px;background:#D1D5DB;width:140px;margin:0 auto;"></div>
<div style="display:flex;gap:10px;margin-top:0;justify-content:center;">
<div class="team-member">
<div class="vert-line" style="height:16px;"></div>
<div class="person-card-sm">
<div class="avatar-sm" style="background:#FBBF24;">FA</div>
<div class="name-sm">Fatima Al-Rashid</div>
<div class="title-sm">Financial Analyst</div>
</div>
</div>
</div>
</div>
<!-- Operations -->
<div class="dept-col" style="flex:1;">
<div class="dept-col-top"></div>
<div class="person-card">
<div class="person-avatar" style="background:#3B82F6;">RS</div>
<div class="person-name">Ravi Shankar</div>
<div class="person-title">Operations Lead</div>
</div>
<div class="vert-line" style="height:20px;"></div>
<div style="display:flex;height:2px;background:linear-gradient(to right,transparent 25%,#D1D5DB 25%,#D1D5DB 75%,transparent 75%);width:260px;"></div>
<div style="display:flex;gap:10px;margin-top:0;">
<div class="team-member">
<div class="vert-line" style="height:16px;"></div>
<div class="person-card-sm">
<div class="avatar-sm" style="background:#60A5FA;">LO</div>
<div class="name-sm">Lucas Oliveira</div>
<div class="title-sm">Ops Specialist</div>
</div>
</div>
<div class="team-member">
<div class="vert-line" style="height:16px;"></div>
<div class="person-card-sm">
<div class="avatar-sm" style="background:#2563EB;">TH</div>
<div class="name-sm">Tom Huang</div>
<div class="title-sm">Ops Analyst</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- LEGEND -->
<div style="margin-top:32px;padding-top:20px;border-top:1px solid #F3F4F6;display:flex;gap:24px;justify-content:center;">
<div style="display:flex;align-items:center;gap:8px;font-size:12px;color:#6B7280;">
<div style="width:32px;height:2px;background:#D1D5DB;"></div>
Reports to
</div>
<div style="display:flex;align-items:center;gap:8px;font-size:12px;color:#6B7280;">
<div style="width:12px;height:12px;border-radius:50%;background:#111827;"></div>
C-Suite
</div>
<div style="display:flex;align-items:center;gap:8px;font-size:12px;color:#6B7280;">
<div style="width:12px;height:12px;border-radius:50%;background:#4F46E5;"></div>
Department Head
</div>
<div style="display:flex;align-items:center;gap:8px;font-size:12px;color:#6B7280;">
<div style="width:12px;height:12px;border-radius:50%;background:#6366F1;"></div>
Team Member
</div>
</div>
</div>
</main>
</div>
</body>
</html>