```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Server Deployment Records</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background: #f5f5f5;
padding: 40px;
display: flex;
justify-content: center;
align-items: flex-start;
min-height: 100vh;
}
.container {
background: white;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
overflow: hidden;
max-width: 1200px;
width: 100%;
}
.table-header {
padding: 16px 20px;
border-bottom: 1px solid #e0e0e0;
background: #fafafa;
}
.table-title {
font-size: 14px;
font-weight: 600;
color: #222;
text-transform: uppercase;
letter-spacing: 0.5px;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
color: #333;
}
thead {
background: #f9f9f9;
border-bottom: 2px solid #e0e0e0;
}
th {
padding: 12px 20px;
text-align: left;
font-weight: 600;
color: #555;
white-space: nowrap;
user-select: none;
cursor: pointer;
transition: background-color 0.15s ease;
position: relative;
}
th:hover {
background-color: #f0f0f0;
}
th.sortable::after {
content: '↕';
margin-left: 6px;
opacity: 0.3;
font-size: 11px;
}
th.sorted-asc::after {
content: '↑';
opacity: 0.7;
color: #0066cc;
}
th.sorted-desc::after {
content: '↓';
opacity: 0.7;
color: #0066cc;
}
td {
padding: 12px 20px;
border-bottom: 1px solid #f0f0f0;
}
tbody tr {
transition: background-color 0.1s ease;
cursor: pointer;
}
tbody tr:hover {
background-color: #f7f9fc;
}
tbody tr.selected {
background-color: #e3f2fd;
border-left: 3px solid #0066cc;
padding-left: 17px;
}
tbody tr.selected:hover {
background-color: #e3f2fd;
}
.status-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 10px;
border-radius: 3px;
font-weight: 500;
font-size: 12px;
width: fit-content;
}
.status-active {
background-color: #e8f5e9;
color: #2e7d32;
border: 1px solid #c8e6c9;
}
.status-active::before {
content: '●';
font-size: 8px;
}
.status-pending {
background-color: #fff3e0;
color: #e65100;
border: 1px solid #ffe0b2;
}
.status-pending::before {
content: '◐';
font-size: 8px;
}
.status-failed {
background-color: #ffebee;
color: #c62828;
border: 1px solid #ffcdd2;
}
.status-failed::before {
content: '✕';
font-size: 8px;
}
.service-name {
font-weight: 500;
color: #222;
}
.region-badge {
background-color: #f0f0f0;
color: #555;
padding: 2px 8px;
border-radius: 2px;
font-size: 12px;
width: fit-content;
}
.deployed-by {
color: #666;
}
.duration {
font-family: 'Courier New', monospace;
color: #555;
text-align: right;
}
.timestamp {
color: #999;
font-size: 12px;
white-space: nowrap;
font-family: 'Courier New', monospace;
}
tr:last-child td {
border-bottom: none;
}
</style>
</head>
<body>
<div class="container">
<div class="table-header">
<div class="table-title">Server Deployments</div>
</div>
<table>
<thead>
<tr>
<th class="sortable">Status</th>
<th class="sortable sorted-asc">Service Name</th>
<th class="sortable">Region</th>
<th class="sortable">Deployed By</th>
<th class="sortable">Duration</th>
<th class="sortable">Timestamp</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="status-badge status-active">Active</span></td>
<td class="service-name">api-gateway-v2</td>
<td><span class="region-badge">us-east-1</span></td>
<td class="deployed-by">alice@company.com</td>
<td class="duration">2m 34s</td>
<td class="timestamp">2024-01-15 14:32:18</td>
</tr>
<tr class="selected">
<td><span class="status-badge status-active">Active</span></td>
<td class="service-name">web-frontend</td>
<td><span class="region-badge">eu-west-1</span></td>
<td class="deployed-by">bob.martinez@company.com</td>
<td class="duration">1m 12s</td>
<td class="timestamp">2024-01-15 14:28:55</td>
</tr>
<tr>
<td><span class="status-badge status-pending">Pending</span></td>
<td class="service-name">data-processor</td>
<td><span class="region-badge">ap-southeast-1</span></td>
<td class="deployed-by">charlie.dev@company.com</td>
<td class="duration">45s</td>
<td class="timestamp">2024-01-15 14:27:32</td>
</tr>
<tr>
<td><span class="status-badge status-active">Active</span></td>
<td class="service-name">cache-service</td>
<td><span class="region-badge">us-west-2</span></td>
<td class="deployed-by">diana.ops@company.com</td>
<td class="duration">3m 08s</td>
<td class="timestamp">2024-01-15 14:15:22</td>
</tr>
<tr>
<td><span class="status-badge status-failed">Failed</span></td>
<td class="service-name">analytics-engine</td>
<td><span class="region-badge">eu-central-1</span></td>
<td class="deployed-by">eve.jenkins@company.com</td>
<td class="duration">5m 42s</td>
<td class="timestamp">2024-01-15 14:08:11</td>
</tr>
<tr>
<td><span class="status-badge status-active">Active</span></td>
<td class="service-name">auth-service</td>
<td><span class="region-badge">us-east-1</span></td>
<td class="deployed-by">frank.brown@company.com</td>
<td class="duration">1m 56s</td>
<td class="timestamp">2024-01-15 13:52:44</td>
</tr>
<tr>
<td><span class="status-badge status-active">Active</span></td>
<td class="service-name">notification-hub</td>
<td><span class="region-badge">ap-northeast-1</span></td>
<td class="deployed-by">grace.platform@company.com</td>
<td class="duration">2m 19s</td>
<td class="timestamp">2024-01-15 13:41:03</td>
</tr>
<tr>
<td><span class="status-badge status-pending">Pending</span></td>
<td class="service-name">search-index-v3</td>
<td><span class="region-badge">us-east-1</span></td>
<td class="deployed-by">henry.infra@company.com</td>
<td class="duration">8m 15s</td>
<td class="timestamp">2024-01-15 13:28:17</td>
</tr>
</tbody>
</table>
</div>
<script>
// Add hover effect interactivity
const rows = document.querySelectorAll('tbody tr');
rows.forEach(row => {
row.addEventListener('click', () => {
rows.forEach(r => r.classList.remove('selected'));
row.classList.add('selected');
});
});
// Add column header sorting state toggle
const headers = document.querySelectorAll('th.sortable');
headers.forEach((header, index) => {
header.addEventListener('click', () => {
headers.forEach(h => {
h.classList.remove('sorted-asc', 'sorted-desc');
});
if (index === 1) {
header.classList.add('sorted-asc');
}
});
});
</script>
</body>
</html>
```