/* ════════════════════════════════════════════════════════════════════════
   DS Kanban Card — pipeline board card. Macro: ds_kanban_card. Tokens only.
   Drag wires to api/routes/pipeline.py PATCH stage (preserve contract).
   ════════════════════════════════════════════════════════════════════════ */
.ds-kanban-card {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  padding: var(--sp-3);
  background: var(--card);
  border: 1px solid var(--border);
  border-left: 3px solid transparent;
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-sm);
  cursor: grab;
}
.ds-kanban-card:hover { box-shadow: var(--shadow-md); }
.ds-kanban-card:active { cursor: grabbing; }
.ds-kanban-card.is-overdue   { border-left-color: var(--error); }
.ds-kanban-card.is-hot       { border-left-color: var(--success); }
.ds-kanban-card.is-due_today { border-left-color: var(--warning); }

.ds-kanban-card-head { display: flex; align-items: center; gap: var(--sp-2); }
.ds-kanban-card-name { font-size: var(--text-base); font-weight: 600; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ds-kanban-card-sub  { font-size: var(--text-xs); color: var(--muted); }
.ds-kanban-card-value { font-size: var(--text-sm); font-weight: 700; color: var(--accent); }
.ds-kanban-card-meta { display: flex; gap: var(--sp-3); font-size: var(--text-xs); color: var(--muted); }
.ds-kanban-card-tags { display: flex; gap: 4px; flex-wrap: wrap; }
.ds-kanban-card-actions { display: flex; gap: var(--sp-1); margin-top: var(--sp-1); }
