/**
 * TaskMonitorComponent — งานที่รันอยู่เบื้องหลัง
 *
 * ใช้ตัวแปรของเฟรมเวิร์กทั้งหมด ไม่มีสีฝังตรง ๆ สักค่า — ธีมมืดจึงเปลี่ยนตามได้เอง
 * โดยไม่ต้องมี selector ซ้ำอีกชุด
 *
 * คลาสสถานะเป็นของคอมโพเนนต์เอง (`is-running` / `is-done` / `is-failed`)
 * ไม่ยืมคลาสจากสไตล์ของแอปพลิเคชันใด — คอมโพเนนต์ของเฟรมเวิร์กที่เรนเดอร์
 * `pill-danger` จะดูถูกต้องเฉพาะในโปรเจกต์ที่บังเอิญนิยามคลาสนั้นไว้ และไม่มีสไตล์
 * เลยในที่อื่นทั้งหมด
 */

.task-monitor-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2, 0.5rem);
  margin: 0;
  padding: 0;
  list-style: none;
}

.task-monitor-item {
  display: flex;
  align-items: center;
  gap: var(--space-2, 0.5rem);
  flex-wrap: wrap;
  padding: var(--space-2, 0.5rem) var(--space-3, 0.75rem);
  border: 1px solid var(--color-border, rgba(0, 0, 0, 0.1));
  border-radius: var(--border-radius, 0.375rem);
  background: var(--color-surface, #f9f9f9);
  color: var(--color-text, #1e293b);
}

.task-monitor-status {
  flex: none;
  padding: 0.125rem var(--space-2, 0.5rem);
  border-radius: 999px;
  font-size: var(--font-size-sm, 0.875rem);
  line-height: 1.5;
  white-space: nowrap;
}

.task-monitor-label {
  flex: 1 1 12rem;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.task-monitor-message {
  flex: 1 1 100%;
  font-size: var(--font-size-sm, 0.875rem);
  color: var(--color-text-muted, #64748b);
}

.task-monitor-progress {
  flex: none;
  width: 8rem;
  height: 0.5rem;
}

.task-monitor-empty {
  padding: var(--space-2, 0.5rem) 0;
  color: var(--color-text-muted, #64748b);
  font-size: var(--font-size-sm, 0.875rem);
}

/* สถานะ — สีพื้นหลังใช้เฉดอ่อนเสมอ เพื่อให้ข้อความยังอ่านออกทั้งธีมสว่างและมืด */
.task-monitor-item.is-running .task-monitor-status {
  background: var(--color-info-light, #cffafe);
  color: var(--color-info-hover, #0891b2);
}

.task-monitor-item.is-done .task-monitor-status {
  background: var(--color-success-light, #d1fae5);
  color: var(--color-success-hover, #059669);
}

.task-monitor-item.is-failed .task-monitor-status {
  background: var(--color-error-light, #fee2e2);
  color: var(--color-error-hover, #dc2626);
}

.task-monitor-item.is-failed {
  border-color: var(--color-error, #ef4444);
}

/**
 * งานที่กำลังทำอยู่ต้องดูเหมือนกำลังทำอยู่
 *
 * แถวที่นิ่งสนิทกับแถวที่ค้างเพราะเซิร์ฟเวอร์ตายหน้าตาเหมือนกันเป๊ะ — ชีพจรเบา ๆ
 * คือสิ่งเดียวบนหน้าจอที่บอกว่ายังมีอะไรเดินอยู่จริง
 */
@keyframes task-monitor-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}

.task-monitor-item.is-running .task-monitor-status {
  animation: task-monitor-pulse 1.6s ease-in-out infinite;
}

/* เคารพการตั้งค่าของผู้ใช้ที่ขอให้ลดการเคลื่อนไหว */
@media (prefers-reduced-motion: reduce) {
  .task-monitor-item.is-running .task-monitor-status {
    animation: none;
  }
}
