| 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)); } |