/* 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); }