internTaskCard(taskId) { const [projectCode, branch, task] = taskId.split('_'); const { title, description, duration, durationType } = RIBC.getTaskDetails(taskId); const projectName = RIBC.getProjectDetails(projectCode).projectName; // per-intern state const { assignedTasks, completedTasks, failedTasks } = RIBC.getInternRecord(floGlobals.myFloID); const isCompleted = !!completedTasks?.[taskId]; const isFailed = !!failedTasks?.[taskId]; const showUpdateButton = !isCompleted && !isFailed; const linkifyDescription = createElement('p', { innerHTML: DOMPurify.sanitize(linkify(description)), className: `timeline-task__description ws-pre-line wrap-around` }); // existing deadline/progress logic (used only for active/overdue) const { hasDeadlinePassed, taskDeadline, elapsedPercentage } = getTaskDeadline(taskId); // status/timeline block const timelineBlock = isCompleted ? html`