/* ============================================================
   card.css - 请求卡片、部门区块、任务列表、附件、进度条
   ============================================================ */

/* Request Card */
.request-card{background:var(--c-surface);border-radius:var(--radius-lg);margin-bottom:16px;box-shadow:var(--shadow-sm);overflow:hidden;transition:transform 0.4s cubic-bezier(0.4,0,0.2,1),box-shadow 0.4s cubic-bezier(0.4,0,0.2,1)}
.request-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.request-card.overdue{border-left:none}
.card-header{padding:20px 24px;cursor:pointer;display:flex;align-items:flex-start;gap:14px}
.card-header-left{flex:1;min-width:0}
.card-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:6px}
.card-id{font-size:12px;font-weight:600;color:var(--c-gray-400)}
.card-title{font-size:18px;font-weight:600;color:var(--c-gray-900);letter-spacing:-0.01em}
.card-meta{font-size:13px;color:var(--c-gray-400);display:flex;flex-wrap:wrap;gap:14px;font-weight:500}
.card-progress-wrap{display:flex;align-items:center;gap:10px;margin-top:8px}
.progress-bar{flex:1;height:6px;background:var(--c-gray-100);border-radius:3px;overflow:hidden}
.progress-fill{height:100%;border-radius:3px;transition:width 0.4s ease}
.progress-num{font-size:14px;font-weight:600;min-width:36px;text-align:right}
.card-expand{flex-shrink:0;padding:6px 14px;border-radius:var(--radius-sm);background:var(--c-primary-light);color:var(--c-primary);font-size:13px;font-weight:500;white-space:nowrap;transition:all 0.3s cubic-bezier(0.4,0,0.2,1)}
.card-expand:hover{background:var(--c-primary);color:var(--c-white)}
.card-actions{display:flex;gap:6px;flex-shrink:0;align-items:center}
.card-action-delete{color:var(--c-danger);border-color:var(--c-danger);background:var(--c-danger-bg)}
.card-action-edit{color:var(--c-primary);border-color:var(--c-primary);background:var(--c-primary-light)}

.card-body{border-top:1px solid var(--c-gray-100);padding:0 24px;max-height:0;overflow:hidden;transition:max-height 0.3s ease,padding 0.3s ease}
.card-body.open{max-height:4000px;padding:16px 24px}

/* Badges */
.badge{display:inline-flex;align-items:center;padding:4px 12px;border-radius:20px;font-size:12px;font-weight:500;white-space:nowrap}
.badge-danger{background:var(--c-danger-bg);color:var(--c-danger)}
.badge-warning{background:var(--c-warning-bg);color:#9A5C00}
.badge-info{background:var(--c-info-bg);color:var(--c-info)}
.badge-success{background:var(--c-success-bg);color:var(--c-success)}
.badge-gray{background:var(--c-gray-100);color:var(--c-gray-600)}
.badge-overdue{background:var(--c-danger);color:var(--c-white)}

/* Department section */
.dept-section{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--c-gray-100)}
.dept-section:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}
.dept-header{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.dept-name{font-size:15px;font-weight:600}
.dept-progress-bar{flex:0 0 80px;height:5px;background:var(--c-gray-100);border-radius:3px;overflow:hidden}
.dept-progress-bar .fill{height:100%;border-radius:3px}
.dept-meta{font-size:12px;color:var(--c-gray-600)}
.dept-actions{display:flex;gap:4px;margin-left:auto}
.accept-btn{background:var(--c-success-bg);color:var(--c-success);border:1px solid var(--c-success);padding:3px 12px;border-radius:4px;font-size:12px;cursor:pointer}
.accept-btn:hover{background:var(--c-success);color:var(--c-white)}
.reject-btn{background:var(--c-danger-bg);color:var(--c-danger);border:1px solid var(--c-danger);padding:3px 12px;border-radius:4px;font-size:12px;cursor:pointer}
.reject-btn:hover{background:var(--c-danger);color:var(--c-white)}
.assign-btn{background:var(--c-primary-light);color:var(--c-primary);border:1px solid var(--c-primary);padding:3px 12px;border-radius:4px;font-size:12px;cursor:pointer}
.assign-btn:hover{background:var(--c-primary);color:var(--c-white)}
.assign-btn:disabled,.assign-btn.disabled{background:var(--c-gray-100);color:var(--c-gray-400);border-color:var(--c-gray-200);cursor:not-allowed;opacity:0.6}
.assign-btn:disabled:hover,.assign-btn.disabled:hover{background:var(--c-gray-100);color:var(--c-gray-400)}

/* Description block */
.request-desc-block{background:var(--c-primary-light);border-radius:8px;padding:14px 16px;margin-bottom:16px}
.request-desc-label{font-size:13px;font-weight:600;color:var(--c-primary);margin-bottom:6px}
.request-desc-text{font-size:14px;color:var(--c-gray-800);line-height:1.7;white-space:pre-wrap;word-break:break-word}

/* Attachments */
.attachment-row{display:flex;align-items:center;gap:6px;padding:2px 0;font-size:13px;color:var(--c-gray-600)}
.attachment-row a{color:var(--c-primary);text-decoration:none;cursor:pointer}
.attachment-row a:hover{text-decoration:underline}
.attachment-block{margin-top:8px}
.attachment-task-block{width:100%;box-sizing:border-box}
.attachment-meta{color:var(--c-gray-400);font-size:12px}
.attachment-upload{border:2px dashed var(--c-gray-200);border-radius:10px;padding:24px 16px;text-align:center;cursor:pointer;transition:all 0.2s;background:var(--c-gray-50);position:relative}
.attachment-upload:hover{border-color:var(--c-primary);background:var(--c-primary-light)}
.attachment-upload.dragover{border-color:var(--c-primary);background:var(--c-primary-light);border-style:solid}
.attachment-upload input[type="file"]{display:none}
.attachment-upload-icon{font-size:28px;margin-bottom:6px;color:var(--c-gray-400)}
.attachment-upload-text{font-size:14px;color:var(--c-gray-600);font-weight:500}
.attachment-upload-hint{font-size:12px;color:var(--c-gray-400);margin-top:4px}
.attachment-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.attachment-chip{display:inline-flex;align-items:center;gap:4px;background:var(--c-primary-light);border:1px solid var(--c-primary);border-radius:20px;padding:5px 12px;font-size:13px;color:var(--c-gray-800);max-width:100%}
.attachment-chip-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}
.attachment-chip-remove{color:var(--c-danger);cursor:pointer;font-size:14px;line-height:1;margin-left:2px}
.attachment-chip-remove:hover{color:var(--c-danger);opacity:0.7}
.attachment-file-name{font-size:13px;color:var(--c-gray-600);margin-top:6px;display:flex;align-items:center;gap:6px}
.attachment-remove{color:var(--c-danger);cursor:pointer;font-size:12px;text-decoration:underline}

