diff options
Diffstat (limited to 'web/style.css')
| -rw-r--r-- | web/style.css | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/web/style.css b/web/style.css new file mode 100644 index 0000000..d868fdf --- /dev/null +++ b/web/style.css @@ -0,0 +1,172 @@ +/* Design tokens */ +:root { + --state-pending: #94a3b8; + --state-queued: #60a5fa; + --state-running: #f59e0b; + --state-completed: #34d399; + --state-failed: #f87171; + --state-timed-out: #c084fc; + --state-cancelled: #9ca3af; + --state-budget-exceeded: #fb923c; + + --bg: #0f172a; + --surface: #1e293b; + --border: #334155; + --text: #e2e8f0; + --text-muted: #94a3b8; + --accent: #38bdf8; +} + +/* Reset */ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: system-ui, -apple-system, sans-serif; + background: var(--bg); + color: var(--text); + min-height: 100dvh; +} + +/* Header */ +header { + background: var(--surface); + border-bottom: 1px solid var(--border); + padding: 1rem; + position: sticky; + top: 0; + z-index: 10; +} + +header h1 { + font-size: 1.25rem; + font-weight: 700; + color: var(--accent); + letter-spacing: -0.01em; + max-width: 640px; + margin: 0 auto; +} + +/* Main layout */ +main { + max-width: 640px; + margin: 0 auto; + padding: 1rem; +} + +/* Task list */ +.task-list { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +#loading { + color: var(--text-muted); + text-align: center; + padding: 2rem 0; + font-size: 0.9rem; +} + +/* Task card */ +.task-card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: 0.5rem; + padding: 0.875rem 1rem; + display: flex; + flex-direction: column; + gap: 0.375rem; +} + +.task-card-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.5rem; + flex-wrap: wrap; +} + +.task-name { + font-weight: 600; + font-size: 0.95rem; + flex: 1; + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* State badge */ +.state-badge { + display: inline-block; + font-size: 0.7rem; + font-weight: 600; + letter-spacing: 0.03em; + text-transform: uppercase; + padding: 0.2em 0.55em; + border-radius: 999px; + color: #0f172a; + white-space: nowrap; + flex-shrink: 0; +} + +.state-badge[data-state="PENDING"] { background: var(--state-pending); } +.state-badge[data-state="QUEUED"] { background: var(--state-queued); } +.state-badge[data-state="RUNNING"] { background: var(--state-running); } +.state-badge[data-state="COMPLETED"] { background: var(--state-completed); } +.state-badge[data-state="FAILED"] { background: var(--state-failed); } +.state-badge[data-state="TIMED_OUT"] { background: var(--state-timed-out); } +.state-badge[data-state="CANCELLED"] { background: var(--state-cancelled); } +.state-badge[data-state="BUDGET_EXCEEDED"] { background: var(--state-budget-exceeded); } + +/* Task meta */ +.task-meta { + font-size: 0.78rem; + color: var(--text-muted); + display: flex; + gap: 0.75rem; + flex-wrap: wrap; +} + +.task-description { + font-size: 0.82rem; + color: var(--text-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* Run button */ +.task-card-footer { + display: flex; + align-items: center; + gap: 0.5rem; + margin-top: 0.25rem; + flex-wrap: wrap; +} + +.btn-run { + font-size: 0.8rem; + font-weight: 600; + padding: 0.35em 0.85em; + border-radius: 0.375rem; + border: none; + cursor: pointer; + background: var(--accent); + color: #0f172a; + transition: opacity 0.15s; +} + +.btn-run:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.task-error { + font-size: 0.78rem; + color: var(--state-failed); +} |
