2026-06-30 14:01:38 +02:00

335 lines
5.6 KiB
CSS

:root {
font-family: var(--font-family, sans-serif);
font-size: 12px;
}
body {
margin: 0;
}
.wrapper {
display: flex;
flex-direction: column;
gap: var(--spacing-12, 12px);
padding: var(--spacing-12, 12px);
min-height: 100vh;
box-sizing: border-box;
}
.header {
display: flex;
flex-direction: column;
gap: var(--spacing-4, 4px);
}
.title {
font-size: 14px;
margin: 0;
color: var(--foreground-primary);
}
.summary {
margin: 0;
color: var(--foreground-secondary);
}
.toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--spacing-8, 8px);
}
.toolbar .reload {
margin-inline-start: auto;
}
.toolbar-status {
flex-basis: 100%;
color: var(--foreground-secondary);
}
.groups {
display: flex;
flex-direction: column;
gap: var(--spacing-8, 8px);
}
.group {
border-radius: var(--spacing-8, 8px);
background-color: var(--background-secondary);
}
.group-summary {
display: flex;
align-items: center;
gap: var(--spacing-8, 8px);
padding: var(--spacing-8, 8px);
cursor: pointer;
user-select: none;
}
.group-name {
color: var(--foreground-primary);
}
.group-counts {
margin-inline-start: auto;
font-variant-numeric: tabular-nums;
}
.count-pass {
color: #2d9d78;
}
.count-fail {
color: #e65244;
}
.count-sep,
.count-total {
color: var(--foreground-secondary);
}
.icon-button {
display: inline-flex;
align-items: center;
justify-content: center;
padding: var(--spacing-4, 4px);
}
.icon {
display: block;
}
.reload.is-loading .icon {
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
/* Small rotating ring reused wherever something is in progress. */
.spinner {
display: inline-block;
flex: 0 0 auto;
width: 10px;
height: 10px;
border: 1.5px solid var(--background-quaternary);
border-top-color: #6911d4;
border-radius: 50%;
animation: spin 0.7s linear infinite;
}
.running-badge {
display: inline-flex;
align-items: center;
gap: var(--spacing-4, 4px);
color: #6911d4;
}
.group .test-list {
padding: 0 var(--spacing-8, 8px) var(--spacing-8, 8px);
}
.test-list {
display: flex;
flex-direction: column;
gap: var(--spacing-4, 4px);
list-style: none;
margin: 0;
padding: 0;
}
.test-row {
display: grid;
grid-template-columns: 1fr auto auto;
align-items: center;
gap: var(--spacing-8, 8px);
padding: var(--spacing-8, 8px);
border-radius: var(--spacing-8, 8px);
background-color: var(--background-tertiary);
}
.test-main {
display: flex;
align-items: center;
gap: var(--spacing-8, 8px);
cursor: pointer;
min-width: 0;
}
.test-name {
color: var(--foreground-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.test-duration {
display: inline-flex;
align-items: center;
gap: var(--spacing-4, 4px);
color: var(--foreground-secondary);
font-variant-numeric: tabular-nums;
}
.test-duration.running {
color: #6911d4;
}
/* Tint the whole row while its test runs so it stands out at a glance. */
.test-row.status-running {
background-color: color-mix(in srgb, #6911d4 12%, var(--background-tertiary));
}
.status-dot {
flex: 0 0 auto;
width: 8px;
height: 8px;
border-radius: 50%;
background-color: var(--foreground-secondary);
}
.dot-pending {
background-color: #8f9da3;
}
.dot-running {
background-color: #6911d4;
animation: pulse 1s ease-in-out infinite;
}
.dot-pass {
background-color: #2d9d78;
}
.dot-fail {
background-color: #e65244;
}
@keyframes pulse {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0.3;
}
}
.test-error {
grid-column: 1 / -1;
margin: 0;
padding: var(--spacing-8, 8px);
border-radius: var(--spacing-4, 4px);
background-color: var(--background-primary);
color: #e65244;
white-space: pre-wrap;
word-break: break-word;
font-family: monospace;
}
.coverage {
display: flex;
flex-direction: column;
gap: var(--spacing-8, 8px);
border-top: 1px solid var(--background-quaternary);
padding-top: var(--spacing-8, 8px);
color: var(--foreground-secondary);
}
.coverage-empty {
margin: 0;
}
.coverage-header {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.coverage-title {
color: var(--foreground-primary);
font-weight: 600;
}
.coverage-value {
color: var(--foreground-secondary);
font-variant-numeric: tabular-nums;
}
.progress-track {
width: 100%;
height: 8px;
border-radius: 999px;
background-color: var(--background-quaternary);
overflow: hidden;
}
.progress-track {
position: relative;
}
.progress-fill {
position: absolute;
inset-block: 0;
inset-inline-start: 0;
height: 100%;
border-radius: inherit;
background-color: #2d9d78;
transition: width 0.3s ease;
}
/* The static segment sits behind the recorded fill, in a distinct blue. */
.progress-fill.static {
background-color: #4a8fe7;
}
.coverage summary {
cursor: pointer;
color: var(--foreground-primary);
}
.coverage-body {
display: flex;
flex-direction: column;
gap: var(--spacing-8, 8px);
margin-top: var(--spacing-8, 8px);
}
.coverage-iface {
display: flex;
flex-direction: column;
gap: var(--spacing-4, 4px);
}
.coverage-iface strong {
color: var(--foreground-primary);
}
.coverage-members {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-4, 4px);
}
.coverage-member {
padding: 1px 6px;
border-radius: var(--spacing-4, 4px);
background-color: var(--background-tertiary);
word-break: break-word;
}
.coverage-member.covered {
color: #2d9d78;
}
.coverage-member.static {
color: #4a8fe7;
}
.coverage-member.uncovered {
color: var(--foreground-secondary);
}