/* Task list */
.task-list{padding-left:14px;border-left:2px solid var(--c-gray-100)}
.task-item{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:14px}
.task-item:last-child{padding-bottom:0}
.task-name{flex:1;color:var(--c-gray-800)}
.task-person{font-size:13px;color:var(--c-gray-400);min-width:56px}
.task-progress-bar{width:56px;height:4px;background:var(--c-gray-100);border-radius:2px;overflow:hidden;cursor:pointer}
.task-progress-bar .fill{height:100%;border-radius:2px;transition:width 0.3s}
.task-status{font-size:12px;min-width:44px;text-align:right}
.progress-edit{width:48px;padding:1px 4px;border:1.5px solid var(--c-primary);border-radius:3px;font-size:13px;text-align:center;outline:none}

/* Task item layout (from render.js) */
.task-item-wrap{display:flex;align-items:flex-start;flex-wrap:wrap;gap:2px 10px;padding:8px 0;border-bottom:1px solid var(--c-gray-100)}
.task-item-main{flex:1;min-width:0;display:flex;flex-direction:column}
.task-item-title{font-size:14px;color:var(--c-gray-800);margin-bottom:4px}
.task-item-label{font-weight:600;color:var(--c-gray-600)}
.task-item-meta{font-size:12px;color:var(--c-gray-400);display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:break-word;word-break:break-word}
.task-item-meta-value{color:var(--c-gray-600)}
.task-item-meta-deadline{color:var(--c-warning)}
.task-item-meta-completed{color:var(--c-success)}
.task-item-note{width:100%;box-sizing:border-box;min-width:0;max-width:100%;white-space:pre-wrap;overflow-wrap:break-word;word-break:break-all;max-height:160px;overflow-y:auto}
.task-item-actions{display:flex;align-items:center;gap:4px;flex-shrink:0}
.task-status-inline{display:inline-block}
.task-action-pass{margin-left:6px}
.task-action-fail{margin-left:4px}
.task-action-submit{margin-left:6px;background:var(--c-primary);color:var(--c-white)}
.task-action-view{margin-left:6px;background:var(--c-success-bg);color:var(--c-success);border:1px solid var(--c-success)}
.task-action-edit{margin-left:4px;background:var(--c-gray-100);color:var(--c-gray-600);border:1px solid var(--c-gray-200)}

/* Spinner (small inline) */
.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;vertical-align:middle;margin-right:4px}

/* Detail view */
.detail-meta-box{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px;font-size:13px;color:var(--c-gray-800)}
.detail-title-block{margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--c-gray-100)}
.detail-title-label{font-size:12px;color:var(--c-gray-500);margin-bottom:4px}
.detail-title-text{font-size:18px;font-weight:600;color:var(--c-gray-800);line-height:1.4}

