/* =========================================================================
   飞书风格设计系统（PROJECT §6）。所有页面共用，token 不可自行覆盖。
   ========================================================================= */
:root{
  /* 品牌与状态色 */
  --blue:#3370FF; --blue-hover:#2a5fe6; --blue-tint:#f0f5ff;
  --success:#00B578; --success-tint:#e5f8f0;
  --warning:#FF8800; --warning-tint:#fff3e5;
  --review:#7A5AF8; --review-tint:#F1EDFF;
  --danger:#F54A45; --danger-tint:#fdecec;
  /* 文字 */
  --ink:#1F2329; --ink-body:#51565e; --ink-mute:#8a9099; --ink-faint:#c5cacf;
  /* 背景/边框 */
  --canvas:#FFFFFF; --canvas-tile:#F5F6F7;
  --hairline:#DEE0E3; --hairline-soft:#ebedf0;
  /* 阴影 */
  --shadow-sm:0 1px 2px rgba(31,35,41,.05);
  --ring:0 0 0 3px rgba(51,112,255,.12);
  --radius:12px; --radius-sm:8px; --radius-xs:6px;
}
*{box-sizing:border-box}
body{margin:0;font-family:Inter,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--ink);background:var(--canvas-tile);font-size:14px;line-height:1.5}
a{color:var(--blue);text-decoration:none}
h1,h2,h3,h4{margin:0}
small{font-size:12px;color:var(--ink-mute)}

