style.css (5845B)
1 /* dashboard/style.css - the whole interface, one stylesheet */ 2 3 :root { 4 --bg: #101214; 5 --panel: #171a1d; 6 --border: #272b30; 7 --text: #dfe3e6; 8 --muted: #8b949e; 9 --link: #6cb6ff; 10 --queued: #3a4046; 11 --running: #b58900; 12 --success: #2e7d32; 13 --failed: #c62828; 14 --skipped: #4a5058; 15 --cancelled: #6a4a8a; 16 --danger: #a33; 17 } 18 19 * { box-sizing: border-box; } 20 21 body { 22 margin: 0; 23 background: var(--bg); 24 color: var(--text); 25 font: 14px/1.5 system-ui, -apple-system, Segoe UI, Roboto, sans-serif; 26 } 27 28 a { color: var(--link); text-decoration: none; } 29 a:hover { text-decoration: underline; } 30 31 code, pre, .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } 32 33 header { 34 display: flex; 35 align-items: center; 36 gap: 1.25rem; 37 padding: .7rem 1.25rem; 38 border-bottom: 1px solid var(--border); 39 background: var(--panel); 40 } 41 42 header h1 { font-size: 1rem; margin: 0; font-weight: 600; } 43 header h1 a { color: var(--text); } 44 header nav { flex: 1; display: flex; gap: 1rem; } 45 header nav a { color: var(--muted); } 46 header nav a.on { color: var(--text); border-bottom: 2px solid var(--link); } 47 header .session { display: flex; align-items: center; gap: .6rem; } 48 header .session form { margin: 0; } 49 50 .role { 51 font-size: .7rem; 52 text-transform: uppercase; 53 letter-spacing: .04em; 54 color: var(--muted); 55 border: 1px solid var(--border); 56 border-radius: .7rem; 57 padding: 0 .4rem; 58 } 59 60 main { padding: 1.25rem; max-width: 1100px; margin: 0 auto; } 61 62 h2 { font-size: 1.15rem; margin: 0 0 .75rem; } 63 h3 { font-size: .95rem; margin: 0 0 .5rem; } 64 65 .muted { color: var(--muted); } 66 .error { color: #ff8b8b; } 67 .ok { color: #7ddc8a; } 68 69 table { width: 100%; border-collapse: collapse; margin: .5rem 0; } 70 th, td { text-align: left; padding: .45rem .6rem; border-bottom: 1px solid var(--border); vertical-align: middle; } 71 th { color: var(--muted); font-weight: 500; font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; } 72 tbody tr:hover { background: #1b1f23; } 73 74 .badge { 75 display: inline-block; 76 padding: .05rem .45rem; 77 border-radius: .75rem; 78 font-size: .72rem; 79 background: var(--queued); 80 color: #fff; 81 } 82 .badge.running { background: var(--running); color: #1a1a1a; } 83 .badge.success { background: var(--success); } 84 .badge.failed { background: var(--failed); } 85 .badge.skipped { background: var(--skipped); } 86 .badge.cancelled { background: var(--cancelled); } 87 .badge.pending, .badge.queued { background: var(--queued); } 88 89 .panel { 90 background: var(--panel); 91 border: 1px solid var(--border); 92 border-radius: 6px; 93 padding: .85rem 1rem; 94 margin-bottom: 1rem; 95 } 96 .panel.narrow { max-width: 24rem; width: 100%; } 97 .panel.secret { border-color: var(--running); } 98 99 /* Centres a single panel, such as the sign in form, rather than leaving it 100 stranded against the left edge of a wide page. */ 101 .center { display: flex; justify-content: center; padding-top: 2.5rem; } 102 103 .row { display: flex; gap: 1.5rem; flex-wrap: wrap; margin-bottom: .5rem; } 104 .row > div { min-width: 7rem; } 105 .label { color: var(--muted); font-size: .72rem; display: block; text-transform: uppercase; letter-spacing: .04em; } 106 107 .stage { margin: 1rem 0; } 108 .stage h3 { color: var(--muted); font-weight: 500; font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; } 109 110 .logpane { max-height: 32rem; overflow: auto; border: 1px solid var(--border); border-radius: 6px; background: #0b0d0f; } 111 pre.log { 112 margin: 0; 113 padding: .75rem 1rem; 114 white-space: pre-wrap; 115 word-break: break-word; 116 font-size: .82rem; 117 } 118 119 form { margin: 0; } 120 .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); gap: .75rem; } 121 label { display: block; color: var(--muted); font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; } 122 123 input, select { 124 display: block; 125 width: 100%; 126 margin-top: .2rem; 127 background: #0b0d0f; 128 border: 1px solid var(--border); 129 border-radius: 4px; 130 color: var(--text); 131 padding: .35rem .5rem; 132 font-size: .9rem; 133 text-transform: none; 134 letter-spacing: normal; 135 } 136 input.wide { width: 100%; } 137 138 button { 139 background: #22262b; 140 color: var(--text); 141 border: 1px solid var(--border); 142 border-radius: 4px; 143 padding: .3rem .7rem; 144 cursor: pointer; 145 font-size: .85rem; 146 } 147 button:hover { background: #2b3036; } 148 button.danger { border-color: var(--danger); color: #ff9c9c; } 149 /* A button that has to sit on the same line as ordinary text. Inheriting 150 the font and line height is what keeps a row with actions exactly as 151 tall as a row without them; a button's own metrics are otherwise larger 152 than the surrounding text and stretch the line box. */ 153 button.link { 154 background: none; 155 border: none; 156 color: var(--link); 157 padding: 0; 158 margin: 0; 159 font: inherit; 160 line-height: inherit; 161 vertical-align: baseline; 162 } 163 button.link:hover { text-decoration: underline; background: none; } 164 button.link.danger { color: #ff9c9c; } 165 166 a.button { 167 display: inline-block; 168 background: #22262b; 169 border: 1px solid var(--border); 170 border-radius: 4px; 171 padding: .3rem .7rem; 172 color: var(--text); 173 } 174 a.button:hover { text-decoration: none; background: #2b3036; } 175 176 .actions { display: flex; gap: .5rem; align-items: center; margin-top: .75rem; flex-wrap: wrap; } 177 178 /* Actions inside a table row stay an ordinary table cell. Making them a 179 flex container would take them out of the row's baseline alignment and 180 give the row a different height from every other one. */ 181 td.row-actions { white-space: nowrap; text-align: right; } 182 td.row-actions button.link + button.link { margin-left: .9rem; } 183 184 dialog { 185 border: 1px solid var(--border); 186 border-radius: 6px; 187 background: var(--panel); 188 color: var(--text); 189 padding: 1.25rem; 190 max-width: 28rem; 191 width: 90%; 192 } 193 dialog::backdrop { background: rgba(0, 0, 0, 0.6); } 194 dialog .actions { justify-content: flex-end; margin-top: 1rem; }