```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Deployments</title>
<style>
:root{
--border: #e2e5e9;
--border-strong: #d0d4da;
--text-primary: #1c2127;
--text-secondary: #6b7280;
--text-tertiary: #97a0ab;
--bg-page: #eef0f2;
--bg-card: #ffffff;
--bg-head: #f8f9fa;
--bg-hover: #f2f6fb;
--bg-selected: #eaf1fd;
--accent: #2f6fed;
--mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
}
*{ box-sizing: border-box; }
body{
margin:0;
padding:48px;
background:var(--bg-page);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
display:flex;
align-items:flex-start;
justify-content:center;
}
.panel{
background:var(--bg-card);
border:1px solid var(--border);
border-radius:8px;
box-shadow:0 1px 2px rgba(16,24,40,0.04);
width:960px;
overflow:hidden;
}
.panel-header{
display:flex;
align-items:center;
justify-content:space-between;
padding:14px 18px;
border-bottom:1px solid var(--border);
}
.panel-title{
font-size:13.5px;
font-weight:600;
color:var(--text-primary);
}
.panel-sub{
font-size:12px;
color:var(--text-secondary);
margin-left:8px;
font-weight:400;
}
.panel-meta{
font-size:12px;
color:var(--text-secondary);
}
table{
width:100%;
border-collapse: collapse;
font-size:13px;
}
thead th{
text-align:left;
font-weight:600;
font-size:11.5px;
letter-spacing:0.02em;
text-transform:uppercase;
color:var(--text-secondary);
background:var(--bg-head);
padding:10px 16px;
border-bottom:1px solid var(--border-strong);
white-space:nowrap;
user-select:none;
}
th.sortable{
cursor:pointer;
}
th.sortable .th-inner{
display:inline-flex;
align-items:center;
gap:5px;
}
th .arrow{
display:inline-flex;
width:10px;
height:10px;
opacity:0;
color:var(--text-tertiary);
transition:opacity .12s ease;
}
th.sortable:hover .arrow{
opacity:0.55;
}
th.sorted-active{
color:var(--text-primary);
}
th.sorted-active .arrow{
opacity:1;
color:var(--accent);
}
tbody td{
padding:10px 16px;
border-bottom:1px solid var(--border);
color:var(--text-primary);
vertical-align:middle;
}
tbody tr{
transition: background-color .1s ease;
}
tbody tr:hover{
background:var(--bg-hover);
}
tbody tr:last-child td{
border-bottom:none;
}
tr.row-hover-demo{
background:var(--bg-hover);
}
tr.row-selected{
background:var(--bg-selected);
}
tr.row-selected:hover{
background:var(--bg-selected);
}
tr.row-selected td:first-child{
box-shadow: inset 3px 0 0 var(--accent);
}
.col-check{
width:36px;
padding-right:0;
}
input[type="checkbox"]{
width:14px;
height:14px;
accent-color:var(--accent);
cursor:pointer;
}
.service-name{
font-weight:600;
color:var(--text-primary);
}
.service-path{
display:block;
font-size:11.5px;
color:var(--text-tertiary);
font-family:var(--mono);
margin-top:1px;
}
.region{
font-family:var(--mono);
font-size:12.5px;
color:var(--text-secondary);
}
.deployer{
display:flex;
align-items:center;
gap:8px;
}
.avatar{
width:20px;
height:20px;
border-radius:50%;
background:#dde3ea;
color:#5b6472;
font-size:10px;
font-weight:700;
display:flex;
align-items:center;
justify-content:center;
flex-shrink:0;
}
.duration{
font-family:var(--mono);
font-size:12.5px;
color:var(--text-secondary);
}
.timestamp{
font-family:var(--mono);
font-size:12.5px;
color:var(--text-secondary);
white-space:nowrap;
}
/* Status badges: shape + icon + text, not color alone */
.status{
display:inline-flex;
align-items:center;
gap:6px;
padding:3px 8px 3px 6px;
border-radius:5px;
font-size:12px;
font-weight:600;
border:1px solid transparent;
line-height:1.4;
}
.status .icon{
width:14px;
height:14px;
display:inline-flex;
align-items:center;
justify-content:center;
flex-shrink:0;
}
.status .icon svg{
width:100%;
height:100%;
display:block;
}
.status--success{
color:#0a6b3d;
background:#e9f7f0;
border-color:#c3e9d6;
}
.status--failed{
color:#9c1c1c;
background:#fdecec;
border-color:#f4c6c6;
}
.status--warning{
color:#8a5a00;
background:#fff4e0;
border-color:#f2ddac;
}
.status--progress{
color:#1d4fbf;
background:#eaf0fe;
border-color:#c9d9fb;
}
.status--rolledback{
color:#4a4f57;
background:#eef0f2;
border-color:#dadee3;
}
caption{
caption-side: bottom;
text-align:left;
font-size:11px;
color:var(--text-tertiary);
padding:10px 18px;
}
</style>
</head>
<body>
<div class="panel">
<div class="panel-header">
<div>
<span class="panel-title">Recent Deployments</span>
<span class="panel-sub">8 records</span>
</div>
<div class="panel-meta">1 selected</div>
</div>
<table>
<thead>
<tr>
<th class="col-check"><input type="checkbox" aria-label="Select all rows"></th>
<th class="sortable" aria-sort="none">
<span class="th-inner">Status
<span class="arrow">
<svg viewBox="0 0 10 10" fill="none"><path d="M2 6l3 3 3-3M5 9V1" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
</span>
</th>
<th class="sortable" aria-sort="none">
<span class="th-inner">Service
<span class="arrow">
<svg viewBox="0 0 10 10" fill="none"><path d="M2 6l3 3 3-3M5 9V1" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
</span>
</th>
<th class="sortable" aria-sort="none">
<span class="th-inner">Region
<span class="arrow">
<svg viewBox="0 0 10 10" fill="none"><path d="M2 6l3 3 3-3M5 9V1" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
</span>
</th>
<th class="sortable" aria-sort="none">
<span class="th-inner">Deployed by
<span class="arrow">
<svg viewBox="0 0 10 10" fill="none"><path d="M2 6l3 3 3-3M5 9V1" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
</span>
</th>
<th class="sortable" aria-sort="none">
<span class="th-inner">Duration
<span class="arrow">
<svg viewBox="0 0 10 10" fill="none"><path d="M2 6l3 3 3-3M5 9V1" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
</span>
</th>
<th class="sortable sorted-active" aria-sort="descending">
<span class="th-inner">Timestamp
<span class="arrow">
<svg viewBox="0 0 10 10" fill="none"><path d="M2 4l3-3 3 3M5 1v8" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col-check"><input type="checkbox"></td>
<td>
<span class="status status--success">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><path d="M3 8.5l3 3 7-7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
Success
</span>
</td>
<td><span class="service-name">payment-service</span><span class="service-path">svc/payment/prod</span></td>
<td class="region">us-east-1</td>
<td><div class="deployer"><span class="avatar">AC</span>a.chen</div></td>
<td class="duration">2m 14s</td>
<td class="timestamp">2024-03-18 14:32:05</td>
</tr>
<tr>
<td class="col-check"><input type="checkbox"></td>
<td>
<span class="status status--progress">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.8" stroke-dasharray="3 3"/></svg></span>
In Progress
</span>
</td>
<td><span class="service-name">auth-gateway</span><span class="service-path">svc/auth/prod</span></td>
<td class="region">eu-west-1</td>
<td><div class="deployer"><span class="avatar">MR</span>m.rodriguez</div></td>
<td class="duration">45s</td>
<td class="timestamp">2024-03-18 14:28:41</td>
</tr>
<tr class="row-hover-demo">
<td class="col-check"><input type="checkbox"></td>
<td>
<span class="status status--failed">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><path d="M4 4l8 8M12 4l-8 8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg></span>
Failed
</span>
</td>
<td><span class="service-name">inventory-api</span><span class="service-path">svc/inventory/prod</span></td>
<td class="region">ap-southeast-2</td>
<td><div class="deployer"><span class="avatar">SP</span>s.patel</div></td>
<td class="duration">1m 03s</td>
<td class="timestamp">2024-03-18 13:57:12</td>
</tr>
<tr>
<td class="col-check"><input type="checkbox"></td>
<td>
<span class="status status--success">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><path d="M3 8.5l3 3 7-7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
Success
</span>
</td>
<td><span class="service-name">notification-worker</span><span class="service-path">svc/notify/prod</span></td>
<td class="region">us-west-2</td>
<td><div class="deployer"><span class="avatar">AC</span>a.chen</div></td>
<td class="duration">3m 41s</td>
<td class="timestamp">2024-03-18 13:40:09</td>
</tr>
<tr class="row-selected">
<td class="col-check"><input type="checkbox" checked></td>
<td>
<span class="status status--warning">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><path d="M8 2l7 12H1L8 2z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/><path d="M8 6.5v3.2" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><circle cx="8" cy="12" r="0.8" fill="currentColor"/></svg></span>
Warning
</span>
</td>
<td><span class="service-name">search-indexer</span><span class="service-path">svc/search/prod</span></td>
<td class="region">us-east-1</td>
<td><div class="deployer"><span class="avatar">JK</span>j.kim</div></td>
<td class="duration">5m 02s</td>
<td class="timestamp">2024-03-18 12:58:33</td>
</tr>
<tr>
<td class="col-check"><input type="checkbox"></td>
<td>
<span class="status status--success">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><path d="M3 8.5l3 3 7-7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
Success
</span>
</td>
<td><span class="service-name">billing-service</span><span class="service-path">svc/billing/prod</span></td>
<td class="region">eu-central-1</td>
<td><div class="deployer"><span class="avatar">MR</span>m.rodriguez</div></td>
<td class="duration">2m 30s</td>
<td class="timestamp">2024-03-18 12:15:47</td>
</tr>
<tr>
<td class="col-check"><input type="checkbox"></td>
<td>
<span class="status status--rolledback">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><path d="M4 8a4 4 0 117 2.6" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><path d="M4 5.5V8h2.5" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
Rolled Back
</span>
</td>
<td><span class="service-name">user-profile-api</span><span class="service-path">svc/profile/prod</span></td>
<td class="region">us-east-1</td>
<td><div class="deployer"><span class="avatar">SP</span>s.patel</div></td>
<td class="duration">1m 47s</td>
<td class="timestamp">2024-03-18 11:49:22</td>
</tr>
<tr>
<td class="col-check"><input type="checkbox"></td>
<td>
<span class="status status--success">
<span class="icon"><svg viewBox="0 0 16 16" fill="none"><path d="M3 8.5l3 3 7-7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
Success
</span>
</td>
<td><span class="service-name">cache-warmer</span><span class="service-path">svc/cache/prod</span></td>
<td class="region">ap-northeast-1</td>
<td><div class="deployer"><span class="avatar">JK</span>j.kim</div></td>
<td class="duration">58s</td>
<td class="timestamp">2024-03-18 11:20:03</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
```