/* ── Background-task strip ────────────────────────────────────────────────── The list of `execute_task mode=async` tasks the current conversation started, rendered above the composer by `renderTaskStrip` (shared by the desktop copilot and the mobile chat page). Quiet by default: it sits next to the composer, so it must read as a status line, never as a second UI. */ .agent-tasks { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 0.5rem; padding: 0.4rem 0.45rem 0.45rem; border: 1px solid var(--toolbar-border); border-radius: var(--radius-sm); background: var(--msg-assistant-bg); } .agent-tasks-head { display: flex; align-items: center; gap: 0.4rem; padding: 0 0.25rem 0.1rem; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; color: var(--placeholder-color); } .agent-tasks-all { margin-left: auto; font-size: 0.7rem; font-weight: 500; text-transform: none; letter-spacing: 0; color: var(--placeholder-color); text-decoration: none; } .agent-tasks-all:hover { color: var(--accent); text-decoration: underline; } /* ── One task ── */ .agent-task { display: flex; align-items: center; gap: 0.5rem; padding: 0.3rem 0.4rem; border-radius: var(--radius-sm); background: var(--card-bg); border: 1px solid transparent; } .agent-task--failed { border-color: rgba(var(--bs-danger-rgb, 220, 53, 69), 0.35); } .agent-task--completed, .agent-task--cancelled { opacity: 0.7; } .agent-task-icon { flex-shrink: 0; font-size: 0.85rem; color: var(--accent); } .agent-task--completed .agent-task-icon { color: var(--tool-subagent); } .agent-task--failed .agent-task-icon { color: var(--bs-danger, #dc3545); } .agent-task--cancelled .agent-task-icon { color: var(--placeholder-color); } /* The body is a button: clicking opens the task's own session page. */ .agent-task-body { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 0.05rem; padding: 0; border: none; background: none; text-align: left; color: inherit; cursor: pointer; } .agent-task-body:disabled { cursor: default; } .agent-task-title { max-width: 100%; font-size: 0.8rem; font-weight: 500; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .agent-task-body:not(:disabled):hover .agent-task-title { color: var(--accent); text-decoration: underline; } .agent-task-meta, .agent-task-error { max-width: 100%; font-size: 0.7rem; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--placeholder-color); } .agent-task-error { color: var(--bs-danger, #dc3545); } .agent-task-action { flex-shrink: 0; display: flex; align-items: center; justify-content: center; width: 1.5rem; height: 1.5rem; padding: 0; border: none; border-radius: var(--radius-sm); background: none; color: var(--placeholder-color); cursor: pointer; transition: background 0.15s, color 0.15s; } .agent-task-action:hover { background: var(--accent-soft); color: var(--accent); } /* ── The running spinner ── */ .agent-task-spin { display: inline-block; animation: agent-task-spin 1.4s linear infinite; } @keyframes agent-task-spin { to { transform: rotate(360deg); } } @media (prefers-reduced-motion: reduce) { .agent-task-spin { animation: none; } }