/* ---------- 录入任务（分步） ---------- */
.stats.s4{grid-template-columns:repeat(4,1fr)}
.step{border:1px solid var(--line);border-radius:10px;padding:13px 14px;margin-bottom:12px;background:var(--soft2)}
.step-h{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.step-h em{font-style:normal;width:20px;height:20px;border-radius:50%;background:var(--brand-d);
  color:var(--brand);font-size:11px;font-weight:700;display:grid;place-items:center;flex:0 0 20px}
.step-h b{font-size:13px;font-weight:600}
.step-h .hint{margin-left:auto;font-size:11.5px;color:var(--txt3)}
.step .field:last-child{margin-bottom:0}
.ocr-inline{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px dashed var(--line2);
  border-radius:9px;background:var(--panel);margin-bottom:11px;flex-wrap:wrap}
.ocr-status{flex:1;min-width:180px}
.ocr-status b{font-size:12.5px;display:block;font-weight:600}
.ocr-status span{font-size:11.5px;color:var(--txt3);display:block;line-height:1.5}

/* ---------- 我的任务（账号 → 任务 → 视频） ---------- */
.acct-block{border:1px solid var(--line);border-radius:12px;background:var(--panel);margin-bottom:12px;
  overflow:hidden;box-shadow:var(--shadow)}
.acct-h{display:flex;align-items:center;gap:9px;padding:11px 14px;background:var(--soft);
  border-bottom:1px solid var(--line);flex-wrap:wrap}
.acct-id b{font-size:13px;font-family:var(--mono)}
.acct-id .sub{display:block;font-size:11.5px;color:var(--txt3)}
.acct-empty .acct-h{border-bottom:none}
.task{padding:12px 14px;border-bottom:1px solid var(--line-soft);position:relative}
.task:last-child{border-bottom:none}
.task::before{content:"";position:absolute;left:0;top:11px;bottom:11px;width:3px;border-radius:0 3px 3px 0;
  background:transparent}
.task.is-supplement::before{background:var(--amber)}
.task.is-current::before{background:var(--brand)}
.task.is-done{background:var(--ok-bg)}
.task.is-done .task-title b{color:var(--txt2)}
.task-l1{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.task-t{flex:1;min-width:280px}
.task-title{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:5px}
.task-title b{font-size:14.5px;font-weight:650;letter-spacing:-.1px;line-height:1.35}
.task-flag{font-size:10px;font-weight:700;color:#fff;background:var(--brand);border-radius:4px;
  padding:1px 5px;letter-spacing:.3px}
.task-chips{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:5px}
.task-chips em{font-style:normal;font-size:10px;color:var(--txt3);letter-spacing:.3px}
.task-chips .chip{background:var(--soft2);font-size:11px}
.task-meta{display:flex;gap:15px;flex-wrap:wrap;font-size:11.5px;color:var(--txt3)}
.task-meta b{color:var(--txt);font-weight:600;font-variant-numeric:tabular-nums}
.task-prog{width:108px;flex:0 0 108px;text-align:right}
.task-prog-num{display:flex;align-items:baseline;justify-content:flex-end}
.task-prog-num b{font-size:20px;font-weight:700;line-height:1.15;font-variant-numeric:tabular-nums}
.task-prog-num em{font-style:normal;font-size:12px;color:var(--txt3)}
.prog.mini{width:100%;height:5px;margin:5px 0 3px}
.task-prog-l{display:block;font-size:10px;color:var(--txt3)}
.task-ops{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.danger-text{color:var(--red)}
.danger-text:hover{background:var(--red-d);border-color:var(--line-red)}
.task .rec-sub{margin-top:10px}
.status-sel{height:30px;font-size:12px;padding:0 24px 0 9px;border-radius:6px;
  background-position:calc(100% - 13px) 12px,calc(100% - 9px) 12px}
.status-sel.st-qualified{color:var(--green);border-color:var(--line-green);background-color:var(--green-d)}
.status-sel.st-rejected{color:var(--red);border-color:var(--line-red);background-color:var(--red-d)}
.status-sel.st-supplement{color:var(--amber);border-color:var(--line-amber);background-color:var(--amber-d)}
.status-sel.st-pending{color:var(--txt2)}

@media(max-width:720px){
  .acct-h{padding:10px 11px}
  .task{padding:9px 11px}
  .task-t{min-width:150px}
}
.acct-strip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:2px 2px 12px;
  padding:9px 12px;border:1px dashed var(--line2);border-radius:9px;background:var(--soft2);font-size:12px;color:var(--txt2)}
.acct-strip b{font-weight:600;color:var(--txt3);font-size:11.5px}

/* ---------- 我的任务：账号卡片 ---------- */
.tk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px;margin-bottom:14px}
.tk-card{border:1px solid var(--line);border-radius:12px;background:var(--panel);padding:13px 14px;cursor:pointer;
  box-shadow:var(--shadow);transition:border-color .15s,box-shadow .15s;display:flex;flex-direction:column;gap:9px}
.tk-card:hover{border-color:var(--line2);box-shadow:0 4px 16px rgba(16,24,40,.06)}
.tk-card.on{border-color:var(--line-red);box-shadow:inset 0 0 0 1px var(--line-brand)}
.tk-h{display:flex;align-items:flex-start;gap:8px}
.tk-id{min-width:0}
/* 账号名要一眼认出来：加粗 + 品牌色；设备编号紧贴名字右侧，作为定位设备的第一标识 */
.tk-name{display:flex;align-items:baseline;gap:8px;min-width:0}
.tk-name b{min-width:0;font-size:16px;font-weight:700;font-family:var(--mono);letter-spacing:-.2px;color:var(--brand);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tk-dev{flex:0 0 auto;font-size:11px;color:var(--txt2);background:var(--hover);border:1px solid var(--line);
  border-radius:5px;padding:1px 6px;letter-spacing:.2px}
.tk-id .sub{font-size:11.5px;color:var(--txt3);display:block;margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* C2.26 卡片主页链接：与管理员账号池同款 mono 小链接，超长截断 */
.tk-profile{font-size:11.5px;color:var(--txt2);display:block;margin-top:2px;text-decoration:none;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tk-profile:hover{color:var(--brand);text-decoration:underline}
.tk-now{border:1px solid var(--line-amber);border-left:3px solid var(--amber);border-radius:8px;padding:8px 10px;
  background:var(--warn-bg)}
.tk-now i{display:block;font-style:normal;font-size:10px;font-weight:700;color:var(--amber);letter-spacing:.3px}
/* C2.103：任务名带 emoji 后缀，两行封顶会把末尾符号截进省略号，放到三行 */
.tk-now b{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
  font-size:13.5px;font-weight:650;line-height:1.4;margin:2px 0 2px}
.tk-now span{display:block;font-size:11px;color:var(--txt3)}
.tk-now.done{border-color:var(--line-green);border-left-color:var(--green);background:var(--ok-bg)}
.tk-now.done i{color:var(--green)}
.tk-now.none{border-color:var(--line);border-left-color:var(--line2);background:var(--soft)}
.tk-now.none i{color:var(--txt3)}
.tk-more-tasks{border-top:1px dashed var(--line);padding-top:7px;display:grid;gap:4px}
.icon-btn{color:var(--txt3);font-size:16px;line-height:1;padding:2px 5px;border-radius:5px}
.icon-btn:hover{color:var(--red);background:var(--red-d)}
.tk-count{font-size:12px;color:var(--txt3)}
.tk-count b{font-size:22px;color:var(--txt);font-variant-numeric:tabular-nums;margin-right:4px}
.tk-tasks{border-top:1px solid var(--line);padding-top:8px;display:grid;gap:5px;min-height:54px}
.tk-task{display:flex;align-items:center;gap:8px;font-size:12.5px}
.tk-task span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tk-task em{font-style:normal;font-size:11px;color:var(--txt3);white-space:nowrap}
.tk-none{font-size:12px;color:var(--txt3)}
.tk-more{font-size:11px;color:var(--txt3)}
.tk-prog-h{display:flex;justify-content:space-between;font-size:11.5px;color:var(--txt3);margin-bottom:4px}
.tk-prog-h b{color:var(--txt);font-variant-numeric:tabular-nums}
.tk-prog .prog{width:100%;margin:0}
.tk-f{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11px;color:var(--txt3)}
.tk-f .tk-go{font-style:normal;color:var(--txt3);font-weight:400;font-size:11.5px;white-space:nowrap}
.tk-card:hover .tk-go{color:var(--txt2)}
.tk-card.simple{gap:7px;cursor:default}
.tk-card.simple:hover{border-color:var(--line);box-shadow:var(--shadow)}
.tk-card.simple .tk-name b{font-size:15px}
.tk-card.simple .tk-f{justify-content:flex-end}
.tk-empty{padding:44px 20px}
.tk-empty p{font-size:12.5px;margin:6px 0 12px}


/* ---------- 任务分组（进行中 / 任务结束） ---------- */
.task-group{padding:0;margin-bottom:12px;overflow:hidden}
.tg-h{display:flex;align-items:center;gap:9px;padding:11px 14px;background:var(--soft);
  border-bottom:1px solid var(--line);flex-wrap:wrap}
.tg-h b{font-size:13px;font-weight:650}
.tg-n{font-size:11px;font-weight:600;color:var(--txt2);background:var(--panel);border:1px solid var(--line);
  border-radius:20px;padding:0 7px;line-height:18px}
.tg-h .hint{font-size:11px;color:var(--txt3)}
.tg-h em{font-style:normal;font-size:11.5px;color:var(--brand);white-space:nowrap}
.tg-h.as-btn{width:100%;border-left:none;border-right:none;border-top:none;border-bottom:1px solid var(--line);
  text-align:left;cursor:pointer}
.tg-h.as-btn:hover{background:var(--hover)}
.task-group.done .tg-h{background:var(--soft2)}
.task-group.failed .tg-h{background:var(--red-d)}
.task-group.done .tg-h:not(.as-btn){border-bottom:none;padding-bottom:0}
.tg-empty{padding:15px 14px;font-size:12.5px;color:var(--txt3);line-height:1.75}
@media(max-width:720px){
  .task-prog{width:88px;flex:0 0 88px}
  .task-t{min-width:0}
  .task-ops{width:100%;justify-content:flex-start}
}

/* ---------- 录入任务：弹窗表单（v0.16.1 与「我的任务」合并） ---------- */
.entry-form{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:14px;align-items:start}
.entry-form .col{display:grid;gap:12px;align-content:start;min-width:0}
.entry-form .step{margin-bottom:0}
.entry-form .form-grid{grid-template-columns:repeat(2,1fr);margin-bottom:4px}
.entry-form .check-row{display:flex;align-items:center;gap:8px;font-size:12.6px;color:var(--txt2);margin:10px 0 2px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;cursor:pointer;transition:border-color .12s,background .12s}
.entry-form .check-row:hover{border-color:var(--line3);background:var(--hover)}
.entry-form .check-row input{width:15px;height:15px;flex:0 0 15px;accent-color:var(--brand);cursor:pointer}
.entry-form .check-row:has(input:checked){border-color:var(--line-blue);background:var(--blue-d);color:var(--blue)}
.entry-form #f-stages{border:1px dashed var(--line);border-radius:9px;padding:10px 10px 4px;margin-top:8px;background:var(--soft)}
.entry-tip{margin-top:11px;padding-top:9px;border-top:1px solid var(--line-soft)}
@media(max-width:760px){.entry-form{grid-template-columns:1fr}}
.task-brief{border:1px solid var(--line-amber);background:var(--warn-bg);border-radius:9px;padding:10px 12px;margin-bottom:12px}
.tb-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.tb-head b{font-size:12.5px;font-weight:650}
.tb-row{display:flex;gap:8px;font-size:12px;line-height:1.65;margin-top:4px}
.tb-row i{font-style:normal;color:var(--txt3);flex:0 0 56px}
.tb-row p{flex:1;min-width:0;white-space:pre-wrap;color:var(--txt2)}

.mark-row{border:1px solid var(--line);border-radius:10px;padding:11px 12px;margin-bottom:9px;background:var(--panel);
  border-left:3px solid var(--line2)}
.mark-row.st-pending{border-left-color:var(--line2)}
.mark-row.st-rejected{border-left-color:var(--red)}
.mark-row.st-supplement{border-left-color:var(--amber)}
.mark-row.st-qualified{border-left-color:var(--green);background:var(--ok-bg)}
.mark-row:last-child{margin-bottom:0}
.mr-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.mr-h b{font-size:13.5px;font-weight:650;line-height:1.4;min-width:0}
.mr-count{font-size:11.5px;color:var(--txt3);font-variant-numeric:tabular-nums;white-space:nowrap}
.mr-sub{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--txt3);margin:5px 0 7px}
.mr-acct{color:var(--txt);font-size:12px}
.mr-f{display:flex;align-items:center;gap:8px;flex-wrap:wrap;border-top:1px dashed var(--line);padding-top:7px}
.mr-f .status-sel{max-width:132px}
.mark-row.st-qualified .mr-h b{color:var(--txt2)}

.video-add{display:flex;gap:8px;align-items:center;margin-top:9px;padding-top:9px;border-top:1px dashed var(--line)}
.video-add input{flex:1;height:32px;font-size:12px}
.hint.err{color:var(--red)}

/* ---------- 我的出勤：打卡卡 ---------- */
.punch-card{margin-bottom:14px}
.punch-main{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.punch-main i{display:block;font-style:normal;font-size:11px;color:var(--txt3);letter-spacing:.3px}
.punch-main b{display:block;font-size:16px;font-weight:650;letter-spacing:-.2px;margin:2px 0 1px}
.punch-main .fine{display:block}
.punch-acts{display:flex;gap:8px}
.punch-hint{margin-top:10px;padding-top:9px;border-top:1px solid var(--line-soft)}
.punch-card.is-done .punch-main b{color:var(--green)}

/* ---------- 我的出勤：月历 ---------- */
.cal-title{font-size:14px;font-weight:650;min-width:104px;text-align:center}
.cal-card{padding-bottom:14px}
.cal-week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.cal-week span{font-size:11px;color:var(--txt3);text-align:center;padding:2px 0}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal-cell{min-height:74px;border:1px solid var(--line);border-radius:8px;padding:6px 8px;background:var(--panel);
  display:flex;flex-direction:column;gap:3px}
.cal-cell.empty{border:none;background:transparent;min-height:0}
.cal-cell.present{border-color:var(--line-green);background:var(--ok-bg)}
.cal-cell.absent{border-color:var(--line-red);background:var(--bad-bg)}
.cal-cell.leave{border-color:var(--line-amber);background:var(--warn-bg)}
.cal-cell.rest{background:var(--soft)}
.cal-cell.future{background:var(--hover);border-style:dashed;opacity:.75}
.cc-h{display:flex;align-items:center;justify-content:space-between;gap:4px}
.cc-h b{font-size:13px;font-weight:650;font-variant-numeric:tabular-nums}
.cc-h .tag{font-size:10px;padding:0 5px;line-height:16px}
.cc-time{font-size:10.5px;color:var(--txt2)}
.cc-time .punched{color:var(--txt);font-weight:600}
.cc-hours{font-size:11px;color:var(--txt3);font-variant-numeric:tabular-nums}
.cal-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:11px;font-size:11.5px;color:var(--txt3)}
.cal-legend span{display:inline-flex;align-items:center;gap:5px}
.dot-cal{width:8px;height:8px;border-radius:50%;background:var(--line2);display:inline-block}
.dot-cal.on{background:var(--green)}
.dot-cal.off{background:var(--red)}
.dot-cal.leave{background:var(--amber)}
.dot-cal.rest{background:var(--line2)}
.dot-cal.future{background:var(--line2)}

@media(max-width:1100px){
  .cal-cell{min-height:62px}
}

/* ---------- 录入任务：截图区（一个区域，1 张起、可多张） ---------- */
.shot-drop{display:block;padding:14px 12px;text-align:center;border:1px dashed var(--line2);
  border-radius:10px;background:var(--soft2);cursor:pointer;transition:border-color .15s,background .15s}
.shot-drop:hover{border-color:var(--line2);background:var(--panel)}
.shot-drop.is-over{border-color:var(--brand);background:var(--brand-d)}
.shot-drop-t b{display:block;font-size:12.5px;font-weight:650}
.shot-drop-t span{display:block;font-size:11px;color:var(--txt3);margin-top:4px;line-height:1.55}
.shot-thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-top:9px}
.shot-thumb{position:relative;margin:0;border:1px solid var(--line);border-radius:8px;background:var(--panel);
  padding:5px;display:flex;flex-direction:column;gap:4px}
.shot-thumb img{width:100%;height:74px;object-fit:cover;border-radius:5px;background:var(--hover)}
.shot-thumb figcaption{font-size:10px;color:var(--txt3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.shot-x{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;border:none;
  background:rgba(17,24,39,.62);color:#fff;font-size:12px;line-height:1;cursor:pointer}
.shot-x:hover{background:var(--brand)}
.shot-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}
.shot-state{font-size:11.5px;color:var(--txt3)}
.ocr-note{margin-top:9px}
.ocr-conflict{padding:7px 9px;border:1px solid var(--line-amber);border-radius:8px;background:var(--warn-bg);
  font-size:11.5px;color:var(--txt2);line-height:1.6;margin-bottom:4px}
.ocr-conflict b{color:var(--amber)}
.ocr-conflict .sub{display:block;font-size:10.5px;color:var(--txt3)}
input.is-conflict,textarea.is-conflict{border-color:var(--line-amber);background:var(--warn-bg);box-shadow:inset 0 0 0 1px var(--line-amber)}
.fail-list{display:grid;gap:2px;margin:9px 0 4px}
