1.deploys .graph { --lane: 16px; --y: 18px; --row-bg: var(--page); display: flex; flex-direction: column; padding-bottom: 24px; }
2.deploys .hint { margin: 0; padding: 8px var(--gutter); color: var(--muted); font-size: 13px; }
3
4.deploys .row {
5 position: relative;
6 display: grid;
7 grid-template-columns: calc(var(--lanes) * var(--lane) + 22px) minmax(0, 17rem) minmax(0, 1fr) 7rem;
8 align-items: start;
9 column-gap: 12px;
10 padding: 0 var(--gutter);
11 background: var(--row-bg);
12 transition: background-color 150ms;
13}
14.deploys .row.link:hover { --row-bg: var(--hover); }
15.deploys .row:has(a.title:focus-visible) { outline: 2px solid var(--focus); outline-offset: -2px; }
16.deploys .row > :not(.rail) { padding: 8px 0; line-height: 20px; }
17.deploys .row > .skeleton { height: 16px; margin: 10px 0; }
18
19.deploys .rail { position: relative; align-self: stretch; }
20.deploys .rail i { position: absolute; left: calc(6px + var(--x, 0) * var(--lane)); width: 2px; background: var(--axis); }
21.deploys .rail i.trunk { background: var(--accent); }
22.deploys .pending .rail i.trunk { background: repeating-linear-gradient(var(--accent) 0 3px, transparent 3px 7px); }
23.deploys .rail .start { top: var(--y); bottom: 0; }
24.deploys .rail .pass { top: 0; bottom: 0; }
25.deploys .rail .end { top: 0; height: var(--y); }
26.deploys .rail .lane.merge { top: 0; height: calc(var(--y) - 8px); }
27.deploys .rail i.curve {
28 left: 7px;
29 top: calc(var(--y) - 8px);
30 width: calc(var(--x) * var(--lane) + 1px);
31 height: 9px;
32 border: solid var(--axis);
33 border-width: 0 2px 2px 0;
34 border-bottom-right-radius: 8px;
35 background: none;
36}
37.deploys .node {
38 position: absolute;
39 left: calc(7px + var(--x, 0) * var(--lane));
40 top: var(--y);
41 translate: -50% -50%;
42 display: grid;
43 place-items: center;
44 width: 16px;
45 height: 16px;
46 border-radius: 50%;
47 background: var(--row-bg);
48 transition: background-color 150ms;
49}
50.deploys .dot { width: 10px; height: 10px; border-radius: 50%; background: var(--accent); }
51.deploys .dot.rollback { background: var(--row-bg); box-shadow: inset 0 0 0 2px var(--accent); }
52.deploys .dot.head { width: 12px; height: 12px; box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 30%, transparent); }
53
54.deploys .what { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; min-width: 0; }
55.deploys .title { display: inline-flex; align-items: baseline; gap: 8px; min-width: 0; }
56.deploys .title b { font-weight: 600; white-space: nowrap; }
57.deploys .row.link a.title::after { content: ""; position: absolute; inset: 0; }
58.deploys a.title:focus-visible { outline: none; }
59.deploys .row :is(.chips a, time, .chip[data-tip]) { position: relative; z-index: 1; }
60.deploys .when { text-align: right; color: var(--text-2); white-space: nowrap; }
61
62.chip.production { background: var(--accent-wash); color: var(--accent); }
63.chip.failed { background: color-mix(in srgb, var(--critical) 16%, transparent); color: color-mix(in srgb, var(--critical) 70%, var(--text)); }