summaryrefslogtreecommitdiff
path: root/web/style.css
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-03-06 23:55:07 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-03-06 23:55:07 +0000
commitfd42a54d96fcd3342941caaeb61a4b0d5d3f1b4f (patch)
tree0b9ef3b7f0ac3981aa310435d014c9f5e21089d4 /web/style.css
parent7d4890cde802974b94db24071f63e7733c3670fd (diff)
recover: restore untracked work from recovery branch (no Gemini changes)
Recovered files with no Claude→Agent contamination: - docs/adr/002-task-state-machine.md - internal/api/logs.go/logs_test.go: task-level log streaming endpoint - internal/api/validate.go/validate_test.go: POST /api/tasks/validate - internal/api/server_test.go, storage/db_test.go: expanded test coverage - scripts/reset-failed-tasks, reset-running-tasks - web/app.js, index.html, style.css: frontend improvements - web/test/: active-tasks-tab, delete-button, filter-tabs, sort-tasks tests Manually applied from server.go diff (skipping Claude→Agent rename): - taskLogStore field + validateCmdPath field - DELETE /api/tasks/{id} route + handleDeleteTask - GET /api/tasks/{id}/logs/stream route - POST /api/tasks/{id}/resume route + handleResumeTimedOutTask - handleCancelTask: allow cancelling PENDING/QUEUED tasks directly Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'web/style.css')
-rw-r--r--web/style.css166
1 files changed, 142 insertions, 24 deletions
diff --git a/web/style.css b/web/style.css
index 91466ee..106ae04 100644
--- a/web/style.css
+++ b/web/style.css
@@ -115,10 +115,39 @@ main {
padding: 0.5rem 0;
margin-bottom: 0.75rem;
border-bottom: 1px solid var(--border);
+ gap: 0;
+}
+
+.filter-tab {
+ font-size: 0.78rem;
+ font-weight: 600;
+ padding: 0.3em 0.75em;
+ border: none;
+ border-bottom: 2px solid transparent;
+ background: transparent;
+ color: var(--text-muted);
+ cursor: pointer;
+ transition: color 0.15s, border-color 0.15s;
+ margin-bottom: -1px;
+}
+
+.filter-tab:hover {
+ color: var(--text);
+}
+
+.filter-tab.active {
+ color: var(--accent);
+ border-bottom-color: var(--accent);
+}
+
+/* Spacer to push remaining toolbar items to the right */
+.task-list-toolbar .filter-tab:last-of-type {
+ margin-right: auto;
}
/* Task list */
-.task-list {
+.task-list,
+.active-task-list {
display: flex;
flex-direction: column;
gap: 0.75rem;
@@ -343,29 +372,6 @@ main {
color: var(--state-failed);
}
-.hidden-tasks-info {
- font-size: 0.78rem;
- color: var(--text-muted);
- text-align: center;
- padding: 0.5rem 0;
- cursor: pointer;
- background: transparent;
- border: none;
- width: 100%;
-}
-
-.hidden-tasks-info:hover {
- color: var(--text);
-}
-
-.hidden-tasks-fold {
- display: flex;
- flex-direction: column;
- gap: 0.75rem;
- opacity: 0.6;
- margin-top: 0.5rem;
-}
-
/* Primary button */
.btn-primary {
font-size: 0.85rem;
@@ -1009,6 +1015,11 @@ dialog label select:focus {
margin-top: 8px;
}
+.log-error {
+ color: #f87171;
+ font-style: italic;
+}
+
/* ── Validate section ────────────────────────────────────────────────────── */
.validate-section {
@@ -1045,3 +1056,110 @@ dialog label select:focus {
.validate-suggestion {
color: #94a3b8;
}
+
+/* ── Task delete button ──────────────────────────────────────────────────── */
+
+.task-card {
+ position: relative;
+}
+
+.btn-delete-task {
+ position: absolute;
+ top: 6px;
+ right: 6px;
+ background: transparent;
+ border: none;
+ color: #64748b;
+ font-size: 0.75rem;
+ line-height: 1;
+ padding: 2px 5px;
+ border-radius: 3px;
+ cursor: pointer;
+ opacity: 0;
+ transition: opacity 0.15s, background 0.15s, color 0.15s;
+}
+
+.task-card:hover .btn-delete-task {
+ opacity: 1;
+}
+
+.btn-delete-task:hover {
+ background: var(--state-failed, #ef4444);
+ color: #fff;
+}
+
+/* ── Inline task editor ─────────────────────────────────────────────────────── */
+
+.task-card--editable:hover {
+ background: rgba(56, 189, 248, 0.04);
+}
+
+.task-inline-edit {
+ margin-top: 0.75rem;
+ padding-top: 0.75rem;
+ border-top: 1px solid var(--border);
+}
+
+.task-inline-edit label {
+ display: block;
+ font-size: 0.85rem;
+ color: var(--text-muted);
+ margin-bottom: 0.625rem;
+}
+
+.task-inline-edit label input,
+.task-inline-edit label textarea,
+.task-inline-edit label select {
+ display: block;
+ width: 100%;
+ margin-top: 4px;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 0.375rem;
+ color: var(--text);
+ padding: 0.4em 0.6em;
+ font-size: 0.9rem;
+ font-family: inherit;
+}
+
+.task-inline-edit label input:focus,
+.task-inline-edit label textarea:focus,
+.task-inline-edit label select:focus {
+ outline: 2px solid var(--accent);
+ outline-offset: 1px;
+}
+
+.inline-edit-actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: 0.5rem;
+ margin-top: 0.75rem;
+}
+
+.inline-edit-actions button[type="button"]:not(.btn-primary) {
+ font-size: 0.85rem;
+ padding: 0.4em 1em;
+ border-radius: 0.375rem;
+ border: 1px solid var(--border);
+ background: transparent;
+ color: var(--text-muted);
+ cursor: pointer;
+}
+
+.inline-edit-actions button[type="button"]:not(.btn-primary):hover {
+ background: var(--border);
+ color: var(--text);
+}
+
+.inline-edit-error {
+ color: var(--state-failed);
+ font-size: 0.82rem;
+ margin-top: 0.5rem;
+}
+
+.inline-edit-success {
+ color: var(--state-completed);
+ font-size: 0.82rem;
+ margin-top: 0.25rem;
+ text-align: right;
+}