/* ---- 按钮 ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:8px 20px;border-radius:var(--radius-sm);
  border:1px solid var(--hairline);background:var(--canvas);color:var(--ink);font-family:inherit;
  font-size:14px;font-weight:500;cursor:pointer;text-decoration:none;line-height:1.2}
/* 必填项红星 */
.req{color:var(--danger);margin-right:2px;font-weight:600}
.btn:hover{border-color:var(--blue);color:var(--blue)}
.btn:disabled{color:var(--ink-faint);cursor:not-allowed}
.btn.primary{background:var(--blue);color:#fff;border:none;box-shadow:var(--shadow-sm)}
.btn.primary:hover{background:var(--blue-hover);color:#fff}
.btn.danger{background:var(--danger);color:#fff;border:none}
.btn.danger:hover{filter:brightness(.9);color:#fff}
.btn.success{background:var(--success);color:#fff;border:none;box-shadow:var(--shadow-sm)}
.btn.success:hover{filter:brightness(.9);color:#fff}
.btn.ghost{background:transparent;border:none;color:var(--blue);padding:6px 10px}
.btn.ghost:hover{background:var(--blue-tint)}
.btn.sm{padding:5px 12px;font-size:13px}

/* ---- 表单 ---- */
input,select,textarea{font-family:inherit;font-size:14px;color:var(--ink);
  border:1px solid var(--hairline);border-radius:var(--radius-sm);padding:10px 12px;background:var(--canvas);outline:none;width:100%;
  transition:border-color .15s ease,box-shadow .15s ease}
input:focus,select:focus,textarea:focus{border-color:var(--blue);box-shadow:var(--ring)}
input::placeholder,textarea::placeholder{color:var(--ink-mute)}
input:disabled,select:disabled{background:var(--canvas-tile);color:var(--ink-faint)}
.field{margin-bottom:16px}
.field label{display:block;font-weight:500;margin-bottom:8px;color:var(--ink)}
.form-row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}

/* ---- 卡片 ---- */
.card{background:var(--canvas);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-sm)}
body.m .card{border-radius:14px}
.section-title{font-size:16px;font-weight:600;margin:0 0 12px}

/* ---- 标签/徽章（§6.2 状态/优先级映射） ---- */
.tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:500;line-height:1.6}
.tag.todo{color:var(--ink);background:var(--canvas-tile);font-weight:600}
.tag.doing{color:var(--blue);background:var(--blue-tint)}
.tag.pending_review{color:var(--review);background:var(--review-tint)}
.tag.done{color:var(--success);background:var(--success-tint)}
.tag.cancelled{color:var(--ink-faint);background:var(--canvas-tile)}
.tag.overdue{color:var(--danger);background:var(--danger-tint)}
.tag.urgent{color:var(--danger);background:var(--danger-tint)}
.tag.high{color:var(--warning);background:var(--warning-tint)}
.tag.normal{color:var(--blue);background:var(--blue-tint)}
.tag.low{color:var(--ink-mute);background:var(--canvas-tile)}
.tag-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.badge{display:inline-block;min-width:18px;padding:1px 6px;border-radius:10px;background:var(--danger);
  color:#fff;font-size:10px;font-weight:600;text-align:center}

/* 团队管理：今日提交标签 + 本周提交率进度条 */

/* ---- 表格 ---- */
table.tbl{width:100%;border-collapse:collapse;background:var(--canvas);border-radius:var(--radius);
  overflow:hidden;box-shadow:var(--shadow-sm)}
table.tbl th,table.tbl td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--hairline-soft);font-size:14px}
table.tbl th{background:var(--canvas-tile);font-weight:500;color:var(--ink-body);font-size:12px}
table.tbl tr:last-child td{border-bottom:none}
table.tbl tr:hover td{background:var(--blue-tint)}
table.tbl tr.row-click{cursor:pointer}
/* 按任务状态整行着色：只突出"要做的"待办与逾期，完成/取消无背景 */
table.tbl tr.s-todo td{background:var(--warning-tint)}
table.tbl tr.s-doing td{background:var(--blue-tint)}
table.tbl tr.s-pending_review td{background:var(--review-tint)}
table.tbl tr.s-done td{background:transparent}
table.tbl tr.s-cancelled td{background:transparent;color:var(--ink-faint)}
table.tbl tr.row-overdue td{background:var(--danger-tint)}
/* 当天计划行：蓝色淡背景 + 左侧强调线，让"今天"一眼可见（逾期红优先，今天蓝次之） */
table.tbl tr.row-today td{background:var(--blue-tint)}
table.tbl tr.row-today td:first-child{box-shadow:inset 3px 0 0 var(--blue)}
table.tbl tr.row-today:hover td{background:#e8efff}
table.tbl tr.row-overdue.row-today td{background:var(--danger-tint)}  /* 逾期优先红 */
/* hover 用更淡的强调，不加深原色 */
table.tbl tr.s-todo:hover td{background:#fff6ea}
table.tbl tr.s-doing:hover td{background:#f0f5ff}
table.tbl tr.s-pending_review:hover td{background:#f6f2ff}
table.tbl tr.row-overdue:hover td{background:#ffeceb}
table.tbl tr.s-done:hover td,table.tbl tr.s-cancelled:hover td{background:var(--canvas-tile)}
.col-sticky{position:sticky;right:0;background:var(--canvas);z-index:2;box-shadow:-1px 0 0 var(--hairline-soft)}

/* ---- 弹窗（Modal）---- */
.modal-back{position:fixed;inset:0;background:rgba(31,35,41,.45);z-index:100;display:none;
  align-items:center;justify-content:center;padding:24px}
.modal-back.show{display:flex}
.modal-box{background:var(--canvas);border-radius:16px;width:min(520px,100%);max-height:min(84vh,760px);
  display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 80px rgba(31,35,41,.22);
  transform:translateY(14px) scale(.98);opacity:0;
  transition:transform .22s cubic-bezier(.16,1,.3,1),opacity .18s ease-out}
.modal-back.show .modal-box{transform:none;opacity:1}
.modal-box.wide{width:min(660px,100%)}
.modal-box > form{display:contents}
/* 多段弹框（会议填汇报）：head/foot 固定，中间 .modal-scroll 统一滚动一条（避免两个滚动条） */
.modal-box.m-single-scroll .modal-scroll{flex:1;min-height:0;overflow-y:auto}
.modal-box.m-single-scroll .modal-body{overflow:visible;flex:none;min-height:0}
.modal-head,.modal-foot{flex-shrink:0}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:20px 24px 14px}
.modal-head h3{margin:0;font-size:16px;font-weight:600}
.modal-head .x{border:none;background:none;width:28px;height:28px;border-radius:6px;display:flex;
  align-items:center;justify-content:center;cursor:pointer;color:var(--ink-mute);font-size:15px;line-height:1}
.modal-head .x:hover{background:var(--canvas-tile);color:var(--ink)}
.modal-body{flex:1;min-height:0;padding:18px 24px;overflow:auto}
.modal-body .hint{color:var(--ink-mute);font-size:12px;margin-bottom:12px}
.modal-foot{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:14px 24px 18px;
  border-top:1px solid var(--hairline-soft)}
.modal-foot .spacer{flex:1}
/* 两列表单 */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.form-grid .full{grid-column:1/-1}
@media (max-width:520px){.form-grid{grid-template-columns:1fr}}

/* ---- 筛选条 ---- */
.filterbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;background:var(--canvas);
  padding:12px 16px;border-radius:var(--radius);margin-bottom:16px;box-shadow:var(--shadow-sm)}
.filterbar select,.filterbar input{width:auto;min-width:120px}

/* PC 快捷筛选 tabs + 分页 */
.quick-tabs{display:flex;gap:8px;margin-bottom:14px}
.quick-tabs a{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:8px;
  font-size:13px;font-weight:500;color:var(--ink-mute);background:var(--canvas);
  border:1px solid var(--hairline);text-decoration:none;transition:all .15s ease}
.quick-tabs a em{font-style:normal;font-size:12px;color:var(--ink-faint)}
.quick-tabs a em.danger{color:var(--danger)}
.quick-tabs a:hover{border-color:var(--blue);color:var(--blue)}
.quick-tabs a.on{background:var(--blue);border-color:var(--blue);color:#fff}
.quick-tabs a.on em{color:rgba(255,255,255,.85)}
.pagination{display:flex;align-items:center;gap:12px;justify-content:center;margin-top:20px}
.pagination .pg-cur{font-size:13px;color:var(--ink-body);font-weight:500}

/* PC 视图切换（表格 / 看板） */
.pc .view-toggle{display:inline-flex;position:relative;background:var(--canvas-tile);border-radius:8px;padding:3px}
.pc .view-toggle .vt-slider{position:absolute;top:3px;bottom:3px;left:3px;width:calc(50% - 3px);border-radius:6px;
  background:var(--canvas);box-shadow:var(--shadow-sm);transition:transform .22s cubic-bezier(.4,0,.2,1)}
.pc .view-toggle a{position:relative;z-index:1;padding:6px 16px;font-size:13px;font-weight:500;color:var(--ink-mute);border-radius:6px;text-decoration:none;transition:color .15s ease}
.pc .view-toggle a.on{color:var(--ink)}

/* 头像色（cu-0~7，团队/详情/选人弹框共用） */
.tm-av.cu-0,.tc-assignee.cu-0,.td-c .av.cu-0,.pick-row .av.cu-0{background:#e1eaff;color:#3370ff}
.tm-av.cu-1,.tc-assignee.cu-1,.td-c .av.cu-1,.pick-row .av.cu-1{background:#e4f8ea;color:#00b42a}
.tm-av.cu-2,.tc-assignee.cu-2,.td-c .av.cu-2,.pick-row .av.cu-2{background:#fff0e1;color:#ff7d00}
.tm-av.cu-3,.tc-assignee.cu-3,.td-c .av.cu-3,.pick-row .av.cu-3{background:#efe5ff;color:#7b2cbf}
.tm-av.cu-4,.tc-assignee.cu-4,.td-c .av.cu-4,.pick-row .av.cu-4{background:#ffe1e1;color:#f54a45}
.tm-av.cu-5,.tc-assignee.cu-5,.td-c .av.cu-5,.pick-row .av.cu-5{background:#d9f3ef;color:#08909a}
.tm-av.cu-6,.tc-assignee.cu-6,.td-c .av.cu-6,.pick-row .av.cu-6{background:#e6ecff;color:#4e5dba}
.tm-av.cu-7,.tc-assignee.cu-7,.td-c .av.cu-7,.pick-row .av.cu-7{background:#fff3d0;color:#c98b00}

/* ===== 任务弹框（详情/新建编辑）排版 ===== */
.form-row>div{flex:1;min-width:0}
.tf-check{display:flex;align-items:flex-start;gap:10px;padding:12px;background:var(--canvas-tile);border-radius:10px}
.tf-check input[type=checkbox]{width:auto;margin-top:3px;flex-shrink:0}
.tf-check label{margin:0}
.tf-check small{display:block;color:var(--ink-mute);font-size:12px;margin-top:2px}
/* 新建/编辑表单：字段两两并排，减滚动条 */
.tf-grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
/* 统一选人组件（执行人单选 / 关注人多选 共用） */
.ppick{position:relative}
.ppick-box{display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-height:40px;padding:5px 10px;
  border:1px solid var(--hairline);border-radius:10px;background:var(--canvas);cursor:text}
.ppick-box:focus-within{border-color:var(--blue)}
.ppick-input{border:none;outline:none;flex:1;min-width:90px;font-size:13px;background:transparent}
.ppick-chips{display:contents}
.pchip{display:inline-flex;align-items:center;gap:5px;background:var(--blue-tint);color:var(--blue);
  font-size:12px;padding:3px 4px 3px 9px;border-radius:14px;font-weight:500}
.pchip .pchip-x{cursor:pointer;width:16px;height:16px;border-radius:50%;display:inline-flex;
  align-items:center;justify-content:center;font-size:13px;line-height:1;opacity:.6}
.pchip .pchip-x:hover{opacity:1;background:rgba(0,0,0,.08)}
.ppick-drop{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;max-height:240px;overflow:auto;
  background:var(--canvas);border:1px solid var(--hairline);border-radius:10px;box-shadow:var(--shadow)}
.ppick-drop .pd-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:13px}
.ppick-drop .pd-item:hover,.ppick-drop .pd-item.active{background:var(--blue-tint)}
.ppick-drop .pd-empty{padding:12px;color:var(--ink-mute);font-size:12px;text-align:center}
/* 新建表单附件列表 */
.tf-filelist{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.tf-filelist .tf-file{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:5px 10px;
  background:var(--canvas-tile);border-radius:8px;color:var(--ink-body)}
.tf-filelist .tf-file .tf-file-x{cursor:pointer;color:var(--ink-mute);font-weight:700}
.tf-filelist .tf-file .tf-file-x:hover{color:var(--danger)}
.tm-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.tm-tools{display:flex;align-items:center;gap:2px;flex-shrink:0}
.tm-tool,.tm-tool-form{display:inline-flex}
.tm-tool{border:none;background:none;width:32px;height:32px;border-radius:8px;color:var(--ink-mute);
  align-items:center;justify-content:center;cursor:pointer;transition:background .12s,color .12s}
.tm-tool:hover{background:var(--canvas-tile);color:var(--ink)}
.tm-tool.danger:hover{background:var(--danger-tint);color:var(--danger)}
.tm-body{display:flex;gap:22px}
.tm-main{flex:1;min-width:0}
.tm-desc{white-space:pre-wrap;color:var(--ink-body);margin:0 0 14px;font-size:14px;line-height:1.6}
.tm-empty{color:var(--ink-mute)}
.tm-acts{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.tm-danger{border-top:1px solid var(--hairline-soft);padding-top:12px;margin-bottom:14px}
.tm-reason{display:flex;gap:8px;align-items:center;margin-bottom:10px}
.tm-reason input{flex:1;min-width:0;padding:8px 12px;font-size:13px}
.tm-reason .btn{flex-shrink:0}
.tm-sep{border:none;border-top:1px solid var(--hairline-soft);margin:18px 0}
.tm-cmt-title{margin:0 0 12px;font-size:14px;font-weight:600}
.tm-cmt{margin-bottom:12px}
.tm-cmt-h{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.tm-av{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;flex-shrink:0;background:var(--blue-tint);color:var(--blue)}
.tm-cmt-b{background:var(--canvas-tile);border-radius:8px;padding:8px 10px;font-size:13px;line-height:1.5;margin-left:32px}
.tm-cmt-form{display:flex;gap:8px;margin-top:10px}
.tm-cmt-form input{flex:1}
.tm-info{width:184px;flex-shrink:0;font-size:13px;color:var(--ink-body);background:var(--canvas-tile);
  border-radius:10px;padding:14px;align-self:flex-start}
.tm-info p{margin:0 0 13px}
.tm-info p:last-child{margin-bottom:0}
/* 任务详情弹框 v2（参考 PingCode 工单左右分栏）：左侧主内容 + 右侧固定属性栏 */
.tm2-tags{display:flex;flex-wrap:wrap;gap:6px}
.tm2-tags .tag{font-size:13px;padding:3px 10px}
/* todo 任务排期区（同附件/评论式，无背景框） */
.tm2-schedule-fields{display:flex;gap:8px;align-items:center}
.tm2-schedule-fields input[type=datetime-local]{flex:1 1 0;max-width:260px;min-width:0}
.tm2-schedule-fields select{flex:0 0 150px;flex-shrink:0}   /* 工时下拉固定宽，不被日期挤压 */
/* flatpickr 直接改原 input 为 text（class=flatpickr-input），同样限宽、不挤 select */
.tm2-schedule-fields .flatpickr-input,.tm2-schedule-fields .flatpickr{flex:1 1 0;max-width:260px;min-width:0}
.tm2-head-tools{display:flex;align-items:center;gap:4px;flex-shrink:0}
.tm2-icon,.tm2-icon-form{display:inline-flex}
.tm2-icon{border:none;background:none;width:32px;height:32px;border-radius:8px;color:var(--ink-mute);
  align-items:center;justify-content:center;cursor:pointer;transition:background .12s,color .12s}
.tm2-icon:hover{background:var(--canvas-tile);color:var(--ink)}
.tm2-icon.danger:hover{background:var(--danger-tint);color:var(--danger)}
.tm2-body{display:flex;gap:24px;padding:20px}
.tm2-main{flex:1;min-width:0}
.tm2-title{font-size:18px;font-weight:600;line-height:1.4;margin:0 0 12px;color:var(--ink)}
.tm2-desc{white-space:pre-wrap;color:var(--ink-body);margin:0 0 16px;font-size:14px;line-height:1.6}
.tm2-empty{color:var(--ink-mute)}
.tm2-acts{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.tm2-acts .btn{min-width:96px;padding:9px 16px}
.tm2-acts .danger-ghost{color:var(--danger);background:transparent;border:1px solid rgba(244,74,69,.4)}
.tm2-acts .danger-ghost:hover{background:var(--danger-tint);border-color:var(--danger)}
.td-acts .danger-ghost{color:var(--danger);background:transparent;border:1px solid rgba(244,74,69,.4)}
.td-acts .danger-ghost:active{background:var(--danger-tint);border-color:var(--danger)}
.tm2-danger{border-top:1px solid var(--hairline-soft);padding-top:12px;margin-bottom:6px}
.tm2-schedule{border-top:1px solid var(--hairline-soft);padding-top:12px;margin-bottom:6px}
.tm2-reason{display:flex;gap:8px;align-items:center;margin-bottom:10px}
.tm2-reason input{flex:1;min-width:0;padding:8px 12px;font-size:13px}
.tm2-reason .btn{flex-shrink:0}
.tm2-notice{color:var(--ink-mute);font-size:13px;background:var(--canvas-tile);border-radius:8px;padding:8px 12px}
.tm2-info{width:280px;flex-shrink:0;align-self:flex-start}
.tm2-info-g{border-radius:10px;background:var(--canvas-tile);padding:14px;margin-bottom:10px}
.tm2-info-g p{margin:0 0 13px;font-size:13px;color:var(--ink-body)}
.tm2-info-g p:last-child{margin-bottom:0}
.tm2-info .lbl{display:block;font-size:12px;color:var(--ink-mute);margin-bottom:3px}
/* 计划 vs 实际 对比块 */
.tm2-cmp{background:var(--canvas-tile);border-radius:10px;padding:12px 14px;margin-bottom:10px;font-size:12px}
.tm2-cmp-h{display:grid;grid-template-columns:40px 1fr 1fr;gap:8px;color:var(--ink-faint);font-size:11px;padding-bottom:6px;border-bottom:1px solid var(--hairline-soft);margin-bottom:6px}
.tm2-cmp-h span:first-child{visibility:hidden}
.tm2-cmp-row{display:grid;grid-template-columns:40px 1fr 1fr;gap:8px;align-items:center;padding:4px 0;color:var(--ink-body)}
.tm2-cmp-row .lbl{display:inline;color:var(--ink-mute);font-size:12px;font-weight:400;margin:0;width:auto}
.tm2-cmp-row .late{color:var(--danger);font-weight:600}
.tm-info .lbl{display:block;font-size:12px;color:var(--ink-mute);margin-bottom:3px}

/* ---- PC 我的日历：左迷你月历 + 右当日任务（.pcal- 独立前缀，勿与移动端 .cal- 混）---- */
.pcal-layout{display:flex;gap:18px;align-items:flex-start}
.pcal{width:300px;flex-shrink:0;background:var(--canvas);border-radius:14px;padding:14px;box-shadow:var(--shadow-sm)}
.pcal-nav{display:flex;align-items:center;gap:6px;margin-bottom:12px}
.pcal-nav .m{flex:1;text-align:center;font-size:15px;font-weight:600}
.pcal-nav .btn{padding:4px 10px}
.pcal-wh{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:11px;color:var(--ink-mute);
  font-weight:500;margin-bottom:6px}
.pcal-wh .we{color:var(--danger)}
.pcal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.pcal-cell{aspect-ratio:1;border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:3px;text-decoration:none;color:var(--ink);background:var(--canvas-tile);font-size:13px;font-weight:500;
  border:2px solid transparent;transition:background .12s,border-color .12s}
.pcal-cell:hover{background:var(--blue-tint)}
.pcal-cell.blank{background:transparent}
.pcal-cell.today{background:var(--blue);color:#fff;font-weight:600}
.pcal-cell.sel{border-color:var(--blue)}
.pcal-cell.today.sel{background:var(--blue)}
.pcal-dot{width:4px;height:4px;border-radius:50%;background:var(--blue)}
.pcal-dot.d-red{background:var(--danger)}
.pcal-dot.d-green{background:var(--success)}
.pcal-cell.today .pcal-dot{background:#fff}
.pcal-side{flex:1;min-width:0;background:var(--canvas);border-radius:14px;padding:18px 20px;box-shadow:var(--shadow-sm);
  min-height:340px}
.pcal-side-h{display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--hairline-soft)}
.pcal-tasks{margin:-4px -8px;padding:4px 8px;
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;align-content:start}
.pcal-side-h h3{margin:0;font-size:18px;font-weight:600}
.pcal-side-h .sub{color:var(--ink-mute);font-size:13px}
.pcal-tcard{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:10px;background:var(--canvas-tile);
  margin-bottom:8px;text-decoration:none;color:var(--ink);transition:background .12s}
.pcal-tcard:hover{background:var(--blue-tint)}
.pcal-tcard.overdue{background:var(--danger-tint)}
/* 按任务状态着色：只突出"要做的"待办与逾期，完成/取消无背景 */
.pcal-tcard.s-todo{background:var(--warning-tint);border-left:3px solid var(--warning)}
.pcal-tcard.s-doing{background:var(--blue-tint)}
.pcal-tcard.s-pending_review{background:var(--review-tint)}
.pcal-tcard.s-done{background:var(--canvas-tile);color:var(--ink-mute)}
.pcal-tcard.s-cancelled{background:var(--canvas-tile);color:var(--ink-mute);opacity:.6}
.pcal-main{flex:1;min-width:0}
/* 当天计划卡片：时间优先（第一行着色）→ 标题加粗 → 状态/优先级弱化在末行 */
.pcal-tasks .pcal-tcard{flex-direction:column;gap:4px;padding:10px 12px;margin-bottom:0}
.pcal-tasks .pcal-tcard .tt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;white-space:normal;margin-bottom:0}
.pcal-time{font-size:13px;font-weight:600;color:var(--blue);letter-spacing:.2px}
.pcal-time .dur{color:var(--ink-mute);font-weight:400}
.pcal-time .plan{font-weight:500}
.pcal-time .od-tag{color:var(--danger)}
.pcal-time .done-at{color:var(--success);font-weight:500}
.pcal-time .done-at.late{color:var(--danger)}
.pcal-tcard.s-doing .pcal-time{color:var(--blue)}
.pcal-tcard.s-done .pcal-time{color:var(--ink-mute)}
.pcal-tcard.s-pending_review .pcal-time{color:#8a6d00}
.pcal-tcard.overdue .pcal-time{color:var(--danger)}
.pcal-tcard .tt{display:block;font-size:14px;font-weight:600;color:var(--ink);margin-bottom:5px;line-height:1.4}
.pcal-tcard .mt{display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.pcal-tcard .chip{color:var(--ink-mute);background:var(--canvas);padding:1px 7px;border-radius:5px;font-size:11px}
.pcal-tcard .desc{display:block;width:100%;color:var(--ink-mute);font-size:12px;margin-top:5px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pcal-tcard .tm{font-size:12px;color:var(--ink-mute);flex-shrink:0;white-space:nowrap;font-weight:500}
.pcal-tcard.overdue .tm{color:var(--danger);font-weight:600}
.pcal-empty{padding:48px 0;text-align:center;color:var(--ink-mute);font-size:14px}
.od-list{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.od-item{display:flex;justify-content:space-between;gap:10px;align-items:center;background:var(--canvas);
  border-radius:8px;padding:8px 12px;text-decoration:none}
.od-item .od-title{font-size:13px;color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.od-item .od-due{font-size:12px;color:var(--danger);flex-shrink:0;white-space:nowrap}
.od-item:hover{background:var(--canvas-tile)}
.td-logs .ch{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:10px}
.td-log{position:relative;padding-left:16px;padding-bottom:10px}
.td-log:last-child{padding-bottom:0}
.td-log .tl-dot{position:absolute;left:2px;top:5px;width:6px;height:6px;border-radius:50%;background:var(--blue)}
.td-log .tl-txt{font-size:13px;color:var(--ink-body);line-height:1.4}
.td-log .tl-time{font-size:11px;color:var(--ink-faint);margin-top:2px}
@media (max-width:820px){.pcal-layout{flex-direction:column}.pcal{width:100%}}

/* ---- 「我的计划」工作台：左任务池 / 右计划列表 ---- */
.wt-head{margin-bottom:14px}
.wt-nav{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.wt-layout{display:flex;gap:16px;align-items:flex-start}

/* 顶部日期范围选择 */
.wt-list-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;padding:8px 12px;background:var(--canvas);border:1px solid var(--hairline-soft);border-radius:10px}
.wt-list-bar .wt-range{font-size:13px;color:var(--ink-mute);white-space:nowrap}
.wt-list-bar .wt-filter-kw{flex:1;min-width:200px}
.wt-range-form{display:flex;align-items:center;gap:6px;background:var(--canvas);border:1px solid var(--hairline);border-radius:8px;padding:3px 4px 3px 8px}
.wt-range-form input{font-size:13px;border:none;background:transparent;color:var(--ink);padding:2px 0;height:auto;box-sizing:content-box}
.wt-range-form input:focus{outline:none}
.wt-range-sep{color:var(--ink-mute);font-size:12px}

/* 筛选条（池 + 列表通用） */
.wt-filter{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;flex:1}
.wt-filter input[type=search],.wt-filter select,.wt-filter .btn{font-size:13px;color:var(--ink);background:var(--canvas);border:1px solid var(--hairline);border-radius:6px;padding:7px 12px;height:34px;box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease}
.wt-filter input[type=search]:focus,.wt-filter select:focus{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-tint);outline:none}
.wt-filter .btn:hover{border-color:var(--blue);color:var(--blue);background:var(--canvas)}
.wt-filter input[type=search]{flex:1;min-width:110px}
.wt-filter select{flex:1}
.wt-filter-kw{flex:1}
/* 顶部行内联筛选 */
.wt-filter-inline{margin-left:auto;justify-content:flex-end}
.wt-filter-inline .wt-filter-kw{flex:0 0 120px}
/* 左侧竖排筛选 */
.wt-filter-col{flex-direction:column;align-items:stretch;margin-bottom:10px}
.wt-filter-row{display:flex;gap:6px}
.wt-filter-acts{display:flex;gap:6px;margin-top:8px}
.wt-filter-acts .btn{height:30px;display:inline-flex;align-items:center;justify-content:center}

/* 左：任务池 */
.wt-pool{width:320px;flex-shrink:0;background:var(--canvas);border-radius:12px;padding:14px;position:sticky;top:12px;box-shadow:var(--shadow-sm);border:1px solid var(--hairline-soft)}
/* 团队计划左侧：跟随页面流，避免 sticky 吸顶导致切换成员时与右侧错位跳动 */
.wt-team-list{position:static;align-self:flex-start}
.wt-pool-h{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--ink-body);margin-bottom:12px}
.wt-pool-h .btn{margin-left:auto}
.wt-pool-h em{font-style:normal;font-size:12px;color:var(--ink-mute);background:var(--canvas);padding:1px 8px;border-radius:10px}
.wt-pool-body{display:flex;flex-direction:column;gap:8px;max-height:calc(100vh - 300px);overflow-y:auto}
.wt-pool-card{background:var(--canvas-tile);border-radius:10px;padding:12px 14px;border:1px solid var(--hairline);border-left:3px solid var(--hairline);text-decoration:none;color:inherit;transition:background .12s ease,box-shadow .12s ease}
.wt-pool-card:hover{background:var(--blue-tint);box-shadow:0 2px 8px rgba(31,35,41,.08)}
.wt-pool-card.s-urgent{border-left-color:var(--danger)}
.wt-pool-card.s-high{border-left-color:var(--warning)}
.wt-pool-card.s-normal{border-left-color:var(--hairline)}
.wt-pool-card.s-low{border-left-color:var(--hairline-soft)}
.wt-pool-card .wpc-row{display:flex;align-items:center;gap:8px}
.wt-pool-card .wpc-row1{align-items:flex-start}
.wt-pool-card .wpc-title{font-size:14px;font-weight:600;color:var(--ink);flex:1;min-width:0;line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.wt-pool-card .wpc-pri{flex-shrink:0}
.wt-pool-card .wpc-row2{margin-top:8px}
.wt-pool-card .wpc-desc{font-size:12px;color:var(--ink-mute);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5;margin-top:6px}
.wt-pool-card .wpc-due{font-size:12px;color:var(--ink-body);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wt-pool-card.overdue .wpc-due{color:var(--danger);font-weight:600}
.wt-pool-card .wpc-type{font-size:11px;color:var(--ink-mute);background:var(--canvas-tile);padding:1px 6px;border-radius:4px}
.wt-pool-card .wpc-creator{font-size:11px;color:var(--ink-faint);margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wt-pool-empty{text-align:center;color:var(--ink-faint);font-size:13px;padding:32px 0}
/* 团队计划-待排期池区块（管理员监督未安排任务） */
.wt-poolbox{background:var(--canvas);border:1px dashed var(--hairline);border-radius:10px;padding:10px 12px;margin-bottom:12px}
.wt-poolbox-h{display:flex;align-items:center;justify-content:space-between;font-size:12px;font-weight:600;color:var(--ink-mute);margin-bottom:8px}
.wt-poolbox-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;background:var(--canvas-tile);border:1px solid var(--hairline-soft);cursor:pointer}
.wt-poolbox-row:hover{background:var(--blue-tint)}
.wt-poolbox-row+.wt-poolbox-row{margin-top:6px}
.wt-pool-tip{font-size:11px;color:var(--ink-faint);text-align:center;margin-top:10px}

/* 右：计划列表 */
.wt-list{flex:1;min-width:0;background:var(--canvas);border-radius:12px;padding:14px 16px;box-shadow:var(--shadow-sm);border:1px solid var(--hairline-soft)}
.wt-list-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--hairline-soft)}
.wt-list-h .wt-range{font-weight:600;font-size:15px;color:var(--ink);text-align:left;min-width:0}
.wt-list-h em{font-style:normal;font-size:12px;color:var(--ink-mute);background:var(--canvas);padding:1px 10px;border-radius:10px}
.wt-list .pcal-tcard{background:var(--canvas);text-decoration:none;align-items:center}
.wt-list .pcal-tcard:hover{background:var(--blue-tint)}
.wt-list-empty{text-align:center;color:var(--ink-faint);font-size:14px;padding:48px 0}

/* 右：计划列表（表格，复用 .tbl 飞书风格） */
.wt-tbl td,.wt-tbl th{white-space:nowrap}
.wt-tbl td:first-child,.wt-tbl th:first-child{border-radius:0}
.wt-td-date{white-space:nowrap}
.wt-td-date small{color:var(--ink-mute)}
.wt-td-delay{font-size:11px;font-weight:600;color:var(--danger);background:var(--danger-tint);padding:0 5px;border-radius:4px;margin-left:6px;vertical-align:middle}
@media (max-width:820px){.wt-layout{flex-direction:column}.wt-pool{width:100%;position:static}}
/* 团队计划：左侧成员列表卡片 */
.wt-team-list .wt-count{margin-left:auto;font-size:12px;color:var(--ink-mute);font-weight:400}
.wt-card{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;background:var(--canvas-tile);border:1px solid var(--hairline-soft);text-decoration:none;color:var(--ink);transition:background .12s}
.wt-card:hover{background:var(--blue-tint)}
.wt-card.sel{background:var(--blue-tint);border-color:var(--blue);box-shadow:inset 3px 0 0 var(--blue)}
.wt-card-main{flex:1;min-width:0}
.wt-card-tt{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wt-card-sub{font-size:11px;color:var(--ink-mute);margin-top:1px}
.wt-list-bar .wt-who{margin-left:auto;display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--ink)}
.hide{display:none!important}
.chart-box{position:relative;height:180px}

/* ---- 团队日历（§12.2 色块视图） ---- */
.tcal-table{width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed}
.tcal-table th,.tcal-table td{padding:0;border-bottom:1px solid var(--hairline-soft);text-align:center;vertical-align:middle}
.tcal-table th:first-child{width:110px}
.tcal-table th{width:calc((100% - 110px) / 7)}
.tcal-table th{font-weight:500;font-size:12px;color:var(--ink-mute)}
.tcal-table th .wd{display:block;font-size:11px;line-height:1.4;margin-top:8px}
.tcal-table th .dd{display:block;font-size:14px;font-weight:600;color:var(--ink);line-height:1.5;padding-bottom:8px}
.tcal-table th.today .dd{color:var(--blue)}
.tcal-table th.weekend{color:var(--ink-faint)}
.tcal-table td.tcal-name{text-align:left;font-weight:500;color:var(--ink);font-size:13px;white-space:nowrap;padding:0 12px}
.tcal-cell{height:40px;cursor:pointer;transition:filter .12s ease;background:var(--canvas-tile);color:var(--ink-mute);position:relative}
.tcal-cell .cnt{font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}
.tcal-cell.green{background:var(--success-tint);color:var(--success)}
.tcal-cell.yellow{background:var(--warning-tint);color:var(--warning)}
.tcal-cell.red{background:var(--danger-tint);color:var(--danger)}
.tcal-cell.weekend{opacity:.55}
.tcal-cell.today::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--blue)}
.tcal-cell:hover{filter:brightness(.95)}
.tcal-foot td{border-bottom:none;background:var(--canvas-tile);font-size:11px;padding:6px 0;line-height:1.7;color:var(--ink-body)}
.tcal-foot .tcal-sum{white-space:nowrap}
.tcal-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:12px;color:var(--ink-body);font-size:13px}
.tcal-legend .lg{display:inline-flex;align-items:center;gap:6px}
.tcal-legend .sw{width:12px;height:12px;border-radius:3px;display:inline-block}
.tcal-legend .sw.red{background:var(--danger-tint);outline:1px solid color-mix(in srgb,var(--danger) 40%,transparent)}
.tcal-legend .sw.yellow{background:var(--warning-tint);outline:1px solid color-mix(in srgb,var(--warning) 40%,transparent)}
.tcal-legend .sw.green{background:var(--success-tint);outline:1px solid color-mix(in srgb,var(--success) 40%,transparent)}
.tcal-legend .sw.gray{background:var(--canvas-tile);outline:1px solid var(--hairline)}
.tcal-legend .note{margin-left:auto;color:var(--ink-mute);font-size:12px}
/* 点格弹框：当天任务明细 */
.tday-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 8px;border-bottom:1px solid var(--hairline-soft);border-radius:8px;margin:0 -8px;cursor:pointer;transition:background .12s ease}
.tday-row:last-child{border-bottom:none}
.tday-row:hover{background:var(--blue-tint)}
.tday-row .tdlink{color:var(--ink);font-size:14px;font-weight:500;text-decoration:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.tday-row:hover .tdlink{color:var(--blue)}
.tday-meta{display:flex;align-items:center;gap:6px;flex-shrink:0}
.tday-type{font-size:11px;color:var(--ink-mute);background:var(--canvas-tile);padding:1px 6px;border-radius:4px}
.tday-chev{color:var(--ink-faint);transition:color .12s ease,transform .12s ease}
.tday-row:hover .tday-chev{color:var(--blue);transform:translateX(2px)}
.nrow.unread{background:var(--blue-tint)}
.ndot{width:10px;color:var(--blue);text-align:center}
/* 公告标题：可点击查看详情（蓝色链接感，未读加粗） */
.ann-title{color:var(--ink);text-decoration:none;cursor:pointer;display:inline-block}
.ann-title:hover{color:var(--blue);text-decoration:underline}
.ann-title.unread{font-weight:600}
/* 公告接收范围单选：横排，避开 .field label 的 block 覆盖 */
.ann-audience{display:flex;gap:24px;align-items:center}
.ann-radio{display:inline-flex;align-items:center;gap:6px;font-weight:400;margin:0;cursor:pointer;white-space:nowrap}

/* ---- 空状态 ---- */
.empty{text-align:center;padding:48px 16px;color:var(--ink-mute)}
.empty .ico{display:block;margin:0 auto 12px;color:var(--ink-faint)}

/* ---- Toast ---- */
#toasts{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:9999;display:flex;
  flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{min-width:240px;max-width:90vw;padding:12px 16px;border-radius:var(--radius-sm);background:#fff;
  box-shadow:0 4px 16px rgba(0,0,0,.12);border-left:4px solid var(--blue);display:flex;align-items:center;gap:8px;pointer-events:auto}
.toast.success{border-left-color:var(--success);background:var(--success-tint)}
.toast.error{border-left-color:var(--danger);background:var(--danger-tint)}
.toast .close{margin-left:auto;cursor:pointer;color:var(--ink-mute)}

/* =========================================================================
   PC 布局（§6.7）
   ========================================================================= */
body.pc{display:flex}
.pc .nav{width:220px;background:#fff;height:100vh;overflow:auto;border-right:1px solid var(--hairline-soft);
  padding:12px 0;flex-shrink:0}
.pc .nav .grp{font-size:12px;color:var(--ink-mute);font-weight:500;margin:16px 12px 4px}
.pc .nav a{display:flex;align-items:center;gap:8px;padding:9px 16px;color:var(--ink-body);font-size:14px}
.pc .nav a svg{width:20px;height:20px;flex-shrink:0}
.pc .nav a:hover{background:var(--canvas-tile);color:var(--ink)}
.pc .nav a.on{background:var(--blue-tint);color:var(--blue);font-weight:500;box-shadow:inset 3px 0 0 var(--blue)}
.pc .nav a.on svg{color:var(--blue)}
.pc .main{flex:1;display:flex;flex-direction:column;min-width:0;height:100vh}
.pc .topbar{height:52px;display:flex;align-items:center;justify-content:space-between;
  padding:0 24px;border-bottom:1px solid var(--hairline-soft);background:#fff;flex-shrink:0}
.pc .topbar h1{font-size:20px;font-weight:700}
.pc .topbar .me{display:flex;align-items:center;gap:8px;color:var(--ink-body);font-size:14px}
.pc .topbar .me-link{text-decoration:none;color:var(--ink-body)}
.pc .topbar .me-link:hover{color:var(--blue)}
.pc .topbar .me-sep{color:var(--ink-faint)}
.pc .topbar .me-link svg{vertical-align:-3px}
.pc .topbar .topbar-bell{position:relative;display:inline-flex;align-items:center;text-decoration:none;color:var(--ink-body)}
.pc .topbar .topbar-bell:hover{color:var(--blue)}
.pc .topbar .topbar-bell svg{vertical-align:-3px}
.pc .topbar .topbar-bell .badge{position:absolute;top:-6px;right:-8px;min-width:15px;padding:0 4px;font-size:9px;line-height:15px}
.pc .content{padding:24px;overflow:auto;flex:1}
.pc .metrics{display:flex;gap:16px;margin-bottom:24px;flex-wrap:wrap}
.pc .metric{padding:20px;border-radius:var(--radius);min-width:140px;text-decoration:none;color:var(--ink);box-shadow:var(--shadow-sm)}
.pc .metric .num{font-size:24px;font-weight:700}
.pc .metric .lbl{color:var(--ink-mute);font-size:13px}

/* 首页任务池概览卡片（任务池模式：待排期/今日该开始/临近完成/已延期回池） */
.pc .pool-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.pc .pmetric{padding:16px 18px;border-radius:var(--radius);background:var(--canvas);border:1px solid var(--hairline);
  display:flex;flex-direction:column;gap:2px;transition:border-color .15s ease,box-shadow .15s ease}
.pc .pmetric:hover{border-color:var(--blue);box-shadow:var(--ring)}
.pc .pmetric-static{cursor:default}
.pc .pmetric-static:hover{border-color:var(--hairline);box-shadow:none}
.pc .pmetric .pm-num{font-size:28px;font-weight:700;line-height:1.1}
.pc .pmetric .pm-lbl{font-size:14px;font-weight:500;color:var(--ink);margin-top:4px}
.pc .pmetric .pm-hint{font-size:12px;color:var(--ink-mute)}

/* =========================================================================
   移动端布局（§6.8）
   ========================================================================= */
body.m{max-width:480px;margin:0 auto;background:var(--canvas-tile);min-height:100vh;position:relative;
  box-shadow:0 0 24px rgba(0,0,0,.04)}
/* 移动端：滚动条永远占位，避免切 tab / 视图时 fixed 底栏因滚动条宽窄变化而左右晃动 */
body.m{overflow-y:scroll}
body.m .topnav{position:sticky;top:0;height:52px;display:flex;align-items:center;justify-content:space-between;
  padding:0 12px;background:rgba(255,255,255,.85);backdrop-filter:saturate(180%) blur(14px);z-index:10;
  border-bottom:1px solid var(--hairline-soft)}
body.m .topnav .title{font-size:17px;font-weight:600;letter-spacing:-.01em}
body.m .topnav a{color:var(--ink);display:inline-flex}
body.m .topnav .tn-side{flex:1;min-width:24px;display:flex;align-items:center}
body.m .topnav .tn-left{justify-content:flex-start}
body.m .topnav .tn-right{justify-content:flex-end}
body.m .content{padding:12px;padding-bottom:84px}
body.m .content.no-tab{padding-bottom:24px}
body.m .tabbar{position:fixed;bottom:0;left:0;right:0;margin:0 auto;max-width:480px;
  height:60px;display:flex;background:rgba(255,255,255,.92);backdrop-filter:blur(14px);
  border-top:1px solid var(--hairline-soft);z-index:10;padding-bottom:env(safe-area-inset-bottom)}
body.m .tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  color:var(--ink-mute);font-size:10px;text-decoration:none;transition:color .15s ease}
body.m .tabbar a svg{width:22px;height:22px}
body.m .tabbar a.on{color:var(--blue)}
body.m .tabbar .t-ico{position:relative;display:inline-flex}
body.m .tabbar .t-ico .badge{position:absolute;top:-6px;right:-12px;min-width:15px;padding:0 4px;
  line-height:15px;font-size:9px}
body.m .fab{position:fixed;bottom:76px;right:max(16px,calc(50% - 240px + 16px));width:56px;height:56px;border-radius:50%;
  background:var(--blue);color:#fff;border:none;box-shadow:0 6px 16px rgba(51,112,255,.4);z-index:11;
  display:flex;align-items:center;justify-content:center;transition:transform .15s ease,box-shadow .15s ease}
body.m .fab:active{transform:scale(.92);box-shadow:0 3px 10px rgba(51,112,255,.5)}
body.m .fab svg{width:26px;height:26px}
.task-card{display:block;background:#fff;border-radius:14px;padding:0;margin-bottom:10px;
  box-shadow:var(--shadow-sm);color:var(--ink);position:relative;overflow:hidden;
  transition:transform .12s ease,box-shadow .12s ease;text-decoration:none;
  border:1px solid var(--hairline);box-sizing:border-box}
.task-card:active{transform:scale(.99)}
.task-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px}
.task-card.s-todo::before{background:var(--warning)}
.task-card.s-doing::before{background:var(--blue)}
.task-card.s-pending_review::before{background:var(--review)}
.task-card.s-done::before{background:var(--success)}
.task-card.s-cancelled::before{background:var(--hairline)}
/* 彩色边框：边框色跟随状态色（待办橙→最醒目，进行中蓝，完成淡化） */
.task-card.s-todo{border-color:rgba(255,136,0,.35)}
.task-card.s-doing{border-color:rgba(51,112,255,.35)}
.task-card.s-pending_review{border-color:rgba(122,90,248,.35)}
.task-card.s-done{border-color:var(--hairline);background:#ECEDEF;opacity:1}
.task-card.s-done .tc-top{padding-top:8px}
.task-card.s-cancelled{border-color:var(--hairline)}
/* 状态浅色背景：扫描时一眼区分；done/cancelled 更弱以衬托待办 */
.task-card.s-done .tc-type,.task-card.s-cancelled .tc-type{background:var(--canvas-tile)}
.task-card.s-done .tc-due,.task-card.s-cancelled .tc-due{color:var(--ink-mute)}
/* 逾期任务：浅红底 + 红色边条，强提示（覆盖状态色） */
.task-card.overdue{background:var(--danger-tint);border-color:rgba(244,74,69,.5)}
.task-card.overdue::before{background:var(--danger)}
.task-card .tc-top{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px 0}
.task-card .tc-type{display:inline-block;padding:2px 8px;border-radius:5px;font-size:11px;
  background:var(--canvas-tile);color:var(--ink-body);font-weight:500}
.task-card .tc-type .prio-dot{display:inline-block;width:6px;height:6px;border-radius:50%;
  margin-right:5px;vertical-align:middle}
.task-card .tc-type .prio-dot.p-urgent{background:var(--danger)}
.task-card .tc-type .prio-dot.p-high{background:var(--warning)}
.task-card .tc-type .prio-dot.p-low{background:var(--ink-faint)}
.task-card .tc-title{font-weight:600;font-size:15px;line-height:1.45;padding:8px 16px 10px;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.task-card.s-done .tc-title{color:var(--ink-body)}
.task-card.s-cancelled .tc-title{text-decoration:line-through;color:var(--ink-faint)}
.task-card .tc-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:0 16px 12px;font-size:12px;color:var(--ink-mute);border-top:1px solid var(--hairline-soft);
  margin:0 16px;padding:10px 0}
.task-card .tc-due{display:inline-flex;align-items:center;gap:3px}
.task-card .tc-due.overdue{color:var(--danger);font-weight:600}
.task-card .tc-assignee{display:inline-flex;align-items:center;gap:4px;background:var(--canvas-tile);
  padding:3px 10px;border-radius:12px;font-size:11px}

/* 任务详情（卡片浮于灰底，与列表页一致） */
.td-head{background:var(--canvas);border-radius:14px;box-shadow:var(--shadow-sm);padding:16px;margin-bottom:12px}
.td-tagrow{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.td-tagrow .tag-row{margin-bottom:0}
.td-tools{display:flex;align-items:center;gap:4px;flex-shrink:0}
.td-tools .tool{display:flex;align-items:center;justify-content:center;width:34px;height:34px;
  border:none;background:none;color:var(--ink-mute);border-radius:50%;cursor:pointer;
  -webkit-tap-highlight-color:transparent}
.td-tools .tool:hover{background:var(--canvas-tile);color:var(--ink)}
.td-tools .tool.danger:hover{background:var(--danger-tint);color:var(--danger)}
.td-title{font-size:18px;font-weight:600;line-height:1.4;letter-spacing:-.01em;margin:0 0 8px;color:var(--ink)}
.td-title.cancelled{text-decoration:line-through;color:var(--ink-faint)}
.td-desc{white-space:pre-wrap;color:var(--ink-body);font-size:14px;line-height:1.6;margin:0}
.td-info{background:var(--canvas);border-radius:14px;box-shadow:var(--shadow-sm);margin-bottom:16px;overflow:hidden}
.td-info .row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;font-size:13px}
.td-info .row+.row{border-top:1px solid var(--hairline-soft)}
.td-info .k{color:var(--ink-mute);flex-shrink:0}
.td-info .v{color:var(--ink);font-weight:500;text-align:right;word-break:break-word}
.td-info .v.overdue{color:var(--danger)}
/* 排期 vs 实际 三列对比（计划/实际，复用 td-info 白卡样式） */
.td-cmp .cmp-row{display:flex;align-items:center;gap:12px;padding:12px 16px;font-size:13px}
.td-cmp .cmp-row+.cmp-row{border-top:1px solid var(--hairline-soft)}
.td-cmp .k{color:var(--ink-mute);flex:0 0 44px}
.td-cmp .plan,.td-cmp .act,.td-cmp .col-h{flex:1;text-align:right;word-break:break-word}
.td-cmp .plan{color:var(--ink);font-weight:500}
.td-cmp .act{color:var(--ink-mute)}
.td-cmp .col-h{font-size:11px;color:var(--ink-faint)}
/* 图片预览层：黑底弹层，图片可双指缩放/拖动（微信内跳原图会铺满屏，改为页内预览） */
.img-preview{background:rgba(0,0,0,.92);z-index:100;display:none}
.img-preview.show{display:flex;align-items:center;justify-content:center}
.img-preview-box{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}
.img-preview-box img{max-width:94vw;max-height:80vh;object-fit:contain;border-radius:6px;background:#000}
.img-preview-close{position:absolute;top:14px;right:14px;z-index:2;width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.15);color:#fff;border:none;font-size:16px;cursor:pointer;line-height:32px;text-align:center}
.td-acts{position:fixed;bottom:0;left:0;right:0;margin:0 auto;max-width:480px;
  padding:10px 16px calc(10px + env(safe-area-inset-bottom));background:var(--canvas);
  border-top:1px solid var(--hairline-soft);display:flex;flex-wrap:wrap;gap:8px;z-index:20;box-sizing:border-box;
  box-shadow:0 -2px 12px rgba(31,35,41,.04)}
.td-acts form{flex:1 1 0;min-width:0;display:flex}
.td-acts .btn{flex:1;justify-content:center;padding:12px;font-size:15px}
.td-notice{flex:1 1 100%;color:var(--ink-body);text-align:center;font-size:13px;padding:12px;margin:0}
.td-review{flex:1 1 100%;background:var(--danger-tint);border-radius:12px;padding:12px;box-sizing:border-box}
.td-review label{display:block;font-size:12px;color:var(--danger);font-weight:600;margin-bottom:6px}
.td-review textarea{width:100%;background:var(--canvas);margin-bottom:8px;min-height:56px}
.td-review .btn.danger{width:100%;justify-content:center}
.td-more{flex:1 1 0;min-width:0;display:flex}
.td-more .btn{flex:1;justify-content:center;font-family:inherit;font-size:15px;
  padding:12px;color:var(--danger);background:var(--canvas);border:1px solid var(--danger)}
.td-more .btn:hover{background:var(--danger-tint)}
.td-comments .ch{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:12px}
.td-c{display:flex;gap:10px;margin-bottom:16px}
.td-c .av{width:30px;height:30px;border-radius:50%;background:var(--blue-tint);color:var(--blue);
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}
.td-c .body{flex:1;min-width:0}
.td-c .nm{display:flex;align-items:center;gap:6px;margin-bottom:4px}
.td-c .nm b{font-size:13px;font-weight:600;color:var(--ink)}
.td-c .nm time{font-size:11px;color:var(--ink-mute);margin-left:auto}
.td-c .txt{background:var(--canvas-tile);border-radius:2px 12px 12px 12px;padding:9px 12px;
  font-size:14px;line-height:1.5;color:var(--ink);white-space:pre-wrap;word-break:break-word}
.td-c-empty{color:var(--ink-mute);font-size:13px;text-align:center;padding:6px 0 14px}
.td-c-form{display:flex;gap:8px;margin-top:6px}
.td-c-form input{flex:1}
.td-c-form .btn{flex-shrink:0}

/* 复核开关（卡片式自定义复选框） */
.review-toggle{background:var(--canvas);border:1px solid var(--hairline-soft);border-radius:var(--radius-sm);
  padding:14px 16px;margin-bottom:12px}
.review-toggle label{display:flex;align-items:flex-start;gap:12px;cursor:pointer}
.review-toggle input{position:absolute;opacity:0;width:0;height:0}
.rt-box{width:20px;height:20px;border:2px solid var(--hairline);border-radius:6px;flex-shrink:0;
  margin-top:1px;position:relative;transition:all .18s ease}
.review-toggle input:checked + .rt-box{background:var(--blue);border-color:var(--blue)}
.review-toggle input:checked + .rt-box::after{content:"";position:absolute;left:5px;top:1px;width:6px;height:11px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
.rt-text{display:flex;flex-direction:column;gap:2px}
.rt-title{font-size:14px;font-weight:500;color:var(--ink)}
.rt-desc{font-size:12px;color:var(--ink-mute);line-height:1.4}

/* 人员标签式多选（替代 select multiple） */
.chip-list{display:flex;flex-wrap:wrap;gap:8px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border:1px solid var(--hairline);
  border-radius:20px;background:var(--canvas);color:var(--ink-body);font-size:13px;cursor:pointer;
  user-select:none;transition:all .15s ease}
.chip:hover{border-color:var(--blue);color:var(--blue)}
.chip.on{background:var(--blue);border-color:var(--blue);color:#fff}
.chip .dot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.5}
.chip.on .dot{opacity:1}
.chip-more{display:none}
.chip-list.show-all .chip-more{display:inline-flex}
.chip-toggle{margin-top:8px;background:none;border:none;color:var(--blue);font-size:13px;cursor:pointer;padding:4px 0}

/* 固定底部提交栏 */
.form-submit-bar{position:fixed;bottom:0;left:0;right:0;margin:0 auto;max-width:480px;
  padding:12px 16px calc(12px + env(safe-area-inset-bottom));background:var(--canvas);
  border-top:1px solid var(--hairline-soft);display:flex;gap:8px;z-index:20;box-sizing:border-box;
  box-shadow:0 -2px 12px rgba(31,35,41,.04)}
.form-submit-bar .btn{justify-content:center;font-size:15px}

/* 视图切换（列表 / 日历） */
.m .view-toggle{display:flex;position:relative;background:var(--canvas-tile);border-radius:12px;padding:3px;margin-bottom:14px}
.m .view-toggle .vt-slider{position:absolute;top:3px;bottom:3px;left:3px;width:calc(50% - 3px);border-radius:9px;
  background:var(--canvas);box-shadow:var(--shadow-sm);transition:transform .22s cubic-bezier(.4,0,.2,1)}
.m .view-toggle a{position:relative;z-index:1;flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 0;
  font-size:13px;font-weight:500;color:var(--ink-mute);border-radius:9px;text-decoration:none;
  transition:color .18s ease}
.m .view-toggle a svg{width:15px;height:15px}
.m .view-toggle a.on{color:var(--blue)}

/* 状态筛选条 */
/* 移动端任务池概览条（任务池模式：四指标横排，点击跳对应视图） */
.task-card .tc-delay{display:inline-block;margin-left:4px;padding:0 5px;border-radius:8px;
  background:var(--danger-tint);color:var(--danger);font-size:10px;font-weight:600;line-height:15px}


/* 分组标题 */
.sec-head{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;
  color:var(--ink-body);margin:12px 2px 8px}
.sec-head .cnt{font-weight:400;color:var(--ink-mute);font-size:12px}
.sec-head .sec-toggle{margin-left:auto;font-size:11px;color:var(--ink-mute)}  /* 展开文字靠右，对齐计划 tab */
.sec-head.danger{color:var(--danger)}
.sec-head.warn{color:var(--warning)}

/* 指派人选择触发器 + 列表（单选弹框） */
.pick-trigger{display:flex;align-items:center;justify-content:space-between;width:100%;
  padding:10px 12px;border:1px solid var(--hairline);border-radius:var(--radius-sm);
  background:var(--canvas);color:var(--ink);font-size:14px;cursor:pointer;
  transition:border-color .15s ease,box-shadow .15s ease}
.pick-trigger:active{border-color:var(--blue);box-shadow:var(--ring)}
.pick-row .av{width:28px;height:28px;border-radius:50%;background:var(--blue-tint);color:var(--blue);
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}
.pick-trigger .chev{color:var(--ink-mute);flex-shrink:0}
.pick-list{display:flex;flex-direction:column}
.pick-row{display:flex;align-items:center;gap:10px;padding:9px 8px;border-radius:8px;cursor:pointer;transition:background .12s ease}
.pick-row:active{background:var(--canvas-tile)}
.pick-row .nm{flex:1;font-size:14px;color:var(--ink)}
.pick-row .ck{color:var(--blue);display:none;flex-shrink:0}
.pick-row .ck svg{width:18px;height:18px}
.pick-row.on{background:var(--blue-tint)}
.pick-row.on .ck{display:inline-flex}
/* 截止时间快捷预设 */
.dt-presets{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.dt-presets .chip{padding:5px 12px;font-size:12px}

/* 月历（周历条复用 .weekbar，此处仅留当日任务列表标题样式）*/
.cal-sel-head{margin:0 0 10px;font-size:14px;font-weight:600;color:var(--ink)}

/* ---- 移动端字号微调：辅助信息整体抬一档，提升手机可读性（仅 body.m 生效） ---- */
body.m .tag{font-size:13px}
body.m .task-card .tc-type{font-size:12px}
body.m .task-card .tc-meta{font-size:13px}
body.m .task-card .tc-assignee{font-size:12px}

/* ---- 移动端任务卡片紧凑版：缩小各段 padding，一屏多展示几条（body.m 生效，不误伤 PC） ---- */
body.m .task-card{margin-bottom:8px;border-radius:10px}
body.m .task-card .tc-top{padding:9px 12px 0}
body.m .task-card .tc-type{padding:1px 7px;font-size:11px}
body.m .task-card .tc-title{font-size:14px;line-height:1.35;padding:5px 12px 2px}
body.m .task-card .tc-meta{padding:0 12px 8px;margin:0 12px;padding:3px 0;font-size:12px}
body.m .task-card .tc-due{font-size:12px}
body.m .task-card .tc-assignee{padding:2px 8px;font-size:11px;border-radius:10px}
body.m .td-c .nm time{font-size:12px}
body.m .td-review label{font-size:13px}
body.m .rt-desc{font-size:13px}
body.m .sec-head .cnt{font-size:13px}
body.m .dt-presets .chip{font-size:13px}
body.m .filter-chips a{font-size:13px}

/* ---- 移动端团队管理（仅管理员） ---- */
.mteam-summary{display:flex;gap:10px;margin-bottom:14px}
.mteam-summary .ms-card{flex:1;background:var(--canvas);border-radius:14px;box-shadow:var(--shadow-sm);padding:14px;text-align:center}
.mteam-summary .num{font-size:26px;font-weight:700;color:var(--ink);line-height:1.1;font-variant-numeric:tabular-nums}
.mteam-summary .num .sm{font-size:15px;color:var(--ink-mute);font-weight:600}
.mteam-summary .lbl{font-size:12px;color:var(--ink-mute);margin-top:2px}
.mteam-summary .ms-hint{font-size:10px;color:var(--ink-faint);margin-top:2px;line-height:1.3}
.mr-name{font-size:15px;font-weight:600;color:var(--ink)}
.mr-dept{font-size:12px;color:var(--ink-mute);font-weight:400;margin-left:6px}
.mr-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:3px;font-size:12px;color:var(--ink-mute)}
.mteam-tag{flex-shrink:0;padding:3px 10px;border-radius:10px;font-size:12px;font-weight:500}
.mteam-tag.ok{color:var(--success);background:var(--success-tint)}
.mteam-tag.missing{color:var(--danger);background:var(--danger-tint)}
.mteam-tag.none{color:var(--ink-mute);background:var(--canvas-tile)}

/* ---- 移动端团队周历色块（表头与成员行共用 8 列 grid，列对齐） ---- */
.mtcell{height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;background:var(--canvas-tile);color:var(--ink-mute);cursor:pointer;-webkit-tap-highlight-color:transparent;text-decoration:none}
.mtcell:active{transform:scale(.92)}
.mtcell.green{background:var(--success-tint);color:var(--success)}
.mtcell.yellow{background:var(--warning-tint);color:var(--warning)}
.mtcell.red{background:var(--danger-tint);color:var(--danger)}
.mtcell.we{opacity:.55}
.mtcell.today{box-shadow:inset 0 0 0 1.5px rgba(51,112,255,.5)}
.mtcell.on{box-shadow:0 0 0 2px var(--blue);transform:scale(1.06);z-index:1}
.mtcell.on.today{box-shadow:0 0 0 2px var(--blue)}

/* 团队日历下方：选中某人某天的任务列表 */
.msh-name{font-size:15px;font-weight:600;color:var(--ink)}
.msh-date{font-size:13px;color:var(--ink-mute)}
.msh-cnt{font-size:12px;color:var(--ink-mute)}
.msh-clear{margin-left:auto;font-size:12px;color:var(--blue)}

/* 移动端团队日历点格弹框：当天任务明细 */

/* 查看某成员任务时的顶部提示条 */
.target-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--blue-tint);
  border-radius:12px;padding:10px 14px;margin-bottom:12px}
.target-bar span{font-size:14px;font-weight:600;color:var(--blue)}
.target-bar .tbtn{font-size:12px;color:var(--blue);border:1px solid var(--blue);border-radius:8px;padding:4px 10px;flex-shrink:0}

/* ---- 移动端统计：个人提交表现 ---- */
.mstat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}

/* 今日缺交类型提示（统计页 + 任务列表复用） */

/* PC 端今日缺交提示 */

/* 首页缺交重点卡片 */
.miss-banner{display:flex;align-items:center;gap:16px;background:var(--danger-tint);
  border:1px solid var(--danger);border-radius:var(--radius);padding:18px 20px;margin-bottom:18px}
.miss-banner .mb-icon{width:40px;height:40px;border-radius:50%;background:var(--danger);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;flex-shrink:0}
.miss-banner .mb-main{flex:1;min-width:0}
.miss-banner .mb-title{font-size:16px;font-weight:600;color:var(--danger);margin-bottom:8px}
.miss-banner .mb-types{display:flex;flex-wrap:wrap;gap:8px}
.miss-banner .mb-chip{font-size:13px;font-weight:500;color:var(--danger);background:#fff;
  border:1px solid var(--danger);padding:4px 14px;border-radius:14px}
.miss-banner .mb-go{flex-shrink:0;font-size:14px;font-weight:500;color:#fff;background:var(--danger);
  padding:8px 18px;border-radius:var(--radius-sm);text-decoration:none}
.miss-banner .mb-go:hover{filter:brightness(.92)}

/* 移动端缺交重点卡片（复用 PC miss-banner，紧凑适配） */
body.m .miss-banner{padding:14px 16px;gap:12px;border-radius:14px;margin-bottom:14px}
body.m .miss-banner .mb-icon{width:36px;height:36px;font-size:17px}
body.m .miss-banner .mb-title{font-size:15px;margin-bottom:6px}
body.m .miss-banner .mb-chip{font-size:12px;padding:3px 12px}
body.m .miss-banner .mb-go{font-size:13px;padding:7px 14px}

/* 通知页面内 toast（右下角卡片，不依赖授权） */
#notify-toasts{position:fixed;right:24px;bottom:24px;z-index:200;display:flex;flex-direction:column;gap:12px;max-width:380px}
.notify-toast{display:flex;align-items:flex-start;gap:12px;background:var(--canvas);border-radius:14px;
  padding:16px 18px;box-shadow:0 12px 36px rgba(31,35,41,.22);border:1px solid var(--hairline-soft);
  border-left:4px solid var(--blue);text-decoration:none;color:var(--ink);cursor:pointer;
  transform:translateX(0);transition:transform .3s ease,opacity .3s ease;opacity:1}
.notify-toast:hover{transform:translateX(-3px);box-shadow:0 14px 40px rgba(31,35,41,.26)}
.notify-toast.out{transform:translateX(120%);opacity:0}
.notify-toast .nt-logo{width:36px;height:36px;border-radius:8px;object-fit:cover;flex-shrink:0;background:var(--canvas-tile)}
.notify-toast .nt-main{flex:1;min-width:0}
.notify-toast .nt-title{font-size:12px;color:var(--ink-mute);margin-bottom:3px}
.notify-toast .nt-body{font-size:14px;line-height:1.5;color:var(--ink);word-break:break-word;font-weight:500}

/* 桌面通知授权引导横幅 */
.notify-banner{display:flex;align-items:center;gap:14px;background:var(--blue-tint);border:1px solid var(--blue);
  border-radius:var(--radius);padding:12px 16px;margin-bottom:16px}
.notify-banner .nb-text{flex:1;font-size:13px;color:var(--ink-body)}
.notify-banner .nb-close{border:none;background:none;color:var(--ink-mute);font-size:14px;cursor:pointer;
  width:24px;height:24px;border-radius:6px;flex-shrink:0}
.notify-banner .nb-close:hover{background:rgba(51,112,255,.12);color:var(--ink)}

/* 仪表盘：提交率 + 重点关注 + 最近动态 */

/* 全公司统计：部门维度 + 可排序表格 */
#rank-table th.sortable{cursor:pointer;user-select:none}
#rank-table th.sortable:hover{color:var(--blue)}
#rank-table th.sort-on{color:var(--blue)}
#rank-table .sort-arrow{font-size:10px;color:var(--ink-faint)}


/* 提交规则：按类型卡片勾选 */

/* 提交规则：矩阵表格（行=成员，列=任务类型） */

/* flatpickr 飞书风覆盖（弹框内日历与设计 token 对齐） */
.flatpickr-calendar{border-radius:12px;box-shadow:var(--shadow);border:1px solid var(--hairline);font-family:inherit}
.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange{background:var(--blue);border-color:var(--blue)}
.flatpickr-day.inRange{background:var(--blue-tint);border-color:var(--blue-tint);box-shadow:-5px 0 0 var(--blue-tint),5px 0 0 var(--blue-tint)}
.flatpickr-day.today{border-color:var(--blue)}
.flatpickr-day.today.selected{border-color:var(--blue)}
.flatpickr-monthSelect-month.selected{background:var(--blue)}
span.flatpickr-weekday{color:var(--ink-mute)}
.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:var(--ink-mute)}
.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:var(--ink-mute)}

/* 团队计划周视图：人×天网格 */
.tplan-scroll{overflow-x:auto}
.tplan-grid{min-width:880px;border-collapse:separate;border-spacing:0}
.tplan-grid th,.tplan-grid td{border-bottom:1px solid var(--hairline-soft);border-right:1px solid var(--hairline-soft);padding:0;vertical-align:top}
.tplan-grid thead th{position:sticky;top:0;background:var(--canvas-tile);text-align:center;font-size:12px;color:var(--ink-mute);padding:8px 4px;font-weight:500;z-index:2}
.tplan-grid thead th small{font-size:11px}
.tplan-name{position:sticky;left:0;background:var(--canvas);z-index:1;min-width:96px;padding:10px 12px;display:flex;align-items:center;gap:8px;box-shadow:1px 0 0 var(--hairline-soft)}
.tplan-day{min-width:108px}
.tplan-grid thead th.today{color:var(--blue);font-weight:600}
.tplan-cell{min-height:64px;height:100%}
.tplan-cell.today{background:var(--blue-tint)}
/* 周历条（计划页/任务tab共用） */
.weekbar{background:var(--canvas-tile);border-radius:12px;padding:10px 12px;margin:0 0 12px}
.weekbar .wb-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.weekbar .wb-label{font-size:14px;font-weight:600;color:var(--ink)}
.weekbar .wb-arrow{width:30px;height:30px;display:flex;align-items:center;justify-content:center;
  border-radius:8px;color:var(--ink-mute);text-decoration:none;font-size:18px}
.weekbar .wb-arrow:active{background:rgba(0,0,0,.05)}
.weekbar .wb-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.weekbar .wb-dot{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);
  width:4px;height:4px;border-radius:50%}
.weekbar .wb-dot.d-red{background:var(--danger)}
.weekbar .wb-dot.d-green{background:var(--success)}
.weekbar .wb-dot.d-blue{background:var(--blue)}

/* 计划页：池子展开区 + 天分段样式见下方精修版 */
/* 底部弹层 sheet */
.modal-back.sheet{align-items:flex-end;padding:0}  /* 底部弹层贴屏幕底部 */
.modal-back.sheet .sheet-box{background:var(--canvas);border-radius:16px 16px 0 0;width:100%;max-width:420px;
  margin:0 auto;padding:0;transform:translateY(100%);transition:transform .25s;box-shadow:0 -4px 24px rgba(0,0,0,.12)}
.modal-back.sheet.show{display:flex}
.modal-back.sheet.show .sheet-box{transform:none}
.sheet-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px 8px}
.sheet-head #schedTitle{font-size:15px;font-weight:600;color:var(--ink)}
.sheet-x{border:none;background:none;font-size:18px;color:var(--ink-mute)}
.sheet-body{padding:4px 18px 12px}
.sheet-body .field{margin-bottom:12px}
.sheet-body .field label{display:block;font-size:13px;color:var(--ink-mute);margin-bottom:6px}
/* 排期弹框任务信息区：类型/优先级/截止/派给人 */
.sheet-info{background:var(--canvas-tile);border-radius:8px;padding:6px 12px;margin:0 0 12px}
.sheet-info .si-row{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px}
.sheet-info .si-lbl{flex:none;width:52px;color:var(--ink-mute)}
.sheet-info .si-val{flex:1;color:var(--ink);font-weight:500}
.sheet-info .si-desc{display:flex}
.sheet-info .si-desc .si-val{white-space:pre-wrap;word-break:break-all;line-height:1.5;font-weight:400;color:var(--ink-body)}
.sheet-foot{padding:0 16px 18px}
.sheet-foot .btn{width:100%;padding:13px 0;font-size:15px;font-weight:600;border-radius:10px}  /* 确认排期：大按钮醒目 */

/* 计划页：筛选区 */
.plan-filter{margin-bottom:10px}
.pf-search{display:flex;gap:8px;margin-bottom:8px}
.pf-search .pf-kw{flex:1;min-width:0;padding:9px 12px;border:1px solid var(--hairline);border-radius:10px;
  font-size:14px;background:var(--canvas)}
.pf-search .pf-go{padding:0 16px;border:none;border-radius:10px;background:var(--blue);color:#fff;font-size:14px}
.pf-search .pf-reset{background:var(--canvas);border:1px solid var(--hairline);color:var(--ink-mute);text-decoration:none}
.pf-search .pf-more{background:var(--canvas);border:1px solid var(--hairline);color:var(--ink-body);text-decoration:none}
.pf-search .pf-more.active{color:var(--blue);border-color:var(--blue)}
.pf-search .pf-more.open{background:var(--blue-tint);border-color:var(--blue);color:var(--blue)}
.pf-drops{display:flex;gap:8px;display:none}
.pf-drops.open{display:flex}
.pf-drops .pf-drop{flex:1;padding:8px 10px;border:1px solid var(--hairline);border-radius:9px;
  font-size:13px;background:var(--canvas);color:var(--ink-body);min-width:0;
  -webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238a9099' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;padding-right:26px}
.pf-drops .pf-drop:focus{border-color:var(--blue)}

/* 任务详情：统一分区块（附件/评论/操作记录） */
.td-block{background:var(--canvas);border-radius:14px;box-shadow:var(--shadow-sm);padding:14px 16px;margin-bottom:14px}
.td-block .ch{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:10px}
/* 附件网格全局（任务/会议详情 + 团队弹层 sheet 共用，别挂 td-attachments 作用域——弹层里会一行一个） */
.att-grid{display:flex;gap:8px;flex-wrap:wrap}
.att-item{position:relative}
.att-item img{width:72px;height:72px;object-fit:cover;border-radius:8px;border:1px solid var(--hairline);display:block}
.att-file{display:flex;flex-direction:column;align-items:center;justify-content:center;width:72px;height:72px;
  border-radius:8px;border:1px solid var(--hairline);background:var(--canvas-tile);text-decoration:none;padding:4px;box-sizing:border-box;gap:2px}
.att-ico{font-size:22px;line-height:1}
.att-fn{font-size:9px;color:var(--ink-body);max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.td-attachments .att-tag{position:absolute;bottom:-4px;left:50%;transform:translateX(-50%);font-size:9px;
  background:var(--warning);color:#fff;padding:1px 6px;border-radius:6px;white-space:nowrap}
.td-attachments .att-del{position:absolute;top:-6px;right:-6px}
.td-attachments .att-del button,.td-attachments button.att-del{padding:0;width:20px;height:20px;border-radius:50%;background:var(--ink);color:#fff;border:none;
  cursor:pointer;line-height:18px;font-size:11px}
.td-attachments .att-hint{font-size:11px;color:var(--ink-mute);margin-top:8px}
.td-attachments .tm2-upload{display:flex;gap:8px;align-items:center;margin-top:10px}


/* 计划页：周历条精致化（覆盖 Task4 初版） */
.weekbar{background:var(--canvas);border:1px solid var(--hairline-soft);border-radius:14px;
  padding:12px 12px 10px;box-shadow:0 1px 3px rgba(31,35,41,.04)}
.weekbar .wb-head{margin-bottom:10px;padding:0 2px}
.weekbar .wb-label{font-size:15px;font-weight:600;color:var(--ink);letter-spacing:.01em}
.weekbar .wb-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;padding:7px 0 9px;border-radius:10px;transition:background .15s;
  text-decoration:none;position:relative;color:var(--ink)}
.weekbar .wb-cell .wb-dow{font-size:10px;color:var(--ink-mute);font-weight:500}
.weekbar .wb-cell .wb-day{font-size:15px;font-weight:600;color:var(--ink)}
.weekbar .wb-cell:not(.today):active{background:var(--canvas-tile)}
/* 今天：蓝实心圆 + 白字（优先级高于选中态） */
.weekbar .wb-cell.today .wb-dow{color:var(--blue)}
.weekbar .wb-cell.today .wb-day{background:var(--blue);color:#fff;width:26px;height:26px;
  line-height:26px;border-radius:50%;text-align:center}
/* 选中天：淡蓝底 + 蓝字；但若同时是今天，保持圆圈（today 优先） */
.weekbar .wb-cell.on{background:var(--blue-tint)}
.weekbar .wb-cell.on:not(.today) .wb-day{color:var(--blue)}
.weekbar .wb-dot{bottom:4px;width:4px;height:4px}


/* 计划页：天分段（选中天强调、空天弱化） */
.day-list{margin-top:4px}
.day-sec{background:var(--canvas);border-radius:14px;margin-bottom:12px;padding:10px 12px;
  box-shadow:var(--shadow-sm)}  /* 去边框：日期块多了显框多，选中天靠蓝色渐变区分 */
.day-sec .day-head{display:flex;align-items:baseline;gap:6px;padding:2px 2px 8px}
.day-sec .day-head .dh-dow{font-size:13px;font-weight:600;color:var(--ink)}
.day-sec .day-head .dh-sub{font-size:11px;color:var(--ink-faint);font-weight:400}
.day-sec.is-selected{background:linear-gradient(180deg,var(--blue-tint) 0%,var(--canvas) 60%)}
.day-sec.is-selected .day-head .dh-dow{color:var(--blue)}
.day-sec.has-no-task{opacity:.6}
.day-sec.has-no-task .day-empty{color:var(--ink-faint);font-size:12px;padding:0 2px 8px}
.day-sec.has-no-task .day-head{padding-bottom:4px}
/* 天内已完成折叠区 */
.day-done-head{display:flex;align-items:center;gap:6px;padding:8px 10px;margin:4px 0;
  border-radius:8px;background:var(--canvas-tile);color:var(--ink-mute);font-size:12px;cursor:pointer}
.day-done-head .day-done-toggle{margin-left:auto;font-size:11px}
.day-done-body{margin-top:6px}

/* 计划页：待排期池子区（卡片化 + 强引导） */
.poolbox{border-radius:14px;overflow:hidden;margin-bottom:14px;border:1px solid rgba(255,136,0,.3)}
.poolbox .pb-head{display:flex;align-items:center;gap:8px;width:100%;padding:13px 14px;border:none;
  background:var(--warning-tint);border-radius:14px;text-align:left;cursor:pointer;font-family:inherit}
.poolbox .pb-ico{font-size:14px}
.poolbox .pb-title{flex:1;font-size:14px;font-weight:600;color:var(--warning)}
.poolbox .pb-count{min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:var(--warning);
  color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center}
.poolbox .pb-arrow-text{color:var(--warning);font-size:12px;font-weight:600;display:flex;align-items:center;
  background:rgba(255,136,0,.15);padding:3px 10px;border-radius:8px}
.poolbox .pb-arrow{font-size:14px;color:var(--warning);transition:transform .2s;font-weight:700}
.poolbox.open .pb-arrow{transform:rotate(180deg)}
.poolbox .pb-list{display:none}
.poolbox.open .pb-list{display:block;padding:6px 8px 10px}
.poolbox .pb-row{position:relative;display:flex;align-items:center;gap:8px;padding:11px 12px 11px 18px;border-radius:10px;
  background:var(--canvas);box-shadow:0 1px 2px rgba(31,35,41,.05);margin-bottom:6px}
.poolbox .pb-row::before{content:"";position:absolute;left:8px;top:12px;bottom:12px;width:3px;
  border-radius:2px;background:var(--warning)}
.poolbox .pb-row.is-due::before{background:var(--danger)}
.poolbox .pb-row:active{background:var(--canvas-tile)}
.poolbox .pb-row .pb-main{flex:1;min-width:0}
.poolbox .pb-row .pb-name{display:block;font-size:14px;font-weight:500;line-height:1.35;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.poolbox .pb-row .pb-tags{display:flex;align-items:center;gap:5px;margin-top:3px;flex-wrap:nowrap;overflow:hidden}
.poolbox .pb-row .pb-tags .tag{font-size:10px;padding:0 6px;line-height:1.6}
.poolbox .pb-row .pb-type{font-size:10px;color:var(--ink-mute);background:var(--canvas-tile);border-radius:4px;
  padding:0 6px;line-height:1.6;flex-shrink:0}
.poolbox .pb-row .pb-sub{display:block;font-size:11px;color:var(--ink-mute);margin-top:2px}
.poolbox .pb-row .pb-tags .pb-sub{font-size:10px;margin-top:0;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.poolbox .pb-row .pb-due{font-size:11px;color:var(--warning);background:var(--warning-tint);
  padding:3px 8px;border-radius:8px;flex:none;font-weight:500;white-space:nowrap}
.poolbox .pb-row .pb-due.hot{color:#fff;background:var(--danger)}
.poolbox .pb-row .pb-go{flex:none;font-size:12px;font-weight:600;color:#fff;background:var(--blue);
  padding:6px 12px;border-radius:8px}
.poolbox .pb-empty{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:14px 12px;border-radius:10px;color:var(--ink-mute);font-size:13px}
.poolbox .pb-add{padding:10px 12px 4px;border-top:1px solid var(--hairline);margin-top:4px}
.poolbox .pb-add .btn{width:100%;padding:9px 0;font-size:13px;border:none;color:var(--blue);background:var(--blue-tint);border-radius:8px;font-weight:500}
.day-sec.flash{animation:dflash .8s}
@keyframes dflash{0%,100%{background:transparent}50%{background:rgba(51,112,255,.08)}}

/* 双轨登录页：短信/密码 Tab 切换 */
.login-tabs{display:flex;gap:6px;margin-bottom:18px;background:var(--canvas-tile);border-radius:10px;padding:3px}
.login-tabs .lt{flex:1;padding:9px;border:none;border-radius:8px;background:none;font-size:14px;font-weight:500;color:var(--ink-mute);cursor:pointer}
.login-tabs .lt.on{background:var(--canvas);color:var(--blue);font-weight:600;box-shadow:var(--shadow-sm)}

/* ---- 移动端团队页：三子 tab + 概览图表（Task 18，样式自占位内联移入） ---- */
.team-tabs{position:sticky;top:0;z-index:30;display:flex;gap:8px;margin:0 -12px 12px;padding:8px 12px;background:var(--canvas)}
.team-tabs .lt{flex:1;text-align:center;padding:9px 0;border-radius:10px;background:var(--canvas);
  color:var(--ink-mute);text-decoration:none;font-size:14px;font-weight:500;border:1px solid var(--hairline);
  font-family:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}
.team-tabs .lt.on{background:var(--blue);border-color:var(--blue);color:#fff}
.mteam-title{font-size:13px;font-weight:600;color:var(--ink-mute);margin:14px 4px 8px}
.mteam-title .eff-range{font-weight:400;font-size:11px;color:var(--ink-faint);margin-left:4px}
/* 团队两栏（计划/成员）：左成员列表 + 右详情 */
.mp-flex{display:flex;gap:10px;align-items:flex-start;margin-top:2px}
.mp-members{position:sticky;top:8px;  /* 吸顶：成员多时内部滚动，顶部 tabs/过滤条不跟着跑 */
  width:118px;flex-shrink:0;display:flex;flex-direction:column;
  max-height:calc(100dvh - 8px - 150px);overflow-y:auto;padding:8px 4px;
  background:var(--canvas);border-radius:12px;box-shadow:var(--shadow-sm)}
.mp-member{display:flex;align-items:center;justify-content:space-between;gap:6px;
  padding:11px 10px;border-radius:8px;text-decoration:none;color:var(--ink);
  border-left:3px solid transparent}
.mp-member + .mp-member{margin-top:2px}
.mp-member.on{background:var(--blue-tint);border-left-color:var(--blue);color:var(--blue)}
.mpm-name{flex:1;min-width:0;font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mpm-count{font-size:11px;color:var(--ink-mute);background:var(--hairline);border-radius:8px;padding:1px 7px;flex-shrink:0}
.mp-member.on .mpm-count{background:var(--blue);color:#fff}
.mp-plan{flex:1;min-width:0;max-height:calc(100dvh - 150px);overflow-y:auto}
.mtp-title{font-size:15px;font-weight:600;margin:12px 4px 8px}
/* 成员详情：状态/效率 2×2 指标卡 + 明细行 */
.mstat-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.mstat-grid .ms-card{background:var(--canvas);border-radius:12px;box-shadow:var(--shadow-sm);padding:12px;text-align:center}
.mstat-grid .num.bad{color:var(--danger)}
.eff-lines{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:10px;padding:10px 12px;
  background:var(--canvas);border-radius:10px;box-shadow:var(--shadow-sm)}
.eff-lines span{font-size:12px;color:var(--ink-mute)}
/* 团队：部门过滤（非计划 tab 单行） */
.dept-filter{margin-bottom:10px}
.dept-filter .pf-drop{max-width:240px}
/* 概览图表（Chart.js canvas，与 PC 仪表盘同款） */
.mteam-chart{background:var(--canvas);border-radius:14px;box-shadow:var(--shadow-sm);padding:14px 16px;margin-bottom:12px}
.mteam-chart .mteam-title{margin:0 0 10px}
.tch-empty{text-align:center;padding:20px 0;color:var(--ink-mute);font-size:13px}
