mirror of
https://github.com/ohwgiles/laminar.git
synced 2024-10-27 20:34:20 +00:00
328 lines
9.1 KiB
CSS
328 lines
9.1 KiB
CSS
/* colour scheme */
|
|
:root {
|
|
--main-bg: #fff;
|
|
--main-fg: #333;
|
|
--nav-bg: #2F3340;
|
|
--nav-bg-darker: #292b33;
|
|
--nav-fg: #d0d0d0;
|
|
--nav-fg-light: #fafafa;
|
|
--icon-enabled: #d8cb83;
|
|
--success: #74af77;
|
|
--failure: #883d3d;
|
|
--running: #4786ab;
|
|
--warning: #de9a34;
|
|
--link-fg: #2f4579;
|
|
--alt-row-bg: #fafafa;
|
|
--border-grey: #d0d0d0;
|
|
}
|
|
|
|
/* basic resets */
|
|
html { box-sizing: border-box; }
|
|
*, *:before, *:after { box-sizing: inherit; }
|
|
body, h1, h2, h3, h4, h5, h6, p, ol, ul {
|
|
margin: 0;
|
|
padding: 0;
|
|
font-weight: normal;
|
|
}
|
|
ol, ul { list-style: none; }
|
|
body, html { height: 100%; }
|
|
body {
|
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
font-size: 16px;
|
|
color: var(--main-fg);
|
|
}
|
|
|
|
/* main header bar */
|
|
#nav-top { background-color: var(--nav-bg); }
|
|
#nav-top-links { background-color: var(--nav-bg-darker); }
|
|
#nav-top a { color: var(--nav-fg); }
|
|
#nav-top a:hover { color: white; text-decoration: none; }
|
|
|
|
.version {
|
|
align-self: center;
|
|
font-size: x-small;
|
|
color: rgba(255,255,255,0.3);
|
|
}
|
|
|
|
/* navbar svg icons (enable notifications) */
|
|
.nav-icon { display: inherit; }
|
|
.nav-icon svg { fill: var(--nav-fg); stroke: #000; }
|
|
.nav-icon:hover { cursor: pointer; }
|
|
.nav-icon:hover svg { fill: var(--nav-fg-light); }
|
|
.nav-icon.active svg { fill: var(--icon-enabled); }
|
|
|
|
/* anchors */
|
|
a { color: var(--link-fg); text-decoration: none; }
|
|
a:visited { color: var(--link-fg); }
|
|
a:active { color: var(--link-fg); }
|
|
a:hover { text-decoration: underline; }
|
|
|
|
/* charts */
|
|
canvas {
|
|
width: 100% !important;
|
|
max-width: 800px;
|
|
height: auto !important;
|
|
}
|
|
|
|
#popup-connecting {
|
|
position: fixed;
|
|
background: white;
|
|
border: 1px solid #ddd;
|
|
bottom: 10px;
|
|
right: 10px;
|
|
padding: 20px;
|
|
}
|
|
|
|
/* status icons */
|
|
.status {
|
|
display: inline-block;
|
|
width: 1em;
|
|
vertical-align: middle;
|
|
margin-top: -2px; /* pixel-pushing */
|
|
}
|
|
svg.success path { fill: var(--success); }
|
|
svg.failed path { fill: var(--failure); }
|
|
svg.running circle { stroke: var(--running); }
|
|
svg.queued circle { fill: var(--nav-fg); }
|
|
svg.queued path { stroke: white; }
|
|
|
|
/* sort indicators */
|
|
a.sort {
|
|
position: relative;
|
|
margin-left: 7px;
|
|
}
|
|
a.sort:before, a.sort:after {
|
|
border: 4px solid transparent;
|
|
content: "";
|
|
position: absolute;
|
|
display: block;
|
|
height: 0;
|
|
width: 0;
|
|
right: 0;
|
|
top: 50%;
|
|
}
|
|
a.sort:before {
|
|
border-bottom-color: var(--border-grey);
|
|
margin-top: -9px;
|
|
}
|
|
a.sort:after {
|
|
border-top-color: var(--border-grey);
|
|
margin-top: 1px;
|
|
}
|
|
a.sort.dsc:after { border-top-color: var(--main-fg); }
|
|
a.sort.asc:before { border-bottom-color: var(--main-fg); }
|
|
a.sort:hover { text-decoration: none; cursor:pointer; }
|
|
a.sort:not(.asc):hover:before { border-bottom-color: var(--main-fg); }
|
|
a.sort:not(.dsc):hover:after { border-top-color: var(--main-fg); }
|
|
|
|
/* job group tabs */
|
|
a.active { color: var(--main-fg); }
|
|
a.active:hover { text-decoration: none; }
|
|
|
|
/* run console ansi colors (based on base16-default-dark and base16-bright) */
|
|
:root {
|
|
--ansi-black: #181818;
|
|
--ansi-red: #ff0000;
|
|
--ansi-green: #a1b56c;
|
|
--ansi-yellow: #f7ca88;
|
|
--ansi-blue: #7cafc2;
|
|
--ansi-magenta: #ba8baf;
|
|
--ansi-cyan: #86c1b9;
|
|
--ansi-white: #d8d8d8;
|
|
--ansi-brightblack: #000000;
|
|
--ansi-brightred: #fb0120;
|
|
--ansi-brightgreen: #a1c659;
|
|
--ansi-brightyellow: #fda331;
|
|
--ansi-brightblue: #6fb3d2;
|
|
--ansi-brightmagenta: #d381c3;
|
|
--ansi-brightcyan: #76c7b7;
|
|
--ansi-brightwhite: #e0e0e0;
|
|
}
|
|
.ansi-black-fg { color: var(--ansi-black); } .ansi-black-bg { background-color: var(--ansi-black); }
|
|
.ansi-red-fg { color: var(--ansi-red); } .ansi-red-bg { background-color: var(--ansi-red); }
|
|
.ansi-green-fg { color: var(--ansi-green); } .ansi-green-bg { background-color: var(--ansi-green); }
|
|
.ansi-yellow-fg { color: var(--ansi-yellow); } .ansi-yellow-bg { background-color: var(--ansi-yellow); }
|
|
.ansi-blue-fg { color: var(--ansi-blue); } .ansi-blue-bg { background-color: var(--ansi-blue); }
|
|
.ansi-magenta-fg { color: var(--ansi-magenta); } .ansi-magenta-bg { background-color: var(--ansi-magenta); }
|
|
.ansi-cyan-fg { color: var(--ansi-cyan); } .ansi-cyan-bg { background-color: var(--ansi-cyan); }
|
|
.ansi-white-fg { color: var(--ansi-white); } .ansi-white-bg { background-color: var(--ansi-white); }
|
|
.ansi-bright-black-fg { color: var(--ansi-brightblack); } .ansi-bright-black-bg { background-color: var(--ansi-brightblack); }
|
|
.ansi-bright-red-fg { color: var(--ansi-brightred); } .ansi-bright-red-bg { background-color: var(--ansi-brightred); }
|
|
.ansi-bright-green-fg { color: var(--ansi-brightgreen); } .ansi-bright-green-bg { background-color: var(--ansi-brightgreen); }
|
|
.ansi-bright-yellow-fg { color: var(--ansi-brightyellow); } .ansi-bright-yellow-bg { background-color: var(--ansi-brightyellow); }
|
|
.ansi-bright-blue-fg { color: var(--ansi-brightblue); } .ansi-bright-blue-bg { background-color: var(--ansi-brightblue); }
|
|
.ansi-bright-magenta-fg { color: var(--ansi-brightmagenta); } .ansi-bright-magenta-bg { background-color: var(--ansi-brightmagenta); }
|
|
.ansi-bright-cyan-fg { color: var(--ansi-brightcyan); } .ansi-bright-cyan-bg { background-color: var(--ansi-brightcyan); }
|
|
.ansi-bright-white-fg { color: var(--ansi-brightwhite); } .ansi-bright-white-bg { background-color: var(--ansi-brightwhite); }
|
|
|
|
/* run console */
|
|
.console-log { padding: 15px; background-color: var(--ansi-black); }
|
|
.console-log code { white-space: pre-wrap; color: var(--ansi-white); }
|
|
.console-log a { color: var(--ansi-brightwhite); }
|
|
|
|
/* text input (job filtering) */
|
|
input { padding: 5px 8px; }
|
|
|
|
/* description list (run detail) */
|
|
dl { display: grid; grid-template-columns: auto 1fr; }
|
|
dt { text-align: right; font-weight: bold; min-width: 85px; }
|
|
dt,dd { line-height: 2; }
|
|
|
|
/* tables */
|
|
table { border-spacing: 0; width: 100%; }
|
|
th { text-align: left; border-bottom: 1px solid var(--border-grey); }
|
|
td, th { padding: 8px; }
|
|
table.striped td { border-top: 1px solid var(--border-grey); }
|
|
table.striped tr:nth-child(even) { background-color: var(--alt-row-bg); }
|
|
td:first-child, th:first-child { padding-left: 15px; }
|
|
td:last-child, th:last-child { padding-right: 15px; }
|
|
|
|
/* next/prev navigation buttons */
|
|
button {
|
|
border: 1px solid var(--border-grey);
|
|
background-color: var(--alt-row-bg);
|
|
padding: 6px;
|
|
min-width: 29px;
|
|
}
|
|
button[disabled] { cursor: not-allowed; color: var(--border-grey); }
|
|
button:not([disabled]) { cursor: pointer; color: var(--main-fg); }
|
|
|
|
/* progress bar */
|
|
.progress {
|
|
width: 100%;
|
|
height: 8px;
|
|
border: 1px solid;
|
|
border-radius: 4px;
|
|
overflow: hidden;
|
|
border-color: var(--border-grey);
|
|
background-color: var(--alt-row-bg);
|
|
}
|
|
.progress-bar {
|
|
height: 100%;
|
|
background-color: var(--running);
|
|
background-image: linear-gradient(45deg, transparent 35%, rgba(255,255,255,0.18) 35% 65%, transparent 65%);
|
|
background-size: 1rem;
|
|
transition: width .6s linear;
|
|
}
|
|
.progress-bar.overtime { background-color: var(--warning); }
|
|
.progress-bar.indeterminate {
|
|
animation: animate-stripes 1s linear infinite;
|
|
}
|
|
@keyframes animate-stripes {
|
|
from { background-position: 1rem 0; } to { background-position: 0 0; }
|
|
}
|
|
|
|
/* wallboard */
|
|
.wallboard {
|
|
display: flex;
|
|
flex-wrap: wrap-reverse;
|
|
flex-direction: row-reverse;
|
|
gap: 20px;
|
|
padding: 20px;
|
|
position: fixed;
|
|
height: 100%;
|
|
width: 100%;
|
|
overflow: auto;
|
|
background-color: #000
|
|
}
|
|
.wallboard > div {
|
|
padding: 30px;
|
|
flex-grow: 1;
|
|
background-color: var(--failure);
|
|
color: var(--nav-fg-light);
|
|
}
|
|
.wallboard > div:hover {
|
|
cursor: pointer;
|
|
}
|
|
.wallboard > div[data-result="running"] {
|
|
animation: wallboard-bg-fade 2s ease infinite;
|
|
}
|
|
@keyframes wallboard-bg-fade {
|
|
from { background-color: #4786ab; }
|
|
50% { background-color: #446597; }
|
|
to { background-color: #4786ab; }
|
|
}
|
|
.wallboard > div[data-result="success"] {
|
|
background-color: var(--success);
|
|
color: var(--main-fg);
|
|
}
|
|
|
|
/* connecting overlay */
|
|
#connecting-overlay {
|
|
position: fixed;
|
|
top: 0; right: 0; bottom: 0; left: 0;
|
|
display: grid;
|
|
align-content: end; justify-content: end;
|
|
color: var(--nav-fg-light);
|
|
font-size: 18px;
|
|
padding: 30px;
|
|
visibility: hidden;
|
|
background-color: rgba(0,0,0,0.75);
|
|
opacity: 0;
|
|
transition: opacity 0.5s ease, visibility 0s 0.5s;
|
|
}
|
|
#connecting-overlay.shown {
|
|
visibility: visible;
|
|
opacity: 1;
|
|
transition: opacity 0.5s ease 2s;
|
|
}
|
|
#connecting-overlay > div { opacity: 1; }
|
|
|
|
/* responsive layout */
|
|
#page-home-main {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr;
|
|
}
|
|
@media (max-width: 865px) {
|
|
#page-home-main {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.vp-sm-hide { display: none; }
|
|
}
|
|
#page-home-stats {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr 1fr;
|
|
padding: 15px;
|
|
gap: 15px;
|
|
max-width: 1600px;
|
|
margin: auto;
|
|
text-align: center;
|
|
}
|
|
@media (max-width: 650px) {
|
|
#page-home-stats {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
#page-home-plots {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
padding: 5px;
|
|
gap: 5px;
|
|
max-width: 1600px;
|
|
margin: auto;
|
|
}
|
|
@media (max-width: 1095px) {
|
|
#page-home-plots {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
#page-job-main {
|
|
display: grid;
|
|
grid-template: auto 1fr / minmax(550px, 1fr) 1fr;
|
|
}
|
|
@media (max-width: 965px) {
|
|
#page-job-main {
|
|
grid-template: auto auto 1fr / 1fr;
|
|
}
|
|
}
|
|
#page-run-detail {
|
|
display: grid;
|
|
grid-template-columns: minmax(400px, auto) 1fr;
|
|
gap: 5px;
|
|
}
|
|
@media (max-width: 780px) {
|
|
#page-run-detail {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|