summaryrefslogtreecommitdiff
path: root/web/style.css
diff options
context:
space:
mode:
Diffstat (limited to 'web/style.css')
-rw-r--r--web/style.css477
1 files changed, 474 insertions, 3 deletions
diff --git a/web/style.css b/web/style.css
index e7d1de4..d3b01d0 100644
--- a/web/style.css
+++ b/web/style.css
@@ -10,9 +10,9 @@
--state-budget-exceeded: #fb923c;
--state-blocked: #818cf8;
- --bg: #0f172a;
- --surface: #1e293b;
- --border: #334155;
+ --bg: rgba(15, 23, 42, 0.8);
+ --surface: rgba(30, 41, 59, 0.75);
+ --border: rgba(51, 65, 85, 0.7);
--text: #e2e8f0;
--text-muted: #94a3b8;
--accent: #38bdf8;
@@ -32,6 +32,12 @@ body {
min-height: 100dvh;
}
+body.bg-body {
+ background-image: linear-gradient(rgba(2, 6, 23, 0.65), rgba(2, 6, 23, 0.65)), var(--bg-url, none);
+ background-size: cover;
+ background-position: center;
+}
+
/* Header */
header {
background: var(--surface);
@@ -264,6 +270,17 @@ main {
flex-wrap: wrap;
}
+.task-project {
+ font-size: 0.72rem;
+ font-weight: 600;
+ color: var(--text-muted);
+ background: var(--bg-elevated, #2a2a2a);
+ border: 1px solid var(--border, #444);
+ border-radius: 3px;
+ padding: 0 0.35rem;
+ letter-spacing: 0.02em;
+}
+
.task-description {
font-size: 0.82rem;
color: var(--text-muted);
@@ -272,6 +289,15 @@ main {
text-overflow: ellipsis;
}
+.task-error-msg {
+ font-size: 0.78rem;
+ color: var(--state-failed);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin-top: 2px;
+}
+
/* Run button */
.task-card-footer {
display: flex;
@@ -863,6 +889,27 @@ dialog label select:focus {
white-space: nowrap;
}
+.deployment-badge {
+ display: inline-block;
+ font-size: 0.72rem;
+ font-weight: 600;
+ padding: 0.15em 0.45em;
+ border-radius: 0.25rem;
+ white-space: nowrap;
+}
+
+.deployment-badge--deployed {
+ background: color-mix(in srgb, var(--success, #22c55e) 15%, transparent);
+ color: var(--success, #16a34a);
+ border: 1px solid color-mix(in srgb, var(--success, #22c55e) 35%, transparent);
+}
+
+.deployment-badge--pending {
+ background: color-mix(in srgb, var(--warn, #f59e0b) 15%, transparent);
+ color: var(--warn, #b45309);
+ border: 1px solid color-mix(in srgb, var(--warn, #f59e0b) 35%, transparent);
+}
+
.btn-view-logs {
font-size: 0.72rem;
font-weight: 600;
@@ -1158,6 +1205,36 @@ dialog label select:focus {
word-break: break-word;
}
+.ready-completed-history {
+ margin-top: 2rem;
+ border-top: 1px solid var(--border);
+ padding-top: 1rem;
+}
+
+.ready-completed-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ color: var(--text-muted);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ margin-bottom: 0.75rem;
+}
+
+.task-checker-report {
+ margin: 0.5rem 0;
+ padding: 0.5rem 0.75rem;
+ background: var(--warning-bg, rgba(255, 180, 0, 0.12));
+ border-left: 3px solid var(--warning, #f0a500);
+ border-radius: 4px;
+ font-size: 0.8rem;
+ color: var(--text);
+}
+
+.task-checker-report-label {
+ font-weight: 600;
+ margin-right: 0.4rem;
+}
+
.running-history {
margin-top: 1.5rem;
overflow-x: auto;
@@ -1518,3 +1595,397 @@ dialog label select:focus {
width: 80px;
flex-shrink: 0;
}
+
+/* ── Error category badge ───────────────────────────────────────────────── */
+.stats-err-badge {
+ display: inline-block;
+ padding: 0.15rem 0.45rem;
+ border-radius: 4px;
+ font-size: 0.72rem;
+ font-weight: 600;
+ color: #fff;
+ white-space: nowrap;
+}
+
+.stats-err-cat {
+ border-top: 3px solid var(--cat-color, var(--state-failed));
+}
+
+.stats-err-msg {
+ font-size: 0.75rem;
+ color: var(--text-muted);
+ max-width: 360px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+/* ── Throughput chart ───────────────────────────────────────────────────── */
+.stats-tp-chart {
+ display: flex;
+ align-items: flex-end;
+ gap: 2px;
+ height: 120px;
+ margin: 0.75rem 0 0.25rem;
+ border-bottom: 1px solid var(--border);
+}
+
+.stats-tp-col {
+ flex: 1;
+ display: flex;
+ align-items: flex-end;
+ height: 100%;
+ min-width: 0;
+}
+
+.stats-tp-bar {
+ width: 100%;
+ border-radius: 2px 2px 0 0;
+ min-height: 2px;
+}
+
+.stats-tp-legend {
+ display: flex;
+ gap: 1rem;
+ font-size: 0.75rem;
+ color: var(--text-muted);
+ margin-top: 0.4rem;
+}
+
+.stats-tp-legend-item {
+ display: flex;
+ align-items: center;
+ gap: 0.3rem;
+}
+
+.stats-tp-swatch {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ border-radius: 2px;
+ flex-shrink: 0;
+}
+
+/* ── Billing chart ──────────────────────────────────────────────────────── */
+.stats-bill-chart {
+ display: flex;
+ align-items: flex-end;
+ gap: 4px;
+ height: 100px;
+ margin: 0.75rem 0 0;
+ border-bottom: 1px solid var(--border);
+}
+
+.stats-bill-col {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-end;
+ height: 100%;
+ min-width: 0;
+}
+
+.stats-bill-bar {
+ width: 100%;
+ background: var(--state-queued);
+ border-radius: 3px 3px 0 0;
+ min-height: 2px;
+}
+
+.stats-bill-day-label {
+ font-size: 0.65rem;
+ color: var(--text-muted);
+ margin-top: 0.25rem;
+ text-align: center;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 100%;
+}
+
+/* ── Execution detail table ─────────────────────────────────────────────── */
+.stats-exec-table-wrap {
+ margin-top: 1rem;
+}
+
+.stats-exec-table {
+ width: 100%;
+ border-collapse: collapse;
+ font-size: 0.8rem;
+}
+
+.stats-exec-table th,
+.stats-exec-table td {
+ padding: 0.35rem 0.5rem;
+ text-align: left;
+ border-bottom: 1px solid var(--border);
+}
+
+.stats-exec-table th {
+ color: var(--text-muted);
+ font-weight: 500;
+}
+
+.stats-exec-name {
+ max-width: 220px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ display: block;
+}
+
+/* ── Agent Status ───────────────────────────────────────────────────────── */
+.stats-agent-cards {
+ display: flex;
+ gap: 0.75rem;
+ flex-wrap: wrap;
+ margin-bottom: 1.25rem;
+}
+
+.stats-agent-card {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 0.75rem 1rem;
+ border-radius: 8px;
+ border: 1px solid var(--border);
+ min-width: 160px;
+}
+
+.stats-agent-card.agent-available {
+ border-color: var(--state-completed);
+ background: color-mix(in srgb, var(--state-completed) 8%, transparent);
+}
+
+.stats-agent-card.agent-rate-limited {
+ border-color: var(--state-failed);
+ background: color-mix(in srgb, var(--state-failed) 8%, transparent);
+}
+
+.stats-agent-card.agent-drained {
+ border-color: var(--state-cancelled);
+ background: color-mix(in srgb, var(--state-cancelled) 8%, transparent);
+}
+
+.stats-agent-name {
+ font-weight: 600;
+ font-size: 0.9rem;
+ text-transform: capitalize;
+}
+
+.stats-agent-status {
+ font-size: 0.75rem;
+ color: var(--text-muted);
+}
+
+/* ── Availability Timeline ─────────────────────────────────────────────── */
+.stats-timeline-row {
+ margin-bottom: 0.75rem;
+}
+
+.stats-timeline-label {
+ display: block;
+ font-size: 0.78rem;
+ color: var(--text-muted);
+ margin-bottom: 0.2rem;
+ text-transform: capitalize;
+}
+
+.stats-timeline-track {
+ display: flex;
+ height: 18px;
+ border-radius: 4px;
+ overflow: hidden;
+ background: var(--bg-card);
+ width: 100%;
+}
+
+.stats-timeline-seg {
+ height: 100%;
+ transition: opacity 0.1s;
+}
+
+.stats-timeline-seg:hover {
+ opacity: 0.8;
+}
+
+.seg-available {
+ background: var(--state-completed);
+}
+
+.seg-limited {
+ background: var(--state-failed);
+}
+
+.stats-timeline-timelabels {
+ display: flex;
+ justify-content: space-between;
+ font-size: 0.68rem;
+ color: var(--text-muted);
+ margin-top: 0.15rem;
+}
+
+/* ── Stories ───────────────────────────────────────────────────────────────── */
+
+[data-panel="stories"] {
+ padding: 1rem;
+}
+
+.stories-toolbar {
+ margin-bottom: 1rem;
+}
+
+.stories-list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+}
+
+.story-card {
+ background: var(--surface);
+ border: 1px solid var(--border);
+ border-radius: 6px;
+ padding: 0.875rem 1rem;
+ cursor: pointer;
+ transition: border-color 0.15s, background 0.15s;
+}
+
+.story-card:hover {
+ border-color: var(--accent);
+ background: var(--surface-hover, var(--surface));
+}
+
+.story-card-header {
+ display: flex;
+ align-items: center;
+ gap: 0.625rem;
+ margin-bottom: 0.375rem;
+}
+
+.story-name {
+ font-weight: 600;
+ flex: 1;
+}
+
+.story-status-badge {
+ font-size: 0.72rem;
+ font-weight: 600;
+ padding: 0.15em 0.55em;
+ border-radius: 3px;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ background: var(--state-pending);
+ color: #0f172a;
+}
+
+.story-status-badge[data-status="PENDING"] { background: var(--state-pending); }
+.story-status-badge[data-status="IN_PROGRESS"] { background: var(--state-running); }
+.story-status-badge[data-status="SHIPPABLE"] { background: var(--state-completed); }
+.story-status-badge[data-status="DEPLOYED"] { background: #60a5fa; }
+.story-status-badge[data-status="VALIDATING"] { background: #c084fc; }
+.story-status-badge[data-status="REVIEW_READY"] { background: var(--state-completed); }
+.story-status-badge[data-status="NEEDS_FIX"] { background: var(--state-failed); color: #fff; }
+
+.story-meta {
+ display: flex;
+ gap: 1rem;
+ font-size: 0.8rem;
+ color: var(--text-muted);
+}
+
+.story-branch {
+ font-family: var(--font-mono, monospace);
+}
+
+/* Story modals */
+.story-modal-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 1rem;
+}
+
+.story-modal-header h2 {
+ margin: 0;
+}
+
+.story-modal-body {
+ display: flex;
+ flex-direction: column;
+ gap: 0.875rem;
+}
+
+#story-plan-area {
+ background: var(--code-bg, #1e293b);
+ border: 1px solid var(--border);
+ border-radius: 4px;
+ padding: 0.875rem;
+ font-size: 0.85rem;
+}
+
+.story-plan-name {
+ font-weight: 600;
+ margin: 0 0 0.25rem;
+}
+
+.story-plan-branch {
+ font-family: var(--font-mono, monospace);
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ margin: 0 0 0.75rem;
+}
+
+.story-plan-section {
+ font-weight: 600;
+ margin: 0.75rem 0 0.25rem;
+}
+
+.story-plan-tasks {
+ margin: 0;
+ padding-left: 1.25rem;
+}
+
+.story-plan-tasks li {
+ margin-bottom: 0.25rem;
+}
+
+.story-plan-tasks ul {
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ margin: 0.2rem 0 0;
+ padding-left: 1rem;
+}
+
+.story-detail-body {
+ padding: 0.25rem 0;
+}
+
+.story-detail-tasks {
+ margin-top: 1rem;
+ padding-top: 0.75rem;
+ border-top: 1px solid var(--border);
+}
+
+.story-detail-task-list {
+ margin: 0.5rem 0 0;
+ padding-left: 1.25rem;
+ list-style: decimal;
+}
+
+.story-detail-task-list > li {
+ padding: 0.2rem 0;
+ font-size: 0.9rem;
+}
+
+.story-detail-subtask-list {
+ margin: 0.25rem 0 0.25rem 0.5rem;
+ padding-left: 1rem;
+ list-style: none;
+}
+
+.story-detail-subtask-list li {
+ font-size: 0.85rem;
+ opacity: 0.85;
+ padding: 0.1rem 0;
+}