/* Dark mode overrides for card */
html[data-theme="dark"] .badge-warning{color:#FFB340}
html[data-theme="dark"] .card-body{border-top-color:var(--c-gray-200)}
html[data-theme="dark"] .dept-section{border-bottom-color:var(--c-gray-200)}
html[data-theme="dark"] .task-list{border-left-color:var(--c-gray-200)}
html[data-theme="dark"] .attachment-upload{background:var(--c-gray-100)}
html[data-theme="dark"] .attachment-upload:hover{background:var(--c-primary-light)}
.attachment-upload.paste-active{border-color:var(--c-primary);background:var(--c-primary-light);box-shadow:0 0 0 3px rgba(0,113,227,0.15)}
html[data-theme="dark"] .request-desc-block{background:var(--c-primary-light)}
html[data-theme="dark"] .request-desc-text{color:var(--c-gray-800)}
html[data-theme="dark"] .dept-row textarea:focus{border-color:var(--c-primary)!important;box-shadow:0 0 0 3px rgba(10,132,255,0.15)}
html[data-theme="dark"] .dept-row textarea{color:var(--c-gray-800)}
html[data-theme="dark"] .dept-section{background:#1A1A1C;border-radius:var(--radius-md);padding:14px 16px;margin-bottom:14px;border:1px solid var(--c-gray-200);border-bottom:1px solid var(--c-gray-200)}
html[data-theme="dark"] .task-list{border-left-color:var(--c-primary);background:rgba(10,132,255,0.04);border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:10px 12px 10px 16px}
html[data-theme="dark"] .dept-header{padding-bottom:8px;margin-bottom:10px;border-bottom:1px solid var(--c-gray-200)}
html[data-theme="dark"] .progress-bar{background:#38383A}
html[data-theme="dark"] .dept-progress-bar{background:#38383A}
html[data-theme="dark"] .task-progress-bar{background:#38383A}
html[data-theme="dark"] .progress-fill{box-shadow:0 0 4px rgba(10,132,255,0.35)}
html[data-theme="dark"] .dept-progress-bar .fill{box-shadow:0 0 3px rgba(10,132,255,0.35)}
html[data-theme="dark"] .task-progress-bar .fill{box-shadow:0 0 3px rgba(10,132,255,0.35)}

/* Accept animation */
.dept-section.accept-animating{animation:acceptPulse 0.8s cubic-bezier(0.4,0,0.2,1)}

/* === 即将到期预警标识 === */
.request-card.expiring-soon{border-left:3px solid #FF9500}
.expiring-soon-badge{display:inline-block;background:#FF9500;color:#fff;font-size:11px;padding:2px 8px;border-radius:10px;margin-left:6px;font-weight:500}
html[data-theme="dark"] .expiring-soon-badge{background:rgba(255,149,0,0.85)}

/* === 评论区样式 === */
.comment-section{margin-top:24px;padding-top:20px;border-top:1px solid var(--c-border,#e5e5ea);display:flex;flex-direction:column;height:100%;min-height:0}
.comment-section-header{font-size:15px;font-weight:600;color:var(--c-gray-800,#1d1d1f);margin-bottom:12px;flex-shrink:0}
.comment-list{flex:1;overflow-y:auto;margin-bottom:0;min-height:120px}
.comment-item{display:flex;gap:12px;margin-bottom:16px}
.comment-avatar{width:36px;height:36px;border-radius:50%;background:var(--c-primary,#0071E3);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}
.comment-body{flex:1;min-width:0}
.comment-header{display:flex;align-items:center;gap:10px;margin-bottom:4px;flex-wrap:wrap}
.comment-author{font-size:13px;font-weight:600;color:var(--c-gray-800,#1d1d1f)}
.comment-dept-tag{font-size:11px;color:var(--c-gray-400,#86868b);background:var(--c-gray-100,#f5f5f7);padding:2px 8px;border-radius:10px}
.comment-time{font-size:12px;color:var(--c-gray-400,#86868b);flex:1}
.comment-actions{display:flex;align-items:center;gap:6px;margin-left:auto}
.comment-action-btn{font-size:12px;padding:2px 8px;border:1px solid var(--c-border,#d1d1d6);border-radius:6px;background:var(--c-bg,#fff);color:var(--c-gray-500,#6e6e73);cursor:pointer;transition:all .15s ease}
.comment-action-btn:hover{background:var(--c-gray-100,#f5f5f7);color:var(--c-gray-800,#1d1d1f)}
.comment-edit-btn:hover{border-color:var(--c-primary,#0071E3);color:var(--c-primary,#0071E3)}
.comment-delete-btn:hover{border-color:var(--c-danger,#dc3545);color:var(--c-danger,#dc3545)}
html[data-theme="dark"] .comment-action-btn{background:var(--c-gray-100,#1c1c1e);border-color:var(--c-gray-200,#38383a);color:var(--c-gray-400,#98989d)}
html[data-theme="dark"] .comment-action-btn:hover{background:var(--c-gray-200,#38383a);color:var(--c-gray-800,#e5e5ea)}
/* 删除动画 */
.comment-item-deleting{opacity:0;max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;overflow:hidden;transition:all 0.35s cubic-bezier(0.4,0,0.2,1)}
/* 编辑模式动画 */
.comment-edit-input{opacity:0;transform:translateY(-6px);animation:commentEditIn 0.25s cubic-bezier(0.4,0,0.2,1) forwards}
@keyframes commentEditIn{to{opacity:1;transform:translateY(0)}}
.comment-edit-actions{display:flex;align-items:center;gap:8px;margin-top:4px;opacity:0;animation:commentEditIn 0.25s cubic-bezier(0.4,0,0.2,1) 0.08s forwards}
/* 编辑附件 */
.comment-edit-attachments{margin-top:8px;opacity:0;animation:commentEditIn 0.25s cubic-bezier(0.4,0,0.2,1) 0.12s forwards}
.comment-edit-attachment{display:flex;align-items:center;gap:6px;font-size:13px;margin-bottom:4px}
.comment-edit-attachment a{color:var(--c-primary,#0071E3);text-decoration:none}
.comment-edit-attachment a:hover{text-decoration:underline}
.comment-edit-attachment .remove-att-btn{font-size:11px;padding:1px 6px;border:1px solid var(--c-border,#d1d1d6);border-radius:4px;background:var(--c-bg,#fff);color:var(--c-gray-500,#6e6e73);cursor:pointer}
.comment-edit-attachment .remove-att-btn:hover{border-color:var(--c-danger,#dc3545);color:var(--c-danger,#dc3545)}
.comment-content{font-size:14px;color:var(--c-gray-800,#1d1d1f);line-height:1.6;word-break:break-word;white-space:pre-wrap}
.comment-empty{text-align:center;color:var(--c-gray-400,#86868b);font-size:13px;padding:20px 0}
.comment-loading{text-align:center;color:var(--c-gray-400,#86868b);font-size:13px;padding:20px 0}
.comment-input-area{display:flex;flex-direction:column;gap:10px;flex-shrink:0;padding-top:12px;border-top:1px solid var(--c-border,#e5e5ea);background:var(--c-bg,#fff)}
.comment-input-row{display:flex;flex-direction:column;gap:8px}
.comment-name-input{padding:8px 12px;border:1px solid var(--c-border,#d1d1d6);border-radius:8px;font-size:14px;font-family:inherit;background:var(--c-input-bg,#fff);color:var(--c-gray-800,#1d1d1f);width:100%}
.comment-name-input:focus{outline:none;border-color:var(--c-primary,#0071E3);box-shadow:0 0 0 3px rgba(0,113,227,0.15)}
.comment-input{width:100%;resize:vertical;min-height:60px;padding:8px 12px;border:1px solid var(--c-border,#d1d1d6);border-radius:8px;font-size:14px;font-family:inherit;background:var(--c-input-bg,#fff);color:var(--c-gray-800,#1d1d1f);overflow:auto;box-sizing:border-box}
.comment-input:focus{outline:none;border-color:var(--c-primary,#0071E3);box-shadow:0 0 0 3px rgba(0,113,227,0.15)}
.comment-input-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.comment-submit-btn{flex-shrink:0;height:40px}
.comment-attachment-upload{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.comment-attachment-list{display:flex;gap:6px;flex-wrap:wrap}
.comment-attachments{margin-top:6px}
.comment-attachment-item{font-size:13px;color:var(--c-primary,#0071E3)}
.comment-attachment-item a{color:inherit;text-decoration:none}
.comment-attachment-item a:hover{text-decoration:underline}
.comment-attachment-size{font-size:11px;color:var(--c-gray-400,#86868b)}
html[data-theme="dark"] .comment-section{border-top-color:var(--c-gray-200,#38383a)}
html[data-theme="dark"] .comment-avatar{background:var(--c-primary,#0a84ff)}
html[data-theme="dark"] .comment-input{background:var(--c-gray-100,#1c1c1e);border-color:var(--c-gray-200,#38383a);color:var(--c-gray-800,#e5e5ea)}
html[data-theme="dark"] .comment-name-input{background:var(--c-gray-100,#1c1c1e);border-color:var(--c-gray-200,#38383a);color:var(--c-gray-800,#e5e5ea)}
html[data-theme="dark"] .comment-dept-tag{background:var(--c-gray-200,#38383a);color:var(--c-gray-400,#98989d)}
html[data-theme="dark"] .comment-input-area{border-top-color:var(--c-gray-200,#38383a);background:var(--c-gray-100,#1c1c1e)}
