/* ══════════════════════════════════════════════════════════════
   口袋电梯 · 开发端 · 美术看板 —— 样式（kanban.css）
   设计令牌同源 PocketLift Design System
   ══════════════════════════════════════════════════════════════ */
:root{
  --ink:#0D3779; --ink-2:#0A2C5E; --primary:#2861AE; --primary-mid:#457DC9;
  --bg:#F4F6FB; --panel:#FFFFFF; --line:#E6EAF2; --line-soft:#EDF0F6;
  --fg1:#1E2530; --fg2:#4A5263; --fg3:#717A8C; --fg4:#9BA3B4; --fg5:#C2C8D5;
  --hoist:#2861AE; --car:#BE8836; --acc:#6E5BD6;
  --behind:#E5484D; --ahead:#15A05A; --ontime:#8A93A6; --amber:#E0892A;
  --radius:14px; --radius-sm:10px;
  --font-cn:'PingFang SC','Noto Sans SC','Microsoft YaHei',sans-serif;
  --font-num:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;
  --shadow:0 4px 18px rgba(28,52,92,.08);
  --shadow-pop:0 18px 50px rgba(15,38,80,.24);
  --nameW:268px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{height:100%}body{min-height:100%}
body{font-family:var(--font-cn);color:var(--fg1);background:var(--bg);-webkit-font-smoothing:antialiased;line-height:1.5}
.num{font-family:var(--font-num);font-variant-numeric:tabular-nums}

/* ───────── 顶栏 ───────── */
.appbar{position:sticky;top:0;z-index:60;display:flex;align-items:center;gap:18px;
  padding:0 clamp(20px,3.2vw,72px);height:60px;background:linear-gradient(100deg,var(--ink-2),var(--ink) 60%,#15407F);
  color:#fff;box-shadow:0 2px 14px rgba(10,34,72,.28)}
/* 右上角登录胶囊存在时，给顶栏右侧按钮让位，避免被盖住 */
body:has(#pl-auth-chip) .appbar{padding-right:190px}
.appbar .brand{display:flex;align-items:center;gap:11px}
.appbar .brand img{width:32px;height:32px;object-fit:contain;background:#fff;border-radius:8px;padding:4px}
.appbar .brand .bt{font-size:15.5px;font-weight:700;letter-spacing:.3px;white-space:nowrap}
.appbar .brand .bt small{font-weight:500;color:#A9C6EE;margin-left:2px}
.appbar .ver-badge{font-family:var(--font-num);font-size:11px;font-weight:700;color:#BBD4F4;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);border-radius:100px;padding:2px 10px;letter-spacing:.03em;white-space:nowrap;cursor:default}
.appbar .tabs{display:flex;gap:4px;background:rgba(255,255,255,.1);border-radius:100px;padding:4px}
.appbar .tab{display:flex;align-items:center;gap:7px;border:none;background:none;color:#C4D7F2;font-family:inherit;
  font-size:13.5px;font-weight:600;padding:7px 16px;border-radius:100px;cursor:pointer;transition:all .15s}
.appbar .tab svg{width:15px;height:15px}
.appbar .tab:hover{color:#fff}
.appbar .tab.on{background:#fff;color:var(--ink)}
.appbar .sp{flex:1}
.appbar .ab-btn{display:flex;align-items:center;gap:7px;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.12);
  color:#fff;font-family:inherit;font-size:13px;font-weight:600;padding:8px 15px;border-radius:10px;cursor:pointer;transition:all .15s}
.appbar .ab-btn:hover{background:rgba(255,255,255,.22)}
.appbar .ab-btn svg{width:15px;height:15px}
.appbar .ab-back{display:flex;align-items:center;gap:6px;flex:none;color:#EAF1FB;text-decoration:none;font-size:12.5px;font-weight:700;
  padding:7px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.24);background:rgba(255,255,255,.1);transition:all .15s;white-space:nowrap}
.appbar .ab-back:hover{background:#fff;border-color:#fff;color:var(--ink)}
.appbar .ab-back svg{flex:none}
@media(max-width:1180px){
  .appbar{gap:10px;padding:0 16px}
  .appbar .brand .bt small{display:none}
  .appbar .ab-back{padding:7px 10px}
  .appbar .tab{padding:7px 12px}
}
@media(max-width:980px){
  .appbar .ab-back{font-size:0;gap:0;padding:8px}
  .appbar .ab-back svg{width:15px;height:15px}
  .appbar .tab{font-size:0;gap:0;padding:8px 10px}
  .appbar .tab svg{width:16px;height:16px}
}

/* ───────── 页容器 ───────── */
.page{width:100%;max-width:2200px;margin:0 auto;padding:22px clamp(20px,3.2vw,72px) 60px}

/* 来源/项目条 */
.srcbar{display:flex;align-items:center;gap:11px;flex-wrap:wrap;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:11px 17px;box-shadow:var(--shadow);margin-bottom:14px;font-size:12.5px}
.srcbar .sb-ic{width:26px;height:26px;border-radius:8px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--ink);color:#fff}
.srcbar .sb-ic svg{width:15px;height:15px}
.srcbar .sb-t{font-weight:700;color:var(--fg1)}
.srcbar .sb-no{font-family:var(--font-num);font-weight:700;color:var(--primary);background:#EEF4FC;border-radius:6px;padding:2px 9px}
.srcbar .sb-div{width:1px;height:16px;background:var(--line)}
.srcbar .sb-k{color:var(--fg4)}
.srcbar .sb-v{font-weight:700;color:var(--fg1)}
.srcbar .sb-meta{color:var(--fg3)}

/* ───────── 汇总指标卡 ───────── */
.metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px;margin-bottom:16px}
@media(max-width:1040px){.metrics{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}}
.metric{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:15px 17px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.metric .mk{font-size:12.5px;color:var(--fg3);font-weight:500;display:flex;align-items:center;gap:7px}
.metric .mk .dot{width:8px;height:8px;border-radius:50%;flex:none}
.metric .mv{font-family:var(--font-num);font-size:30px;font-weight:700;color:var(--fg1);margin-top:6px;line-height:1}
.metric .mv small{font-size:14px;font-weight:600;color:var(--fg4);margin-left:2px}
.metric .ms{font-size:11.5px;color:var(--fg4);margin-top:4px}
.metric.accent-mile{background:linear-gradient(135deg,#FBF6EC,#fff)}
.metric .bar{position:absolute;left:0;bottom:0;height:3px;background:var(--primary)}

/* ───────── 工具条：时间机器 ───────── */
.toolbar{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px;box-shadow:var(--shadow);
  display:flex;align-items:center;gap:20px;margin-bottom:16px;flex-wrap:wrap}
.tm{display:flex;align-items:center;gap:14px;flex:1;min-width:380px}
.tm .tm-ic{width:36px;height:36px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--ink),var(--primary));color:#fff}
.tm .tm-ic svg{width:19px;height:19px}
.tm .tm-body{flex:1}
.tm .tm-head{display:flex;align-items:baseline;gap:10px}
.tm .tm-title{font-size:13px;font-weight:700;color:var(--fg2)}
.tm .tm-date{font-family:var(--font-num);font-size:15px;font-weight:700;color:var(--ink)}
.tm .tm-date.is-today{color:var(--ahead)}
.tm .tm-tag{font-size:11px;font-weight:600;padding:2px 8px;border-radius:100px;background:var(--line-soft);color:var(--fg3)}
.tm .tm-tag.today{background:#E7F6EE;color:var(--ahead)}
.tm input[type=range]{width:100%;margin-top:8px;accent-color:var(--primary);height:4px;cursor:pointer}
.tm .tm-scale{display:flex;justify-content:space-between;font-size:10.5px;color:var(--fg4);font-family:var(--font-num);margin-top:3px}
.tm-side{display:flex;align-items:center;gap:16px;flex:none}
.tm-today-btn{border:1px solid var(--line);background:#fff;color:var(--primary);font-family:inherit;font-size:12px;font-weight:600;
  padding:7px 12px;border-radius:9px;cursor:pointer;white-space:nowrap}
.tm-today-btn:hover{background:var(--bg)}
/* 幽灵开关 */
.gh-toggle{display:flex;align-items:center;gap:9px;cursor:pointer;user-select:none;font-size:12.5px;font-weight:600;color:var(--fg2);white-space:nowrap}
.gh-toggle .sw{width:38px;height:22px;border-radius:100px;background:var(--fg5);position:relative;transition:background .18s;flex:none}
.gh-toggle .sw::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .18s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.gh-toggle.on .sw{background:var(--primary)}
.gh-toggle.on .sw::after{left:18px}

/* ───────── 看板筛选条 ───────── */
.filterbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:11px 16px;box-shadow:var(--shadow);margin-bottom:14px}
.filterbar .fb-label{font-size:11.5px;color:var(--fg4);font-weight:700}
.filterbar .fchips{display:flex;gap:7px}
.fchip{display:flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:100px;padding:5px 13px;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--fg3);cursor:pointer;transition:all .14s}
.fchip:hover{border-color:var(--fg4)}
.fchip .fc-dot{width:8px;height:8px;border-radius:50%;opacity:.45;transition:all .14s}
.fchip.on{color:#fff;border-color:transparent;background:var(--fc)}
.fchip.on .fc-dot{opacity:1;background:#fff}
.filterbar .fb-div{width:1px;height:18px;background:var(--line)}
.filterbar .seg{display:flex;align-items:center;gap:7px;background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:5px 10px}
.filterbar .seg label{font-size:11px;color:var(--fg4);font-weight:600}
.filterbar select{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;cursor:pointer}
.filterbar .search{display:flex;align-items:center;gap:7px;background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:5px 11px;min-width:150px}
.filterbar .search svg{width:14px;height:14px;color:var(--fg4)}
.filterbar .search input{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;width:100%}
.filterbar .sp{flex:1}
.fc-reset{border:none;background:none;color:var(--primary);font-family:inherit;font-size:12px;font-weight:600;cursor:pointer}
.fc-reset:hover{text-decoration:underline}

/* ───────── 赛跑墙 ───────── */
.board{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:clip}
.board-head{display:flex;align-items:stretch;border-bottom:2px solid var(--ink);position:sticky;top:var(--bh-top,60px);z-index:30;background:#fff;box-shadow:0 6px 14px -8px rgba(20,40,80,.22)}
.bh-name{width:var(--nameW);flex:none;padding:0 16px;display:flex;align-items:center;font-size:12.5px;font-weight:700;color:var(--fg3);
  border-right:1px solid var(--line);background:linear-gradient(180deg,#fff,#FBFCFE)}
.bh-track{flex:1;position:relative;display:flex;flex-direction:column}
.bh-rail{height:22px;position:relative;border-bottom:1px dashed var(--line)}
.bh-rail .mf-tag{position:absolute;top:2px;left:0;transform:translateX(-50%);white-space:nowrap;font-size:10.5px;font-weight:700;color:var(--car);
  background:#FBF3E4;border:1px solid #EAD7B0;border-radius:7px;padding:1px 9px;box-shadow:0 2px 8px rgba(190,136,54,.2);z-index:6}
.bh-rail .mf-tag b{font-weight:600;color:#9C7634;margin-left:6px;padding-left:6px;border-left:1px solid #E2C998}
.lane-heads{flex:1;display:flex}
.lane-head{flex:none;box-sizing:border-box;padding:7px 8px 8px;border-right:1px solid var(--line-soft);position:relative;display:flex;flex-direction:column;justify-content:center;gap:2px}
.lane-head:last-child{border-right:none}
.lane-head .ln-no{font-family:var(--font-num);font-size:10px;font-weight:700;color:var(--fg5)}
.lane-head .ln-name{font-size:12px;font-weight:700;color:var(--fg2);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lane-head .ln-w{font-family:var(--font-num);font-size:11px;font-weight:700;color:var(--primary)}
.lane-head .ln-wbar{height:3px;border-radius:2px;background:var(--primary);opacity:.45;margin-top:1px}
/* 达标线竖线（贯穿表头） */
.mile-flag{position:absolute;top:0;bottom:0;z-index:5;pointer-events:none}
.mile-flag .mf-line{width:2px;height:100%;background:repeating-linear-gradient(180deg,var(--car) 0 6px,transparent 6px 11px)}

.board-body{position:relative}
.board-empty{padding:46px;text-align:center;color:var(--fg4);font-size:13px}

/* 型号分组（一级） */
.model-grp{border-bottom:1px solid var(--line)}
.model-grp:last-child{border-bottom:none}
.model-head{display:flex;align-items:center;gap:12px;padding:11px 18px;cursor:pointer;user-select:none;position:sticky;top:var(--mh-top,140px);z-index:20;
  background:linear-gradient(180deg,#F3F7FD,#EBF1FA);border-left:4px solid var(--ink)}
.model-head:hover{filter:brightness(.985)}
.model-head .mg-caret{transition:transform .2s;color:var(--fg3);display:flex;flex:none}
.model-grp.collapsed .mg-caret{transform:rotate(-90deg)}
.model-head .mh-left{display:flex;align-items:center;gap:11px;min-width:0}
.model-head .mg-ic{width:30px;height:30px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--ink);color:#fff}
.model-head .mg-ic svg{width:18px;height:18px}
.model-head .mg-tt{display:flex;align-items:baseline;gap:9px;min-width:0}
.model-head .mg-name{font-size:15px;font-weight:800;color:var(--fg1)}
.model-head .mg-type{font-size:12px;font-weight:700;color:#fff;background:var(--primary);border-radius:100px;padding:2px 10px}
.model-head .mh-right{margin-left:auto;display:flex;align-items:center;gap:16px}
.model-head .mg-stat{font-size:12px;color:var(--fg3)}
.model-head .mg-stat b{font-weight:800;color:var(--fg1);margin-right:2px}
.model-head .mg-prog{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--fg2)}
.model-head .mg-prog .pbar{width:96px;height:7px;border-radius:5px;background:#D7E2F1;overflow:hidden}
.model-head .mg-prog .pbar i{display:block;height:100%;background:linear-gradient(90deg,var(--primary),var(--ink));border-radius:5px}
.model-grp.collapsed .model-body{display:none}

/* 部件类型分组（二级） */
.subgrp{border-top:1px solid var(--line-soft)}
.subgrp-track{display:none}
.subgrp-head{display:flex;align-items:center;gap:9px;padding:6px 18px 6px 30px;cursor:pointer;user-select:none;background:#FAFBFE}
.subgrp-head:hover{background:var(--bg)}
.subgrp-head .sg-caret2{transition:transform .2s;color:var(--fg4);display:flex;flex:none}
.subgrp.collapsed .sg-caret2{transform:rotate(-90deg)}
.subgrp-head .sg-bar{width:4px;height:14px;border-radius:2px;flex:none}
.subgrp-head .sg-cat{font-size:11px;font-weight:700}
.subgrp-head .sg-part{font-size:12.5px;font-weight:700;color:var(--fg1)}
.subgrp-head .sg-n{font-family:var(--font-num);font-size:11px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:1px 8px}
.subgrp.collapsed .subgrp-rows{display:none}

/* 运动员行 = 赛道 */
.runner-row{display:flex;align-items:stretch;border-top:1px solid var(--line-soft)}
.rr-name{width:var(--nameW);flex:none;padding:8px 14px 8px 48px;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:2px;position:relative;justify-content:center}
.rr-name .rn-dot{position:absolute;left:34px;top:13px;width:7px;height:7px;border-radius:50%}
.rr-name .rn-part{font-size:12px;font-weight:600;color:var(--fg1);line-height:1.3;word-break:break-word}
.rr-name .rn-meta{font-size:11px;color:var(--fg4);display:flex;align-items:center;gap:5px}
.rr-name .rn-meta .who{color:var(--fg3)}

.rr-track{flex:1;position:relative;min-height:50px}
.rr-track .lanebg{position:absolute;inset:0}
.rr-track .startline{position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--ink);opacity:.55}
.rr-track .mile{position:absolute;top:0;bottom:0;width:2px;background:repeating-linear-gradient(180deg,var(--car) 0 6px,transparent 6px 11px);z-index:2}

/* 计划目标(幽灵) + 实际 chip + 连接线 */
.ghost{position:absolute;top:50%;z-index:3;width:24px;height:24px;border-radius:50%;
  border:1.6px dashed var(--fg4);background:rgba(255,255,255,.6);display:flex;align-items:center;justify-content:center;opacity:.62}
.ghost svg{width:13px;height:13px;color:var(--fg3)}
.lag{position:absolute;top:50%;height:3px;transform:translateY(-50%);z-index:2;border-radius:2px;opacity:.5}

.chip{position:absolute;top:50%;z-index:6;cursor:default;display:flex;align-items:center;gap:6px;height:30px;padding:0 11px 0 6px;border-radius:100px;
  background:#fff;border:2px solid var(--c);box-shadow:0 4px 12px rgba(20,40,80,.14);white-space:nowrap;transition:box-shadow .15s}
.chip:hover{box-shadow:0 8px 20px rgba(20,40,80,.22);z-index:9}
.chip .av{width:19px;height:19px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:#fff;background:var(--c)}
.chip .cp{font-family:var(--font-num);font-size:12px;font-weight:800;color:var(--c)}
.chip .cbar{width:28px;height:4px;border-radius:3px;background:var(--line);overflow:hidden}
.chip .cbar i{display:block;height:100%;background:var(--c);border-radius:3px}
.chip.done{background:var(--c);border-color:var(--c)}
.chip.done .cp{color:#fff}
.chip.done .av{background:rgba(255,255,255,.25)}
.chip.done .cbar{background:rgba(255,255,255,.35)}
.chip.done .cbar i{background:#fff}
.chip.st-behind{border-color:var(--behind);box-shadow:0 0 0 3px rgba(229,72,77,.16),0 4px 12px rgba(20,40,80,.14)}
.chip.st-ahead{border-color:var(--ahead);box-shadow:0 0 0 3px rgba(21,160,90,.16),0 4px 12px rgba(20,40,80,.14)}
.chip .sflag{position:absolute;top:-8px;right:-7px;font-size:9px;font-weight:800;padding:1px 5px;border-radius:6px;color:#fff;line-height:1.4}
.chip.st-behind .sflag{background:var(--behind)}
.chip.st-ahead .sflag{background:var(--ahead)}
.chip.atstart{border-style:dashed}

/* 图例 */
.legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:11px 16px;border-top:1px solid var(--line);background:var(--bg);font-size:11.5px;color:var(--fg3)}
.legend .lg{display:flex;align-items:center;gap:6px}
.legend .sw-dot{width:11px;height:11px;border-radius:3px}
.legend .sw-ghost{width:15px;height:15px;border-radius:50%;border:1.5px dashed var(--fg4)}
.legend .sw-line{width:18px;height:0;border-top:2px dashed var(--car)}
.legend .sw-chip{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 8px 0 3px;border-radius:100px;border:1.5px solid var(--primary);background:#fff}
.legend .sw-chip .av{width:14px;height:14px;border-radius:50%;background:var(--primary);color:#fff;font-size:8px;font-weight:700;display:flex;align-items:center;justify-content:center}
.legend .sw-chip span:last-child{font-family:var(--font-num);font-size:10px;font-weight:800;color:var(--primary)}

/* ───────── 表格页 ───────── */
/* 子标签：填报日志 / 任务总表 */
.subtabs{display:flex;align-items:center;gap:8px;margin-bottom:16px}
.subtab{display:flex;flex-direction:column;align-items:flex-start;gap:1px;border:1px solid var(--line);background:#fff;border-radius:11px;padding:8px 16px;cursor:pointer;font-family:inherit;transition:all .14s}
.subtab span{font-size:14px;font-weight:700;color:var(--fg2)}
.subtab small{font-size:10.5px;color:var(--fg4)}
.subtab:hover{border-color:var(--primary-mid)}
.subtab.on{background:var(--ink);border-color:var(--ink)}
.subtab.on span{color:#fff}
.subtab.on small{color:#A9C6EE}
.subtabs .st-hint{font-size:11.5px;color:var(--fg4);margin-left:6px}

/* 填报日志：左 composer + 右时间线 */
.logpage{display:grid;grid-template-columns:440px 1fr;gap:18px;align-items:start}
@media(max-width:920px){.logpage{grid-template-columns:1fr}}
/* 今日填报：单列全宽，任务平铺（「本周还需完成」已移除） */
.logpage.single{grid-template-columns:1fr}
.logpage.single .composer{position:static}
.composer{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;position:sticky;top:76px}
.composer .cp-head{display:flex;align-items:center;gap:9px;margin-bottom:14px}
.composer .cp-ic{width:30px;height:30px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--ink),var(--primary));color:#fff}
.composer .cp-ic svg{width:17px;height:17px}
.composer .cp-t{font-size:15px;font-weight:700;color:var(--fg1)}
.composer .cp-d{font-size:11px;color:var(--ahead);font-weight:700;margin-left:auto;background:#E7F6EE;border-radius:100px;padding:2px 9px}
.cp-row{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.cp-row > label{font-size:11.5px;font-weight:700;color:var(--fg3)}
.cp-task{width:100%;border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-family:inherit;font-size:13px;color:var(--fg1);background:#fff;outline:none;cursor:pointer}
.cp-task:focus{border-color:var(--primary)}
.cp-procs{display:flex;flex-wrap:wrap;gap:6px;min-height:30px;align-items:center}
.cp-ph{font-size:11.5px;color:var(--fg4)}
.cp-proc{display:flex;align-items:center;gap:5px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:5px 9px;font-family:inherit;font-size:11.5px;font-weight:600;color:var(--fg3);cursor:pointer;transition:all .12s}
.cp-proc .cpp-no{font-size:9px;font-weight:700;color:var(--fg5)}
.cp-proc:hover{border-color:var(--primary-mid)}
.cp-proc.done{background:var(--ahead);border-color:var(--ahead);color:#fff;cursor:default}
.cp-proc.done .cpp-no{color:rgba(255,255,255,.7)}
.cp-proc.next{border-color:var(--primary);color:var(--primary)}
.cp-proc.pick{background:var(--primary);border-color:var(--primary);color:#fff}
.cp-proc.pick .cpp-no{color:rgba(255,255,255,.75)}
.cp-note,.cp-block{width:100%;border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;resize:vertical}
.cp-note:focus,.cp-block:focus{border-color:var(--primary)}
.cp-foot{display:flex;align-items:center;gap:10px;margin-top:4px}
.cp-hint{font-size:11px;color:var(--fg4);line-height:1.4}
.cp-hint b{color:var(--primary)}
.cp-foot .sp{flex:1}
.cp-submit{border:none;background:var(--primary);color:#fff;font-family:inherit;font-size:13px;font-weight:700;padding:10px 18px;border-radius:10px;cursor:pointer;white-space:nowrap;transition:background .15s}
.cp-submit:hover{background:var(--ink)}
.cp-submit:disabled{background:var(--fg5);cursor:not-allowed}

/* 迭代填报：今日复选清单 */
.composer .cp-sub{font-size:11.5px;color:var(--fg4);margin-bottom:10px}
.cp-subrow{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.cp-subrow .cp-sub{margin-bottom:0}
.cp-subrow .sp{flex:1}
.cp-selall{display:flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:5px 11px;font-family:inherit;font-size:12px;font-weight:700;color:var(--primary);cursor:pointer;white-space:nowrap;flex:none;transition:all .14s}
.cp-selall:hover{border-color:var(--primary-mid);background:#F5F9FF}
.cp-selall.on{background:var(--primary);border-color:var(--primary);color:#fff}
.cp-selall .csa-ic{display:flex}
.cp-row.col{flex-direction:column;align-items:stretch}
/* 平铺卡片网格（讨论确认：不再下拉/滚动列表，充分利用页面宽度） */
.todo-check{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;margin-bottom:12px}
.tc-empty{grid-column:1/-1;font-size:12px;color:var(--fg4);padding:22px;text-align:center;border:1px dashed var(--line);border-radius:10px}
.tc-card{display:flex;flex-direction:column;gap:7px;border:1px solid var(--line);border-radius:12px;padding:10px 12px;cursor:pointer;transition:all .14s;background:#fff}
.tc-card:hover{border-color:var(--primary-mid);background:#FAFCFF}
.tc-card.on{border-color:var(--primary);background:#F0F7FF;box-shadow:0 0 0 2px rgba(40,97,174,.12)}
.tc-card .tc-top{display:flex;align-items:center;gap:9px}
.tc-card input{accent-color:var(--primary);width:15px;height:15px;flex:none}
.tc-card .tc-rec{font-size:11px;font-weight:600;color:var(--primary);background:#E8F0FB;border-radius:7px;padding:3px 8px;align-self:flex-start}
.tc-card .tc-foot{display:flex;align-items:center;gap:8px;font-size:10.5px}
.tc-card .tc-modeline{color:var(--fg4)}
.tc-card .tc-alt{border:none;background:none;color:var(--primary);font-size:10.5px;cursor:pointer;padding:0;margin-left:auto;font-family:inherit;text-decoration:underline;text-underline-offset:2px}
.tc-card .tc-alt:hover{color:var(--ink)}
.tc-add-row{margin-bottom:13px}
.tc-add-link{border:none;background:none;color:var(--fg4);font-size:12px;cursor:pointer;padding:2px 0;font-family:inherit}
.tc-add-link:hover{color:var(--primary);text-decoration:underline;text-underline-offset:2px}
.tc-row{display:flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:10px;padding:8px 10px;cursor:pointer;transition:all .14s}
.tc-row:hover{border-color:var(--primary-mid);background:#FAFCFF}
.tc-row.on{border-color:var(--primary);background:#F0F7FF}
.tc-row input{accent-color:var(--primary);width:15px;height:15px;flex:none}
.tc-row .tc-dot{width:8px;height:8px;border-radius:50%;flex:none}
.tc-main{flex:1;min-width:0}
.tc-main .tc-name{font-size:12.5px;font-weight:600;color:var(--fg1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tc-main .tc-meta{font-size:10.5px;color:var(--fg4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tc-next{flex:none;font-size:10.5px;font-weight:700;color:var(--primary);background:#E8F0FB;border-radius:6px;padding:2px 7px}
.tc-next.done{color:var(--amber);background:#F7EFE0}
.tc-name .tc-extra{font-size:9.5px;font-weight:700;color:var(--gold-dark,var(--amber));background:#F7EFE0;border:1px solid #E7D3AE;border-radius:5px;padding:0 6px;margin-left:7px;vertical-align:1px}
.tc-add{width:100%;border:1px dashed var(--line);background:#FBFCFE;border-radius:10px;padding:9px 11px;font-family:inherit;font-size:12.5px;color:var(--primary);outline:none;cursor:pointer}
.tc-add:hover{border-color:var(--primary-mid);background:#F5F9FF}

/* ── 总表 · 工序拆解子表 ── */
.proc-toggle{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;border-radius:5px;background:#EEF1F6;color:var(--fg3);cursor:pointer;flex:none;padding:0;transition:all .14s}
.proc-toggle:hover{background:#E0E8F4;color:var(--primary)}
.proc-toggle svg{transition:transform .14s}
.proc-toggle.open svg{transform:rotate(90deg)}
.proc-sub-tr{background:#F8FAFD}
.proc-sub-td{padding:6px 14px 12px 40px !important}
.proc-sub{width:auto;min-width:640px;border-collapse:collapse;font-size:11.5px}
.proc-sub th{font-size:10.5px;color:var(--fg4);font-weight:600;text-align:left;padding:5px 12px 5px 0;border-bottom:1px solid var(--line);white-space:nowrap}
.proc-sub td{padding:5px 12px 5px 0;border-bottom:1px dashed #E8ECF3;vertical-align:middle}
.proc-sub tr:last-child td{border-bottom:none}
.proc-sub .pp-name{white-space:nowrap;color:var(--fg2);font-weight:600}
.proc-sub .pp-no{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:5px;background:var(--ink);color:#fff;font-size:9.5px;font-weight:700;margin-right:6px}
.proc-sub .pp-st{font-size:10.5px;font-weight:700}
.proc-sub .dt-date{font-size:11px;padding:2px 5px}
.proc-sub .dt-date.pv-auto{color:var(--fg3);border-style:dashed}
.proc-sub .dt-date.pv-manual{color:var(--fg1);font-weight:600}
.proc-reset{border:none;background:none;color:var(--fg4);font-size:13px;cursor:pointer;padding:2px 5px;border-radius:5px}
.proc-reset:hover{background:#EEF1F6;color:var(--primary)}

/* 冲刺周条 */
.sprintbar{display:flex;align-items:center;gap:14px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 16px;box-shadow:var(--shadow);margin-bottom:14px}
.sprintbar .sb-nav{display:flex;align-items:center;gap:10px}
.sprintbar .sp-nav{border:1px solid var(--line);background:#fff;width:28px;height:28px;border-radius:8px;cursor:pointer;font-size:16px;color:var(--fg3);line-height:1}
.sprintbar .sp-nav:hover{border-color:var(--primary-mid);color:var(--primary)}
.sprintbar .sb-label{display:flex;flex-direction:column;gap:1px;min-width:150px;text-align:center}
.sprintbar .sb-s{font-size:13.5px;font-weight:800;color:var(--primary-dark,var(--ink))}
.sprintbar .sb-range{font-size:11px;color:var(--fg4)}
.sprintbar .sp{flex:1}
.sprintbar .sb-stat{display:flex;flex-direction:column;align-items:center;gap:1px;padding:0 6px}
.sprintbar .sb-stat b{font-size:18px;font-weight:800;color:var(--ink);line-height:1}
.sprintbar .sb-stat span{font-size:10.5px;color:var(--fg4)}
.sprintbar .sb-stat.done b{color:var(--ahead)}

/* 右：本周待办 */
.rp-title{display:flex;align-items:center;gap:9px}
.rp-title .rp-t{font-size:13px;font-weight:700;color:var(--fg1)}
.rp-title .rp-n{font-size:11px;font-weight:700;color:var(--fg4);background:var(--bg);border:1px solid var(--line);border-radius:100px;padding:1px 9px}
.todo-wrap{display:flex;flex-direction:column;gap:9px}
.todo-item{display:flex;gap:11px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;box-shadow:var(--shadow)}
.todo-item.behind{border-color:#F3C9CB}
.todo-item .ti-av{width:30px;height:30px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700}
.ti-body{flex:1;min-width:0}
.ti-top{display:flex;align-items:center;gap:9px}
.ti-top .ti-name{font-size:13.5px;font-weight:700;color:var(--fg1);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ti-top .ti-flag{font-size:10px;font-weight:700;padding:1px 7px;border-radius:6px;flex:none}
.ti-top .ti-prog{font-size:12.5px;font-weight:800;color:var(--ink);flex:none}
.ti-meta{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--fg4);margin-top:3px;flex-wrap:wrap}
.ti-meta .ti-dot{width:7px;height:7px;border-radius:50%}
.ti-meta .ti-who{margin-left:auto;font-weight:600;color:var(--fg3)}
.ti-foot{display:flex;align-items:center;gap:10px;margin-top:9px}
.ti-foot .ti-bar{flex:1;height:5px;border-radius:3px;background:#E7EBF2;overflow:hidden;min-width:50px}
.ti-foot .ti-bar i{display:block;height:100%;border-radius:3px}
.ti-foot .ti-stage{font-size:10.5px;color:var(--fg3);font-weight:600;white-space:nowrap}
.ti-foot .ti-due{font-size:10.5px;color:var(--fg4);white-space:nowrap}
.ti-block{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:11px;font-weight:600;color:var(--behind);background:#FCEBEC;border-radius:7px;padding:5px 9px}
.ti-block svg{flex:none;color:var(--behind)}

/* 日志筛选条 */
.logbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:9px 14px;box-shadow:var(--shadow);margin-bottom:14px}
.logbar .seg{display:flex;align-items:center;gap:7px;background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:5px 10px}
.logbar .seg label{font-size:11px;color:var(--fg4);font-weight:600}
.logbar select{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;cursor:pointer}
.logbar .search{display:flex;align-items:center;gap:7px;background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:5px 11px;flex:1;min-width:160px;max-width:320px}
.logbar .search svg{width:14px;height:14px;color:var(--fg4)}
.logbar .search input{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;width:100%}
.logbar .sp{flex:1}
.logbar .lb-count{font-size:12px;color:var(--fg3)}
.logbar .lb-count b{color:var(--fg1)}

/* 时间线 */
.timeline{display:flex;flex-direction:column}
.tl-empty{background:var(--panel);border:1px dashed var(--line);border-radius:var(--radius);padding:42px;text-align:center;color:var(--fg4);font-size:13px}
.tl-day{display:flex;align-items:center;gap:9px;padding:6px 2px 10px;margin-top:6px}
.tl-day .tl-dot{width:9px;height:9px;border-radius:50%;background:var(--fg5)}
.tl-day.today .tl-dot{background:var(--ahead);box-shadow:0 0 0 3px rgba(21,160,90,.18)}
.tl-day .tl-label{font-size:13px;font-weight:800;color:var(--fg1)}
.tl-day.today .tl-label{color:var(--ahead)}
.tl-day .tl-n{font-size:11px;color:var(--fg4);font-weight:600;background:#fff;border:1px solid var(--line);border-radius:100px;padding:1px 9px}
.tl-grp{display:flex;flex-direction:column;gap:9px;margin-bottom:8px}
.logentry{display:flex;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:13px;box-shadow:var(--shadow);padding:13px 15px}
.logentry .le-rail{display:flex;flex-direction:column;align-items:center;flex:none}
.logentry .le-av{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700;flex:none}
.logentry .le-line{flex:1;width:2px;background:var(--line-soft);margin-top:4px;border-radius:2px}
.logentry .le-body{flex:1;min-width:0}
.logentry .le-top{display:flex;align-items:center;gap:9px;margin-bottom:5px}
.logentry .le-who{font-size:13px;font-weight:700;color:var(--fg1)}
.logentry .le-proc{display:flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:2px 9px;border-radius:100px}
.logentry .le-proc.note{color:var(--fg4);background:var(--line-soft)}
.logentry .le-prog{margin-left:auto;font-size:12px;font-weight:800;color:var(--fg2)}
.logentry .le-note{font-size:13px;color:var(--fg1);line-height:1.5;margin-bottom:7px;word-break:break-word}
.logentry .le-task{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--fg4);flex-wrap:wrap}
.logentry .le-task .le-dot{width:7px;height:7px;border-radius:50%;flex:none}
.logentry .le-task .le-tt{font-weight:700;color:var(--fg3)}
.logentry .le-task .le-sep{color:var(--fg5)}
.logentry .le-task .le-pt{font-weight:600;color:var(--fg3)}
.logentry .le-task .le-sname{color:var(--fg2)}
.logentry .le-block{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:11.5px;font-weight:600;color:#9C3B2E;background:#FCEDEA;border:1px solid #F4D2CB;border-radius:8px;padding:6px 10px}
.logentry .le-block svg{flex:none;color:var(--behind)}

.tbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.tbar .seg{display:flex;align-items:center;gap:7px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:6px 10px}
.tbar label{font-size:11.5px;color:var(--fg4);font-weight:600}
.tbar select,.tbar .search input{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;cursor:pointer}
.tbar .search{display:flex;align-items:center;gap:7px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:6px 12px;flex:1;min-width:180px;max-width:300px}
.tbar .search svg{width:14px;height:14px;color:var(--fg4)}
.tbar .search input{cursor:text;width:100%}
.tbar .sp{flex:1}
.tbar .tb-btn{display:flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;color:var(--fg2);
  font-family:inherit;font-size:12.5px;font-weight:600;padding:8px 13px;border-radius:10px;cursor:pointer;transition:all .15s}
.tbar .tb-btn:hover{border-color:var(--primary-mid);color:var(--primary)}
.tbar .tb-btn svg{width:14px;height:14px}
.tbar .tb-btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.tbar .tb-btn.primary:hover{background:var(--ink)}

.batchbar{display:flex;align-items:center;gap:12px;background:var(--ink);color:#fff;border-radius:12px;padding:10px 16px;margin-bottom:12px}
.batchbar .bb-n{font-size:13px;font-weight:700}
.batchbar .bb-n b{font-family:var(--font-num)}
.batchbar select{border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.12);color:#fff;border-radius:8px;padding:6px 10px;font-family:inherit;font-size:12.5px;outline:none}
.batchbar select option{color:#1E2530}
.batchbar .bb-go{border:none;background:#fff;color:var(--ink);font-family:inherit;font-size:12.5px;font-weight:700;padding:7px 14px;border-radius:8px;cursor:pointer}
.batchbar .bb-x{margin-left:auto;border:none;background:rgba(255,255,255,.15);color:#fff;width:28px;height:28px;border-radius:8px;cursor:pointer;font-size:15px}

.tbl-wrap{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:auto}
table.dt{border-collapse:separate;border-spacing:0;width:100%;min-width:1380px;font-size:12.5px}
table.dt th{position:sticky;top:0;z-index:5;background:#F7F9FC;color:var(--fg3);font-weight:700;font-size:11.5px;text-align:left;
  padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
table.dt th.proc{text-align:center;color:var(--fg2)}
table.dt th.proc small{display:block;font-family:var(--font-num);font-weight:700;color:var(--primary);font-size:10px}
table.dt td{padding:7px 12px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
table.dt tr:hover td{background:#FAFBFE}
table.dt tr.sel td{background:#EEF4FC}
table.dt .c{text-align:center}
.dt .ck{width:15px;height:15px;accent-color:var(--primary);cursor:pointer}
.dt .tname{font-weight:600;color:var(--fg1);white-space:normal}
.dt .tparent{color:var(--fg3);font-size:11.5px;white-space:nowrap}
.dt .tn-td{min-width:180px;max-width:250px}
.dt .tn-wrap{display:flex;align-items:flex-start;gap:6px;flex-wrap:wrap}
.dt .tn-type{font-size:10px;font-weight:700;padding:2px 7px;border-radius:6px;flex:none;margin-top:1px}
.dt .catpill{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:2px 9px;border-radius:100px}
.dt .catpill .d{width:7px;height:7px;border-radius:50%}
.dt [contenteditable]{outline:none;border-radius:6px;padding:2px 5px;min-width:30px;display:inline-block}
.dt [contenteditable]:hover{background:#EEF2F8}
.dt [contenteditable]:focus{background:#fff;box-shadow:0 0 0 2px var(--primary)}
.dt select.cell{border:1px solid transparent;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);border-radius:6px;padding:3px 4px;cursor:pointer}
.dt select.cell:hover{border-color:var(--line);background:#fff}
.dt .pcell{width:54px;text-align:center;cursor:pointer;user-select:none}
.dt .pdot{width:24px;height:24px;border-radius:7px;margin:0 auto;display:flex;align-items:center;justify-content:center;transition:all .12s;border:1.5px solid transparent}
.dt .pdot svg{width:13px;height:13px}
.dt .pdot.todo{background:#F0F2F6;color:var(--fg5)}
.dt .pdot.doing{background:#FCEFDD;color:var(--amber);border-color:#F2C98A}
.dt .pdot.done{background:var(--ahead);color:#fff}
.dt .pcell:hover .pdot{transform:scale(1.12)}
.dt .curp{font-size:11.5px;font-weight:700;color:var(--ink)}
.dt .sbadge{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:6px}
.dt .delr{border:none;background:none;color:var(--fg4);cursor:pointer;padding:4px;border-radius:6px}
.dt .delr:hover{background:#FCEBEC;color:var(--behind)}
.dt .delr svg{width:14px;height:14px}
.dt-empty{padding:50px;text-align:center;color:var(--fg4);font-size:13px}

/* ───────── 模态：从美术确认单引用 ───────── */
.modal-mask{position:fixed;inset:0;z-index:200;background:rgba(13,30,60,.5);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:28px;animation:fade .18s}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{width:min(920px,100%);max-height:88vh;background:#fff;border-radius:18px;box-shadow:var(--shadow-pop);display:flex;flex-direction:column;overflow:hidden;animation:rise .22s cubic-bezier(.2,.7,.3,1)}
@keyframes rise{from{transform:translateY(16px);opacity:0}to{transform:none;opacity:1}}
.modal-head{display:flex;align-items:center;gap:12px;padding:18px 22px;border-bottom:1px solid var(--line)}
.modal-head .mh-ic{width:38px;height:38px;border-radius:11px;flex:none;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--ink),var(--primary));color:#fff}
.modal-head .mh-ic svg{width:20px;height:20px}
.modal-head .mh-t{font-size:16px;font-weight:700;color:var(--fg1)}
.modal-head .mh-s{font-size:12px;color:var(--fg3);margin-top:2px}
.modal-head .mh-x{margin-left:auto;border:none;background:var(--bg);width:32px;height:32px;border-radius:9px;cursor:pointer;color:var(--fg3);font-size:17px}
.modal-head .mh-x:hover{background:#EEF1F6}
.modal-body{display:grid;grid-template-columns:1.4fr 1fr;flex:1;min-height:0}
@media(max-width:760px){.modal-body{grid-template-columns:1fr}}
.ref-list{overflow:auto;padding:14px 18px;border-right:1px solid var(--line)}
.ref-src{font-size:11.5px;color:var(--fg4);margin-bottom:10px;display:flex;align-items:center;gap:7px}
.ref-src .docno{font-family:var(--font-num);font-weight:700;color:var(--primary)}
.ref-item{display:flex;align-items:flex-start;gap:11px;padding:11px 12px;border:1px solid var(--line);border-radius:11px;margin-bottom:9px;cursor:pointer;transition:all .14s}
.ref-item:hover{border-color:var(--primary-mid);background:#FAFCFF}
.ref-item.dis{opacity:.55;cursor:not-allowed;background:#FAFAFB}
.ref-item.on{border-color:var(--primary);background:#F2F7FE}
.ref-item .rck{width:17px;height:17px;border-radius:5px;border:1.6px solid var(--fg5);flex:none;margin-top:1px;display:flex;align-items:center;justify-content:center;transition:all .14s}
.ref-item.on .rck{background:var(--primary);border-color:var(--primary)}
.ref-item .rck svg{width:11px;height:11px;color:#fff;opacity:0}
.ref-item.on .rck svg{opacity:1}
.ref-item .ri-main{flex:1;min-width:0}
.ref-item .ri-name{font-size:13px;font-weight:600;color:var(--fg1)}
.ref-item .ri-sub{font-size:11.5px;color:var(--fg4);margin-top:2px}
.ref-item .ri-tag{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:6px;flex:none}
.ri-tag.qty{background:#EEF4FC;color:var(--primary)}
.ri-tag.reuse{background:#E7F6EE;color:var(--ahead)}
.ri-tag.tbd{background:#FCEFDD;color:var(--amber)}

.ref-side{padding:18px;display:flex;flex-direction:column;background:#FAFBFE}
.ref-side .rs-t{font-size:12px;font-weight:700;color:var(--fg3);margin-bottom:12px}
.ref-prev{flex:1;overflow:auto;display:flex;flex-direction:column;gap:7px}
.ref-prev .pv{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--fg2);background:#fff;border:1px solid var(--line);border-radius:9px;padding:8px 11px}
.ref-prev .pv .pd{width:7px;height:7px;border-radius:50%;flex:none}
.ref-prev .pv .pn{flex:1}
.ref-prev .pv .px{font-family:var(--font-num);font-size:11px;color:var(--fg4)}
.ref-prev .pv-empty{font-size:12px;color:var(--fg4);text-align:center;padding:30px 0}
.ref-count{margin-top:14px;padding:14px;border-radius:12px;background:#fff;border:1px solid var(--line);text-align:center}
.ref-count .rc-n{font-family:var(--font-num);font-size:34px;font-weight:800;color:var(--ink);line-height:1}
.ref-count .rc-l{font-size:12px;color:var(--fg3);margin-top:3px}
.ref-foot{display:flex;align-items:center;gap:12px;padding:15px 22px;border-top:1px solid var(--line)}
.ref-foot .rf-note{font-size:11.5px;color:var(--fg4);flex:1}
.ref-foot .rf-note b{color:var(--amber)}
.btn-confirm{border:none;background:var(--primary);color:#fff;font-family:inherit;font-size:13.5px;font-weight:700;padding:11px 22px;border-radius:11px;cursor:pointer;transition:background .15s}
.btn-confirm:hover{background:var(--ink)}
.btn-confirm:disabled{background:var(--fg5);cursor:not-allowed}
.btn-ghost2{border:1px solid var(--line);background:#fff;color:var(--fg2);font-family:inherit;font-size:13px;font-weight:600;padding:11px 18px;border-radius:11px;cursor:pointer}

/* 引入数据：来源选择 + 导入面板 */
.src-wrap{flex:1;min-height:0;display:flex;flex-direction:column;overflow:auto}
.src-seg{display:flex;gap:10px;padding:16px 22px 4px}
.src-opt{flex:1;display:flex;align-items:flex-start;gap:11px;text-align:left;border:1.5px solid var(--line);background:#fff;border-radius:13px;padding:13px 15px;cursor:pointer;transition:all .14s;font-family:inherit}
.src-opt:hover{border-color:var(--primary-mid)}
.src-opt.on{border-color:var(--primary);background:#F2F7FE}
.src-opt.dis{opacity:.7;cursor:not-allowed;background:#FAFBFE}
.src-opt.dis:hover{border-color:var(--line)}
.src-opt .so-ic{width:34px;height:34px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--bg);color:var(--primary)}
.src-opt.on .so-ic{background:var(--primary);color:#fff}
.src-opt .so-ic svg{width:18px;height:18px}
.src-opt .so-t{font-size:13.5px;font-weight:700;color:var(--fg1);display:flex;align-items:center;gap:7px}
.src-opt .so-s{font-size:11.5px;color:var(--fg4);margin-top:2px}
.so-badge{font-size:10px;font-weight:700;color:var(--amber);background:#FCEFDD;border-radius:6px;padding:1px 7px}
.src-panel{flex:1;min-height:0;display:flex;flex-direction:column}
.src-panel .modal-body{border-top:1px solid var(--line);margin-top:12px}
.imp-drop{margin:18px 22px 8px;border:1.5px dashed var(--line);border-radius:14px;padding:34px 24px;display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;background:#FAFBFE;transition:all .14s;font-family:inherit}
.imp-drop:hover{border-color:var(--primary);background:#F2F7FE}
.imp-drop .id-ic{width:46px;height:46px;border-radius:13px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line);color:var(--primary)}
.imp-drop .id-ic svg{width:24px;height:24px}
.imp-drop .id-t{font-size:14px;font-weight:700;color:var(--fg1)}
.imp-drop .id-s{font-size:12px;color:var(--fg4);text-align:center;max-width:440px;line-height:1.6}
.imp-reset{margin:0 22px 14px;align-self:flex-start;border:none;background:none;color:var(--fg3);font-family:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.imp-reset:hover{color:var(--primary)}
.ref-item.ro{cursor:default}
.ref-item.ro:hover{border-color:var(--line);background:#fff}
.imp-sum{display:flex;flex-direction:column;gap:8px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px 15px}
.isum-row{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12.5px}
.isum-k{color:var(--fg4)}
.isum-v{font-weight:700;color:var(--fg1)}
.doc-soon{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:11px;padding:44px 30px}
.doc-soon .ds-ic{width:54px;height:54px;border-radius:15px;display:flex;align-items:center;justify-content:center;background:var(--bg);color:var(--fg4)}
.doc-soon .ds-ic svg{width:28px;height:28px}
.doc-soon .ds-t{font-size:15px;font-weight:700;color:var(--fg2)}
.doc-soon .ds-s{font-size:12.5px;color:var(--fg4);max-width:460px;line-height:1.7}

/* 任务总表：未排期占位 */
.dt-unset{font-size:11.5px;font-weight:600;color:var(--fg5);background:var(--bg);border:1px dashed var(--line);border-radius:6px;padding:2px 9px;white-space:nowrap}

/* 日历排期 · 提交排期栏 */
.cal-submit{display:flex;align-items:center;gap:16px;margin-top:14px;background:#fff;border:1px solid var(--line);border-radius:13px;padding:13px 16px;box-shadow:0 1px 3px rgba(20,40,80,.05)}
.cal-submit .cs-info{display:flex;align-items:flex-start;gap:11px;flex:1;min-width:0}
.cal-submit .cs-ic{width:32px;height:32px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--primary);color:#fff}
.cal-submit .cs-ic.ok{background:#15A05A}
.cal-submit .cs-tx{display:flex;flex-direction:column;gap:2px;min-width:0}
.cal-submit .cs-t{font-size:13px;font-weight:600;color:var(--fg1)}
.cal-submit .cs-t b{color:var(--primary);font-weight:800}
.cal-submit .cs-tx small{font-size:11px;color:var(--fg4);line-height:1.5}
.cs-btn{flex:none;border:none;background:var(--primary);color:#fff;font-family:inherit;font-size:13px;font-weight:700;padding:11px 20px;border-radius:11px;cursor:pointer;transition:background .14s}
.cs-btn:hover{background:var(--primary-mid)}
.cs-btn:disabled,.cs-btn.done{background:#EAEEF5;color:var(--fg4);cursor:default}

/* ───────── 多维表（任务总表）控件 ───────── */
table.dt.mdt{min-width:1120px}
.dt .mdt-txt{font-size:12px;color:var(--fg2)}
.dt .mdt-pill{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:2px 4px 2px 9px;border-radius:100px}
.dt .mdt-pill .pd{width:7px;height:7px;border-radius:50%;flex:none}
.dt .mdt-pill select{border:none;background:none;font-family:inherit;font-size:11px;font-weight:700;color:inherit;outline:none;cursor:pointer;padding:0 2px}
.dt .dt-date{border:1px solid transparent;background:none;font-family:inherit;font-size:11.5px;color:var(--fg2);outline:none;cursor:pointer;border-radius:6px;padding:2px 4px}
.dt .dt-date:hover{background:#EEF2F8}
.dt .dt-date:focus{border-color:var(--primary-mid);background:#fff}
.dt .mdt-prog{display:inline-flex;align-items:center;gap:7px}
.dt .mdt-prog .mp-bar{width:54px;height:5px;border-radius:3px;background:#E7EBF2;overflow:hidden}
.dt .mdt-prog .mp-bar i{display:block;height:100%;border-radius:3px}
.dt .mdt-prog .mp-n{font-size:11px;font-weight:700;color:var(--fg3);min-width:30px}
.dt td select.cell{border:none;background:none;font-family:inherit;font-size:12px;color:var(--fg1);outline:none;cursor:pointer;max-width:140px}
.dt .dt-num{width:46px;border:1px solid transparent;background:none;font-family:var(--font-num);font-size:12px;color:var(--fg2);outline:none;border-radius:6px;padding:2px 4px;text-align:right}
.dt .dt-num:hover{background:#EEF2F8}
.dt .dt-num:focus{border-color:var(--primary-mid);background:#fff}
.dt .hr-u{font-size:10.5px;color:var(--fg4);margin-left:2px}
/* 结构化分组行 */
.dt .grp-row td.grp-cell{background:#F3F6FB;border-bottom:1px solid var(--line);cursor:pointer;padding-top:8px;padding-bottom:8px}
.dt .grp-row:hover td.grp-cell{background:#EBF1F9}
.dt .grp-row.d0 td.grp-cell{background:#E9EFF8}
.dt .grp-row.lv-model td.grp-cell{background:#E6EEF8;border-top:2px solid var(--line)}
.dt .grp-row.lv-module td.grp-cell{background:#F7F9FC}
.dt .grp-row .grp-bar{display:inline-block;width:3px;height:14px;border-radius:2px;vertical-align:-2px;margin-right:9px}
.dt .grp-row.lv-model .grp-bar{height:17px}
.dt .grp-row .grp-ic{display:inline-flex;vertical-align:-3px;margin-right:7px}
.dt .grp-row .grp-caret{display:inline-flex;color:var(--fg3);transition:transform .18s;margin-right:8px;vertical-align:-1px}
.dt .grp-row .grp-caret.col{transform:rotate(-90deg)}
.dt .grp-row .grp-name{font-size:12.5px;font-weight:700;color:var(--ink)}
.dt .grp-row.lv-model .grp-name{font-size:14px;font-weight:800;color:var(--fg1)}
.dt .grp-row.lv-style .grp-name{font-size:12.5px;font-weight:700;color:var(--fg1)}
.dt .grp-row.lv-module .grp-name{color:var(--fg2);font-size:12px;font-weight:600}
.dt .grp-row .grp-pno{font-size:11px;font-weight:700;color:#fff;background:var(--primary);border-radius:100px;padding:2px 11px;margin-left:10px}
.dt .grp-row .grp-tag{font-size:10.5px;font-weight:700;border-radius:6px;padding:1px 9px;margin-left:9px}
.dt .grp-row .grp-n{font-size:10.5px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:0 8px;margin-left:9px}

/* 总表排序模式切换（与看板一致：按轿厢款式 / 按部件分类）*/
.mode-mini{display:inline-flex;background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:2px;gap:2px}
.mm-btn{border:none;background:none;font-family:inherit;font-size:12px;font-weight:600;color:var(--fg3);padding:5px 11px;border-radius:7px;cursor:pointer;white-space:nowrap;transition:all .14s}
.mm-btn:hover{color:var(--primary)}
.mm-btn.on{background:#fff;color:var(--ink);font-weight:700;box-shadow:0 1px 3px rgba(20,40,80,.12)}

/* 工具栏危险按钮 + 清空确认 */
.tb-btn.danger{color:var(--behind)}
.tb-btn.danger:hover{border-color:var(--behind);background:#FCEBEC}
.mh-ic.danger{background:#FCEBEC;color:var(--behind)}
.clear-warn{font-size:12.5px;line-height:1.7;color:var(--fg2);padding:14px 20px 4px}
.clear-warn b{color:var(--behind);font-weight:800}
.btn-danger{border:none;background:var(--behind);color:#fff;font-family:inherit;font-size:13px;font-weight:700;padding:11px 18px;border-radius:11px;cursor:pointer;transition:background .14s}
.btn-danger:hover{background:#D03A3F}
.btn-danger:disabled{background:#E7B6B8;cursor:default}

.fields-menu{position:relative}
.fm-panel{position:absolute;top:calc(100% + 6px);right:0;z-index:40;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-pop);padding:8px;min-width:160px}
.fm-panel.hidden{display:none}
.fm-title{font-size:11px;font-weight:700;color:var(--fg4);padding:4px 8px 6px}
.fm-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;font-size:12.5px;color:var(--fg2);cursor:pointer}
.fm-item:hover{background:var(--bg)}
.fm-item input{accent-color:var(--primary);width:14px;height:14px}
.fm-item .fm-req{margin-left:auto;font-size:9.5px;font-weight:700;color:var(--primary);background:#F0F7FF;border:1px solid #C6E1FF;border-radius:5px;padding:0 5px}

/* 新增任务对话框 */
.nf-modal{width:min(560px,100%)}
.nf-body{padding:18px 22px;overflow:auto;display:flex;flex-direction:column;gap:11px}
.nf-row{display:flex;align-items:center;gap:12px}
.nf-row .nf-l{width:84px;flex:none;font-size:12.5px;font-weight:600;color:var(--fg2)}
.nf-in{flex:1;border:1px solid var(--line);background:#fff;border-radius:9px;padding:8px 11px;font-family:inherit;font-size:13px;color:var(--fg1);outline:none}
.nf-in:focus{border-color:var(--primary-mid)}
select.nf-in{cursor:pointer}
.nf-row .nf-h{font-size:11px;color:var(--fg4);flex:none}
.nf-2{display:flex;gap:14px}
.nf-2 .nf-row{flex:1}
.nf-2 .nf-l{width:auto}

/* toast */
#abToast{position:fixed;left:50%;bottom:34px;transform:translateX(-50%) translateY(10px);z-index:300;
  background:var(--ink);color:#fff;font-size:13px;font-weight:600;padding:12px 22px;border-radius:11px;box-shadow:var(--shadow-pop);opacity:0;transition:all .25s;pointer-events:none}
#abToast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ───────── 排序方式切换条 ───────── */
.modebar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px 16px;box-shadow:var(--shadow);margin-bottom:14px}
.modebar .mb-label{font-size:11.5px;color:var(--fg4);font-weight:700;flex:none}
.modeseg{display:flex;gap:3px;background:var(--bg);border:1px solid var(--line);border-radius:11px;padding:3px;flex:none}
.ms-btn{display:flex;flex-direction:column;align-items:flex-start;gap:0;border:none;background:none;font-family:inherit;border-radius:9px;padding:6px 15px;cursor:pointer;transition:all .14s}
.ms-btn .ms-l{font-size:13px;font-weight:700;color:var(--fg2);line-height:1.3}
.ms-btn .ms-s{font-size:10px;color:var(--fg4)}
.ms-btn:hover{background:#fff}
.ms-btn.on{background:var(--ink);box-shadow:0 2px 8px rgba(13,55,121,.25)}
.ms-btn.on .ms-l{color:#fff}
.ms-btn.on .ms-s{color:#A9C6EE}
.modebar .mb-hint{font-size:11.5px;color:var(--fg3);max-width:520px;line-height:1.45}
.modebar .mb-hint b{color:var(--ink);font-weight:700}
.modebar .sp{flex:1}
.modebar .mb-edit{font-size:12.5px;flex:none}

/* ───────── 按轿厢风格视图 ───────── */
.style-sec{border-top:1px solid var(--line-soft)}
.style-sec-head{display:flex;align-items:center;gap:8px;padding:7px 18px 7px 30px;background:#F7F9FD}
.style-sec-head .ssh-bar{width:4px;height:13px;border-radius:2px;flex:none}
.style-sec-head .ssh-l{font-size:12px;font-weight:800;color:var(--fg1)}
.style-sec-head .ssh-cat{font-size:10.5px;font-weight:700;margin-left:auto;opacity:.85}

.cabin-grp{border-top:1px solid var(--line-soft)}
.cabin-grp:first-child{border-top:none}
/* 父件（轿厢 / 井道）行 */
.runner-row.is-parent{background:var(--ccs,#F7F9FD)}
.runner-row.is-parent .rr-name{flex-direction:row;align-items:center;gap:7px;padding:10px 12px 10px 16px;cursor:pointer}
.runner-row.is-parent .rr-name:hover{filter:brightness(.985)}
.runner-row.is-parent .pcaret{display:flex;color:var(--fg3);transition:transform .2s;flex:none}
.cabin-grp.collapsed .pcaret{transform:rotate(-90deg)}
.runner-row.is-parent .rn-dot{position:static;width:9px;height:9px;flex:none;top:auto;left:auto}
.runner-row.is-parent .parent-name{font-size:13px;font-weight:800;color:var(--fg1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.runner-row.is-parent .ptag{font-size:9.5px;font-weight:800;color:#fff;background:var(--cc);border-radius:5px;padding:1px 6px;flex:none}
.runner-row.is-parent .pcount{font-size:10.5px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:1px 8px;flex:none;margin-left:auto}
.syn-track{display:flex;align-items:center;padding-left:16px}
.syn-note{font-size:11px;color:var(--fg4)}

/* 配套件（子件）行 —— 模块分组 */
.cabin-children{position:relative}
.cabin-grp.collapsed .cabin-children{display:none}
.module-grp{border-top:1px solid var(--line-soft)}
.module-grp:first-child{border-top:none}
.module-head{display:flex;align-items:center;gap:8px;padding:7px 18px 7px 40px;background:#FBFCFE;cursor:pointer;position:relative}
.module-head:hover{background:#F5F8FC}
.module-head::before{content:'';position:absolute;left:30px;top:50%;width:7px;border-top:1.5px dashed var(--line)}
.module-head .mod-caret{display:flex;color:var(--fg4);transition:transform .18s;flex:none}
.module-grp.collapsed .mod-caret{transform:rotate(-90deg)}
.module-head .mod-name{font-size:12px;font-weight:800;color:var(--cc,var(--car));letter-spacing:.02em}
.module-head .mod-count{font-size:10px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:0 7px}
.module-children{position:relative}
.module-grp.collapsed .module-children{display:none}
.module-children::before{content:'';position:absolute;left:48px;top:0;bottom:20px;border-left:1.5px dashed var(--line);pointer-events:none}
.runner-row.is-child .rr-name{padding-left:74px;cursor:default}
.runner-row.is-child .rn-dot{left:60px}
.runner-row.is-child .rr-name::before{content:'';position:absolute;left:48px;top:50%;width:14px;border-top:1.5px dashed var(--line)}
.runner-row.is-child.editable .rr-name{padding-right:30px;cursor:grab}
.runner-row.is-child.editable:hover{background:#FAFCFF}
.runner-row.is-child.dragging{opacity:.45}
.cabin-grp.drop{box-shadow:inset 0 0 0 2px var(--car);background:#FBF5EA}
.cabin-grp.drop .runner-row.is-parent{background:#F7EAD2}
.child-x{position:absolute;right:9px;top:50%;transform:translateY(-50%);border:none;background:#FCEBEC;color:var(--behind);width:19px;height:19px;border-radius:6px;cursor:pointer;font-size:10px;line-height:1;display:flex;align-items:center;justify-content:center;z-index:8}
.child-x:hover{background:var(--behind);color:#fff}
.cabin-empty{padding:9px 18px 9px 74px;font-size:11.5px;color:var(--fg5)}
.scope-sel{font-size:11px;color:var(--fg3);max-width:138px}
.flat-rows .runner-row:first-child{border-top:none}
/* 复用项标记 */
.rn-reuse,.tn-reuse{font-size:9.5px;font-weight:800;color:#1F8A5B;background:#E3F4EA;border:1px solid #BBE3C9;border-radius:5px;padding:0 6px;flex:none;letter-spacing:.02em}
.tn-reuse{margin-right:2px}
.pcell.na{cursor:default}
.pcell.na .pdot{background:transparent !important;border:none !important;color:var(--fg5);box-shadow:none !important;font-weight:700}
.pdot.na{background:transparent !important;border:1px dashed var(--line) !important;color:var(--fg5)}

/* ═════════════ 缩略图 ═════════════ */
.thumb{flex:none;display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:pointer;position:relative;
  border:1px solid rgba(0,0,0,.07);box-shadow:0 1px 2px rgba(20,40,80,.12);background:#E8EDF5}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.thumb .th-g{color:#fff;font-weight:800;font-size:13px;text-shadow:0 1px 2px rgba(0,0,0,.28);font-family:var(--font-cn);user-select:none}
.thumb:hover{box-shadow:0 2px 9px rgba(20,40,80,.26)}
.rr-name > .thumb{position:absolute;left:13px;top:50%;transform:translateY(-50%)}
.runner-row.is-child .rr-name{padding-left:98px}
.runner-row.is-child .rr-name > .thumb{left:58px}
.mdt td .thumb{margin:0 auto}

/* ═════════════ 填报日志 · 三步导航 ═════════════ */
.stepnav{display:flex;align-items:center;gap:10px;margin-bottom:22px;flex-wrap:wrap}
.step{display:flex;align-items:center;gap:11px;border:1px solid var(--line);background:#fff;border-radius:13px;padding:11px 18px;cursor:pointer;font-family:inherit;transition:all .15s}
.step:hover{border-color:var(--primary-mid)}
.step .step-no{width:22px;height:22px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;background:var(--bg);color:var(--fg3);border:1px solid var(--line)}
.step .step-tt{display:flex;flex-direction:column;line-height:1.25;text-align:left}
.step .step-t{font-size:13.5px;font-weight:700;color:var(--fg2)}
.step .step-tt small{font-size:10.5px;color:var(--fg4)}
.step.on{background:linear-gradient(135deg,var(--ink),var(--primary));border-color:transparent;box-shadow:0 4px 12px -4px rgba(13,55,121,.5)}
.step.on .step-no{background:rgba(255,255,255,.22);color:#fff;border-color:transparent}
.step.on .step-t{color:#fff}
.step.on .step-tt small{color:#A9C6EE}
.step-arrow{color:var(--fg5);font-size:18px;font-weight:700}

/* ═════════════ 步骤① 周分配 ═════════════ */
.plan-tip{display:flex;align-items:flex-start;gap:11px;background:#EEF4FC;border:1px solid #CFE0F4;border-radius:13px;padding:13px 17px;font-size:12.5px;color:var(--fg2);margin-bottom:20px}
.plan-tip b{color:var(--ink);font-weight:700}
.plan-tip .pt-ic{width:22px;height:22px;flex:none;color:var(--primary)}
.plan-tip .pt-ic svg{width:18px;height:18px}
.wk-board{display:flex;flex-direction:column;gap:18px}
.wk-lane{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.wk-lane-head{display:flex;align-items:baseline;gap:10px;padding:11px 16px;background:linear-gradient(180deg,#F3F7FD,#EBF1FA);border-bottom:1px solid var(--line);border-left:4px solid var(--ink)}
.wlh-name{font-size:14px;font-weight:800;color:var(--fg1)}
.wlh-type{font-size:11.5px;font-weight:700;color:#fff;background:var(--primary);border-radius:100px;padding:2px 10px}
.wk-cols{display:flex;gap:12px;padding:14px 16px;overflow-x:auto}
.wk-col{flex:0 0 224px;width:224px;background:var(--bg);border:1px solid var(--line);border-radius:12px;display:flex;flex-direction:column;min-height:130px;transition:all .14s}
.wk-col.cur{border-color:var(--primary)}
.wk-col.drop{border-color:var(--primary);background:#EFF5FE;box-shadow:0 0 0 2px var(--primary)}
.wk-head{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--line)}
.wk-h-l{display:flex;flex-direction:column;gap:1px;min-width:0}
.wk-s{font-size:12.5px;font-weight:800;color:var(--ink)}
.wk-rg{font-size:10.5px;color:var(--fg4)}
.wk-n{margin-left:auto;font-size:11px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:1px 8px}
.wk-body{display:flex;flex-direction:column;gap:8px;padding:10px;flex:1}
.wk-empty{font-size:11.5px;color:var(--fg5);text-align:center;padding:20px 6px;border:1px dashed var(--line);border-radius:9px}
.pu-card{display:flex;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden;cursor:grab;box-shadow:0 1px 3px rgba(20,40,80,.08);transition:all .14s}
.pu-card:hover{box-shadow:0 4px 12px rgba(20,40,80,.16);border-color:var(--uc)}
.pu-card.dragging{opacity:.5}
.pu-bar{width:4px;flex:none;background:var(--uc)}
.pu-body{padding:8px 11px;flex:1;min-width:0}
.pu-top{display:flex;align-items:center;gap:8px;margin-bottom:2px}
.pu-cat{font-size:10.5px;font-weight:800}
.pu-n{margin-left:auto;font-size:10px;font-weight:700;color:var(--fg4)}
.pu-title{font-size:13px;font-weight:700;color:var(--fg1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pu-sub{font-size:11px;color:var(--fg4);margin-top:1px}
.pu-prog{display:flex;align-items:center;gap:7px;margin-top:7px}
.pu-pbar{flex:1;height:5px;border-radius:4px;background:var(--ucs);overflow:hidden}
.pu-pbar i{display:block;height:100%;border-radius:4px}
.pu-prog .num{font-size:10.5px;font-weight:700;color:var(--fg3)}

/* ═════════════ 步骤② 日历排期 ═════════════ */
.calwrap{display:flex;flex-direction:column;gap:18px}
.cal-bar{display:flex;align-items:center;gap:14px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 16px;box-shadow:var(--shadow);flex-wrap:wrap}
.cal-bar .sb-nav{display:flex;align-items:center;gap:10px}
.cal-bar .sp-nav{border:1px solid var(--line);background:#fff;width:28px;height:28px;border-radius:8px;cursor:pointer;font-size:16px;color:var(--fg3);line-height:1}
.cal-bar .sp-nav:hover{border-color:var(--primary-mid);color:var(--primary)}
.cal-bar .sb-label{display:flex;flex-direction:column;gap:1px;min-width:150px;text-align:center}
.cal-bar .sb-s{font-size:13.5px;font-weight:800;color:var(--ink)}
.cal-bar .sb-range{font-size:11px;color:var(--fg4)}
.cal-bar .sp{flex:1}
.cal-tip{font-size:11.5px;color:var(--fg4)}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:12px}
@media(max-width:1100px){.cal-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}}
.cal-cell{background:var(--panel);border:1px solid var(--line);border-radius:14px;min-height:172px;display:flex;flex-direction:column;box-shadow:var(--shadow);transition:all .14s}
.cal-cell.today{border-color:var(--primary)}
.cal-cell.drop{border-color:var(--primary);background:#EFF5FE;box-shadow:0 0 0 2px var(--primary)}
.cal-cell-head{display:flex;align-items:center;gap:7px;padding:8px 11px;border-bottom:1px solid var(--line-soft)}
.cch-wd{font-size:12px;font-weight:800;color:var(--fg2)}
.cal-cell.today .cch-wd{color:var(--primary)}
.cch-d{font-size:11px;color:var(--fg4)}
.cch-n{margin-left:auto;font-size:10.5px;font-weight:700;color:#fff;background:var(--primary);border-radius:100px;padding:0 7px}
.cal-cell-body{display:flex;flex-direction:column;gap:6px;padding:9px;flex:1}
.cal-cell-empty{font-size:11px;color:var(--fg5);text-align:center;padding:10px 0}
.cal-chip{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-left:3px solid var(--cc);border-radius:8px;padding:6px 9px;cursor:grab;box-shadow:0 1px 2px rgba(20,40,80,.08);transition:box-shadow .14s}
.cal-chip.has-stage{flex-direction:column;align-items:stretch;gap:6px}
.cal-chip .cc-row{display:flex;align-items:center;gap:8px}
.cal-chip .pux-stagewrap{margin-top:0}
.cal-chip:hover{box-shadow:0 3px 9px rgba(20,40,80,.15)}
.cal-chip.dragging{opacity:.5}
.cal-chip.done{opacity:.66}
.cc-main{flex:1;min-width:0}
.cc-name{font-size:12px;font-weight:700;color:var(--fg1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cc-meta{font-size:10.5px;color:var(--fg4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cc-p{font-size:11px;font-weight:800;color:var(--cc);flex:none}
.cal-pool{background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);transition:all .14s}
.cal-pool.drop{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary)}
.cal-pool-head{display:flex;align-items:center;gap:9px;padding:10px 15px;border-bottom:1px solid var(--line-soft)}
.cph-t{font-size:13px;font-weight:700;color:var(--fg1)}
.cph-n{font-size:11px;font-weight:700;color:var(--fg4);background:var(--bg);border:1px solid var(--line);border-radius:100px;padding:1px 9px}
.cal-pool-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:11px;padding:16px 18px;min-height:60px}

/* ═════════════ 步骤③ 今日填报 增强 ═════════════ */
.tc-row{flex-wrap:wrap;row-gap:6px}
.tc-main{flex:1 1 150px}
.tc-rec{font-size:10.5px;font-weight:700;color:var(--primary);background:#EEF4FC;border:1px solid #CFE0F4;border-radius:6px;padding:2px 8px;white-space:nowrap;flex:none}
.tc-mode{border:1px solid var(--line);background:#fff;border-radius:8px;font-family:inherit;font-size:11.5px;color:var(--fg2);padding:4px 7px;cursor:pointer;flex:none;outline:none}
.tc-mode:hover{border-color:var(--primary-mid)}
.logright-in{display:flex;flex-direction:column;gap:12px}
.rp-week{display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 16px;box-shadow:var(--shadow);flex-wrap:wrap}
.rpw-s{font-size:13.5px;font-weight:800;color:var(--ink)}
.rpw-rg{font-size:11px;color:var(--fg4)}
.rpw-stat{font-size:12px;color:var(--fg3)}
.rpw-stat b{font-weight:800;color:var(--fg1);margin-right:2px}
.rpw-stat.done b{color:var(--ahead)}

/* ═════════════ 轿厢层级强调 ═════════════ */
.cabin-tag{font-size:9.5px;font-weight:800;color:#fff;background:var(--cc,var(--car));border-radius:5px;padding:1px 6px;flex:none}
.cabin-kn{font-size:10.5px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:1px 8px;flex:none;margin-left:auto}
.style-sec-head .ssh-n{margin-left:auto;font-size:11px;font-weight:700;color:var(--car);background:#F7EFE0;border:1px solid #E7D3AE;border-radius:100px;padding:1px 9px}
.model-head .mg-cabin b{color:var(--car)}

/* ═════════════ 本体任务行重设计 · 6/29 新结构 ═════════════
   轿厢本体 / 井道本体 = 一级「模型制作」任务（最重要），同时是配套件父级。
   目标：一眼识别为"任务"而非标题；层级 型号 > 本体 > 模块 > 配套件 清晰。 */
.style-sec{border-top:1px solid var(--line)}
/* 本体行：左侧分类色条（强任务感）+ 柔和分类底色渐变 */
.runner-row.is-parent{
  background:linear-gradient(90deg,var(--ccs,#EEF3FA),#fff 55%);
  box-shadow:inset 4px 0 0 var(--cc,#2861AE);
  min-height:56px;
}
.runner-row.is-parent .rr-name{padding:12px 12px 12px 20px;gap:8px}
.runner-row.is-parent .rn-dot{display:none}              /* 用左色条代替小圆点 */
.runner-row.is-parent .parent-name{font-size:13.5px;font-weight:800;color:var(--fg1)}
/* 类型 chip：填充分类色 → 明确"这是本体模型制作任务" */
.cabin-tag{font-size:10px;font-weight:800;color:#fff;background:var(--cc,var(--car));border-radius:6px;padding:2px 8px;flex:none;letter-spacing:.02em;box-shadow:0 1px 2px rgba(15,38,80,.12)}
.cabin-tag.is-reuse{background:var(--fg4);box-shadow:none}
/* 配套件计数：弱化为"含 N 件"附属说明（带方框示意"内含子项"），不再像表头统计 */
.cabin-kn{font-size:11px;font-weight:600;color:var(--fg4);background:none;border:none;border-radius:0;padding:0;margin-left:auto;display:inline-flex;align-items:center;gap:5px;flex:none}
.cabin-kn::before{content:'';width:11px;height:11px;border:1.4px solid currentColor;border-radius:3px;opacity:.6}
.cabin-grp.collapsed .cabin-kn{color:var(--cc,var(--car))}
/* 复用本体（封闭井道沿用既有资产）：灰调，与真实制作任务区分 */
.cabin-grp.is-syn .runner-row.is-parent{background:#FAFBFD;box-shadow:inset 4px 0 0 var(--fg5)}
.syn-track{padding-left:20px}
.syn-note{font-size:11.5px;color:var(--fg4);font-style:normal}
/* 模块分组头 + 配套件行：递进缩进 + 舒适行距 */
.module-head{padding:7px 18px 7px 46px;background:#FAFCFE}
.module-head .mod-name{font-size:11.5px;font-weight:700}
.runner-row.is-child{min-height:48px}
.runner-row.is-child .rr-name{padding-top:10px;padding-bottom:10px}
.runner-row.is-child .rn-part{font-size:12px;font-weight:600}
.cabin-empty{padding:11px 18px 11px 74px}
/* COP/LOP 多轿厢共用标记（合并同类项后） */
.acc-share{margin-left:8px;font-size:10px;font-weight:700;color:var(--acc);background:#F1EDFB;border:1px solid #ddd2f3;border-radius:5px;padding:1px 7px;vertical-align:middle}

/* 任务总表：缩略图独立列（更大 + 视觉分区）*/
.mdt thead th:first-child{background:#F4F7FC}
.mdt td.tcol-thumb{background:#FAFBFE;border-right:1px solid var(--line-soft);width:86px;padding:8px 10px}
.mdt td.tcol-thumb .thumb{margin:0 auto}

/* ═════════════ 步骤1 周分配：左任务 / 右5周 ═════════════ */
.wkx{display:flex;flex-direction:column;gap:22px}
.wkx-bottom{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);display:flex;flex-direction:column;transition:all .14s}
.wkx-bottom.drop{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary)}
.wkx-lh{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line-soft);background:linear-gradient(180deg,#F1F6FD,#FBFCFE)}
.wkx-hint{font-size:11.5px;color:var(--fg4)}
.wkx-lt{font-size:13.5px;font-weight:800;color:var(--fg1)}
.wkx-ln{margin-left:auto;font-size:11px;font-weight:700;color:var(--fg4);background:var(--bg);border:1px solid var(--line);border-radius:100px;padding:1px 9px}
.wkx-lbody{display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:14px;padding:18px}
.wkx-empty{font-size:11.5px;color:var(--fg5);text-align:center;padding:22px 10px;border:1px dashed var(--line);border-radius:10px}
.wkx-rwrap{background:linear-gradient(180deg,#EAF1FB,#F2F6FC);border:1px solid #D7E3F3;border-radius:var(--radius);padding:20px 20px 18px;box-shadow:var(--shadow)}
.wkx-rh{display:flex;align-items:baseline;gap:10px;margin-bottom:16px;padding:0 2px}
.wkx-rt{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:800;color:var(--ink)}
.wkx-rs{font-size:11px;color:var(--fg3)}
.wkx-right{display:flex;gap:14px;overflow-x:auto;padding-bottom:4px}
.wkx-col{flex:0 0 236px;width:236px;background:#fff;border:1px solid #DCE6F4;border-radius:14px;display:flex;flex-direction:column;min-height:178px;transition:all .14s;box-shadow:0 1px 3px rgba(20,40,80,.05)}
.wkx-col.cur{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}
.wkx-col.drop{border-color:var(--primary);background:#EFF5FE;box-shadow:0 0 0 2px var(--primary)}
.wkx-ch{display:flex;align-items:center;gap:8px;padding:13px 14px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#F6F9FD,#fff)}
.wkx-col.cur .wkx-ch{background:linear-gradient(180deg,#E8F0FB,#fff)}
.wkx-ch-l{display:flex;flex-direction:column;gap:1px;min-width:0}
.wkx-cs{font-size:12.5px;font-weight:800;color:var(--ink)}
.wkx-cr{font-size:10.5px;color:var(--fg4)}
.wkx-cn{margin-left:auto;font-size:11px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:1px 8px}
.wkx-cb{display:flex;flex-direction:column;gap:10px;padding:13px;flex:1}
.wkx-cempty{font-size:11px;color:var(--fg5);text-align:center;padding:18px 6px;border:1px dashed var(--line);border-radius:9px}
/* timeline 横向滚动 */
.wkx-dates{display:flex;align-items:center;gap:4px;margin-top:4px}
.wkx-din{border:1px solid var(--line);background:#fff;border-radius:6px;font-family:var(--font-num);font-size:10.5px;color:var(--fg2);padding:2px 4px;cursor:pointer;max-width:108px;outline:none}
.wkx-din:hover{border-color:var(--primary-mid)}
.wkx-din:focus{border-color:var(--primary)}
.wkx-dash{color:var(--fg4);font-size:11px}
.wkx-add{flex:0 0 54px;align-self:stretch;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;border:2px dashed #C4D5EC;background:rgba(255,255,255,.55);border-radius:12px;color:var(--primary);cursor:pointer;font-family:inherit;transition:all .14s}
.wkx-add:hover{border-color:var(--primary);background:#fff;box-shadow:0 4px 12px rgba(40,97,174,.16)}
.wkx-add-ic{font-size:28px;font-weight:300;line-height:1}
/* 周时间轴：改为每周一整行横排，自上而下排列（周头在左，任务在该行内横向铺开） */
.wkx-right{flex-direction:column;gap:12px;overflow-x:visible}
.wkx-col{flex:none;width:auto;flex-direction:row;min-height:96px}
.wkx-ch{flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;width:176px;flex:none;border-bottom:none;border-right:1px solid var(--line)}
.wkx-ch .wkx-cn{margin-left:0;margin-top:4px}
.wkx-cb{flex-direction:row;flex-wrap:wrap;align-content:flex-start;gap:10px}
.wkx-cb .pux{flex:0 0 230px;width:230px}
.wkx-cb .wkx-cempty{flex:1;align-self:center;margin:0}
.wkx-add{flex:none;width:100%;min-height:46px;flex-direction:row;gap:8px}
.wkx-add small{font-size:12px}
/* 任务卡更紧凑 */
.pux{padding:8px 10px}
.pux-main{gap:8px}
.pux-title{font-size:12.5px;margin:2px 0 0}
.pux-top{gap:5px}
.pux-meta{margin-top:5px;gap:5px}
.pux-kind,.pux-scope{font-size:10px;padding:1px 6px}
.pal-grid{grid-template-columns:repeat(auto-fill,minmax(192px,1fr));gap:10px}
.wkx-cb{gap:8px}
.wkx-cb .pux{flex:0 0 202px;width:202px}
/* 日排期 chip：长任务名截断，不溢出框 */
.cal-chip{min-width:0;overflow:hidden}
.cal-chip .cc-row{flex:1;min-width:0;align-items:center}
.cal-chip .cc-main{flex:1;min-width:0;overflow:hidden}
.cal-chip .cc-name,.cal-chip .cc-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.cal-chip .cc-p{flex:none}
.wkx-add small{font-size:11px;font-weight:700;letter-spacing:.04em}
.pux{display:flex;gap:11px;background:#fff;border:1px solid var(--line);border-left:4px solid var(--uc);border-radius:11px;padding:10px 12px;cursor:grab;box-shadow:0 1px 3px rgba(20,40,80,.08);transition:all .14s}
.pux:hover{box-shadow:0 5px 15px rgba(20,40,80,.17)}
.pux.dragging{opacity:.5}
.pux .pux-tx{flex:1;min-width:0}
.pux-top{display:flex;align-items:center;gap:7px}
.pux-cat{font-size:10px;font-weight:800}
.pux-model{font-size:10.5px;font-weight:700;color:var(--fg4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pux-n{margin-left:auto;font-size:10px;font-weight:700;color:var(--fg4);flex:none}
.pux-title{font-size:14px;font-weight:800;color:var(--fg1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:3px}
.pux-prog{display:flex;align-items:center;gap:7px;margin-top:7px}
.pux-pbar{flex:1;height:5px;border-radius:4px;background:var(--ucs);overflow:hidden}
.pux-pbar i{display:block;height:100%;border-radius:4px}
.pux-prog .num{font-size:10px;font-weight:700;color:var(--fg3)}
.pux-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.pux-kind{font-size:10.5px;font-weight:700;color:var(--fg2);background:var(--ucs);border-radius:6px;padding:1px 8px}
.pux-scope{font-size:10.5px;font-weight:600;color:var(--fg4);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:1px 8px}
.pux-stagewrap{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:8px;background:#FBFCFE;border:1px solid var(--line);border-radius:8px;padding:4px 6px 4px 9px}
.pux-stagewrap.set{background:#E7F6EE;border-color:#BBE3C9}
.pux-stage-l{display:flex;align-items:center;gap:4px;font-size:10.5px;font-weight:700;color:var(--fg3);white-space:nowrap}
.pux-stagewrap.set .pux-stage-l{color:#15A05A}
.pux-stage{flex:1 1 90px;min-width:90px;border:none;background:none;font-family:inherit;font-size:11.5px;font-weight:600;color:var(--fg1);outline:none;cursor:pointer}
.pux-incl{font-size:10px;font-weight:700;color:var(--fg3);background:#fff;border:1px solid var(--line);border-radius:6px;padding:1px 7px;white-space:nowrap}
.pux-stagewrap.set .pux-incl{color:#15A05A;border-color:#BBE3C9}
.pux.placed{cursor:default;border-left-width:4px}
.pux.placed .thumb{cursor:zoom-in}

/* 缩略图放大查看（lightbox）*/
.thumb.zoom{cursor:zoom-in}
/* 缩略图上传面板（选择文件 / 粘贴剪贴板）*/
.tu-mask{position:fixed;inset:0;z-index:240;background:rgba(10,28,58,.5);display:flex;align-items:center;justify-content:center;padding:6vh 6vw;backdrop-filter:blur(2px)}
.tu-card{background:#fff;border-radius:14px;box-shadow:0 30px 80px rgba(0,0,0,.4);width:min(92vw,380px);overflow:hidden}
.tu-h{padding:14px 16px 10px;border-bottom:1px solid var(--line)}
.tu-h .tu-t{font-size:14px;font-weight:800;color:var(--fg1);display:block}
.tu-h .tu-s{font-size:11.5px;color:var(--fg4);margin-top:2px;display:block}
.tu-body{display:flex;gap:12px;padding:14px 16px;align-items:stretch}
.tu-prev{width:74px;height:74px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid var(--line)}
.tu-prev img{width:100%;height:100%;object-fit:cover}
.tu-prev span{color:#fff;font-size:24px;font-weight:800}
.tu-drop{flex:1;min-width:0;border:1.5px dashed var(--color-primary-light);border-radius:10px;background:var(--color-tint-1);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:10px;text-align:center;cursor:default;outline:none;transition:background .15s,border-color .15s}
.tu-drop:focus,.tu-drop.over{border-color:var(--color-primary);background:var(--color-tint-2)}
.tu-drop .tu-ic{color:var(--color-primary)}
.tu-drop .tu-d1{font-size:12px;font-weight:700;color:var(--color-primary-dark)}
.tu-drop .tu-d2{font-size:10.5px;color:var(--fg4)}
.tu-foot{display:flex;align-items:center;gap:8px;padding:0 16px 14px}
.tu-file{font-size:12px;font-weight:700;color:#fff;background:var(--color-primary);border:none;border-radius:8px;padding:7px 14px;cursor:pointer}
.tu-file:hover{background:var(--color-primary-mid)}
.tu-cancel{font-size:12px;font-weight:600;color:var(--fg3);background:none;border:1px solid var(--line);border-radius:8px;padding:7px 13px;cursor:pointer}
.tu-cancel:hover{color:var(--fg1);border-color:var(--fg4)}
.lb-mask{position:fixed;inset:0;z-index:200;background:rgba(10,28,58,.74);display:flex;align-items:center;justify-content:center;padding:6vh 6vw}
.lb-fig{position:relative;background:#fff;border-radius:16px;padding:14px;box-shadow:0 30px 80px rgba(0,0,0,.45);max-width:min(88vw,860px);max-height:90vh;display:flex;flex-direction:column;gap:10px}
.lb-img{max-width:100%;max-height:72vh;object-fit:contain;border-radius:10px;display:block}
.lb-ph{width:min(72vw,440px);height:min(48vh,300px);border-radius:12px;display:flex;align-items:center;justify-content:center}
.lb-ph-g{font-size:104px;font-weight:800;color:#fff;text-shadow:0 3px 14px rgba(0,0,0,.28)}
.lb-note{font-size:12.5px;color:var(--fg4);text-align:center}
.lb-cap{display:flex;flex-direction:column;gap:2px;padding:0 4px 2px}
.lb-cap-t{font-size:15px;font-weight:800;color:var(--fg1)}
.lb-cap-s{font-size:12px;color:var(--fg4)}
.lb-x{position:absolute;top:-14px;right:-14px;width:32px;height:32px;border-radius:50%;border:none;background:#fff;color:var(--fg2);font-size:20px;line-height:1;cursor:pointer;box-shadow:0 4px 14px rgba(0,0,0,.3)}
.lb-x:hover{background:var(--behind);color:#fff}

/* ═══════════ 反馈修改新增样式（v20260625）═══════════ */
/* 筛选条：周分配 / 今日填报 共用 */
.pf-bar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:14px}
.pf-search{display:flex;align-items:center;gap:7px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:7px 12px;flex:1;min-width:170px;max-width:280px}
.pf-search svg{width:14px;height:14px;color:var(--fg4);flex:none}
.pf-search input{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;width:100%}
.pf-seg{display:flex;align-items:center;gap:7px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:6px 11px}
.pf-seg label{font-size:11.5px;color:var(--fg4);font-weight:700}
.pf-seg select{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;cursor:pointer}
.pf-clr{border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:12px;font-weight:600;padding:7px 12px;border-radius:10px;cursor:pointer}
.pf-clr:hover{border-color:var(--behind);color:var(--behind)}
.composer .pf-bar{margin-bottom:10px}
.composer .pf-search{flex:1;max-width:none}

/* 周分配：调色板卡的「已排 N 周」徽标 / 已排段移除按钮 / 已排状态 */
.pux{position:relative}
.pux-wk{font-size:9.5px;font-weight:800;color:var(--ahead);background:#E7F6EE;border-radius:5px;padding:1px 6px;margin-left:auto}
.pux.scheduled{box-shadow:inset 0 0 0 1px var(--ahead,#15A05A)}
/* 调色板：型号分组 + 卡片可展开子件（B 方案） */
.wkx-lbody.grouped{display:block;padding:14px 18px}
.pal-mh{display:flex;align-items:center;gap:8px;padding:8px 11px;margin:12px 0 9px;background:linear-gradient(180deg,#fff,#F6F9FD);border:1px solid var(--line);border-radius:9px;cursor:pointer}
.pal-mh:first-child{margin-top:0}
.pal-mh:hover{background:#F2F6FC}
.pal-mh .pal-caret{display:flex;color:var(--fg4);transition:transform .18s}
.pal-mh.collapsed .pal-caret{transform:rotate(-90deg)}
.pal-mh .pal-nm{font-size:13px;font-weight:800;color:var(--fg1)}
.pal-mh .pal-type{font-size:10.5px;font-weight:700;color:var(--fg4);background:var(--bg);border:1px solid var(--line);border-radius:5px;padding:1px 7px}
.pal-mh .pal-n{margin-left:auto;font-size:10.5px;font-weight:700;color:var(--fg4)}
.pal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:14px;margin-bottom:4px}
.pux{flex-direction:column;gap:0}
.pux-main{display:flex;gap:11px;align-items:flex-start}
.pux-exp{display:flex;align-items:center;gap:5px;margin-top:9px;padding-top:8px;border-top:1px dashed var(--line);font-size:10.5px;font-weight:700;color:var(--fg3);cursor:pointer;user-select:none}
.pux-exp .pux-exp-c{display:flex;transition:transform .18s}
.pux-exp.on .pux-exp-c{transform:rotate(180deg)}
.pux-exp:hover{color:var(--uc)}
.pux-kids{display:flex;flex-direction:column;gap:3px;margin-top:7px}
.pux-kid{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--fg2);padding:3px 7px;border-radius:6px;background:var(--bg)}
.pux-kid.is-body{background:var(--ucs);font-weight:700;color:var(--fg1)}
.pux-kid .pk-dot{width:6px;height:6px;border-radius:50%;flex:none}
.pux-kid .pk-pt{font-weight:600;color:var(--fg3);flex:none}
.pux-kid .pk-nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pk-tag{font-size:9px;font-weight:800;border-radius:4px;padding:0 5px;flex:none}
.pk-tag.body{background:var(--uc);color:#fff}
.pk-tag.reuse{background:#EDEFF3;color:var(--fg3)}
/* 多选批量排期工具条 + 待排卡勾选 */
.plan-batch{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px;padding:9px 12px;background:linear-gradient(180deg,#fff,#F6F9FD);border:1px solid var(--line);border-radius:10px}
.plan-batch.active{border-color:var(--ink);box-shadow:0 2px 12px -5px rgba(20,40,80,.3)}
.plan-batch .pb-n{font-size:12px;font-weight:700;color:var(--fg3)}
.plan-batch.active .pb-n{color:var(--ink)}
.plan-batch .pb-lbl{font-size:11.5px;color:var(--fg3);font-weight:600}
.plan-batch .pb-sp{flex:1}
.plan-batch .pb-sel{font-size:11.5px;padding:4px 7px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--fg1)}
.plan-batch .pb-btn{font-size:11px;font-weight:700;color:var(--fg3);background:#fff;border:1px solid var(--line);border-radius:7px;padding:4px 10px;cursor:pointer}
.plan-batch .pb-btn:hover{color:var(--ink);border-color:var(--ink)}
.plan-batch .pb-btn.ghost{color:var(--fg4)}
.plan-batch .pb-apply{font-size:11.5px;font-weight:800;color:#fff;background:var(--ink);border:none;border-radius:7px;padding:5px 14px;cursor:pointer}
.plan-batch .pb-apply:hover{background:#0A2C5E}
.pux-chk{position:absolute;top:7px;right:7px;width:20px;height:20px;border:1.5px solid var(--fg5);border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:3;box-shadow:0 1px 3px rgba(20,40,80,.12)}
.pux:not(.placed) .pux-top{padding-right:24px}
.pux-chk svg{width:11px;height:11px;opacity:0;color:#fff}
.pux-chk.on{background:var(--ink);border-color:var(--ink)}
.pux-chk.on svg{opacity:1}
.pux.sel{box-shadow:0 0 0 2px var(--ink),0 5px 15px rgba(20,40,80,.17)}
/* 日排期：待排 chip 勾选 */
.cal-chip.pool{position:relative}
.cal-chip.pool .cc-row{padding-left:20px}
.cc-chk{position:absolute;top:6px;left:6px;width:15px;height:15px;border:1.5px solid var(--fg5);border-radius:4px;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2}
.cc-chk svg{width:9px;height:9px;opacity:0;color:#fff}
.cc-chk.on{background:var(--ink);border-color:var(--ink)}
.cc-chk.on svg{opacity:1}
.cal-chip.sel{box-shadow:0 0 0 2px var(--ink)}
.cal-chip.placed{opacity:.62}
.cal-chip.placed .cc-row{padding-right:64px}
.cc-placed{position:absolute;top:6px;right:6px;font-size:9px;font-weight:800;color:#15A05A;background:#E7F6EE;border:1px solid #BBE3C9;border-radius:5px;padding:1px 6px;z-index:2;white-space:nowrap}
.pal-chk.sm{width:15px;height:15px;border-radius:4px}
.pal-chk.sm svg{width:10px;height:10px}
/* 日排期：大类下按部件类型细分小标题 */
.cpg-pt{display:flex;align-items:center;gap:7px;padding:5px 14px 5px 36px;background:#FCFDFF;border-top:1px solid var(--line-soft)}
.cpg-pt .cpg-pt-dot{width:6px;height:6px;border-radius:50%;flex:none;opacity:.7}
.cpg-pt .cpg-pt-n{font-size:11px;font-weight:700;color:var(--fg2)}
.cpg-pt .cpg-pt-c{font-size:10px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:0 6px}
.pal-chk{width:17px;height:17px;border:1.5px solid var(--fg5);border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none}
.pal-chk svg{width:11px;height:11px;opacity:0;color:#fff}
.pal-chk.on{background:var(--ink);border-color:var(--ink)}
.pal-chk.on svg{opacity:1}
.pal-chk.part{background:var(--ink);border-color:var(--ink);opacity:.45}
.pal-chk.part svg{opacity:1}
.pux-rm{position:absolute;top:6px;right:6px;width:20px;height:20px;border-radius:6px;border:1px solid var(--line);background:#fff;color:var(--fg4);font-size:15px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:2}
.pux-rm:hover{border-color:var(--behind);color:var(--behind);background:#FCEBEC}
.wkx-lsub{font-size:11px;font-weight:700;color:var(--ahead);background:#E7F6EE;border-radius:6px;padding:2px 9px;margin-left:8px}

/* 今日填报：每行移除按钮 */
.tc-rm{flex:none;width:22px;height:22px;border-radius:6px;border:1px solid var(--line);background:#fff;color:var(--fg4);font-size:16px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.tc-rm:hover{border-color:var(--behind);color:var(--behind);background:#FCEBEC}

/* 今日已提交面板（问题2）*/
.subm{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-top:16px}
.subm-head{display:flex;align-items:center;gap:9px;margin-bottom:12px}
.subm-ic{width:28px;height:28px;border-radius:8px;flex:none;display:flex;align-items:center;justify-content:center;background:#E7F6EE;color:var(--ahead)}
.subm-ic svg{width:16px;height:16px}
.subm-t{font-size:14.5px;font-weight:700;color:var(--fg1)}
.subm-d{font-size:11px;color:var(--fg4);font-weight:600}
.subm-n{font-size:11px;font-weight:700;color:var(--ahead);background:#E7F6EE;border-radius:100px;padding:2px 9px}
.subm-empty{font-size:12px;color:var(--fg4);padding:14px;text-align:center;background:#FAFBFD;border:1px dashed var(--line);border-radius:10px;line-height:1.6}
.subm-list{display:flex;flex-direction:column;gap:7px}
.subm-item{display:flex;gap:9px;align-items:flex-start;border:1px solid var(--line);border-radius:10px;padding:9px 11px;background:#FBFCFE}
.subm-item .thumb{flex:none;margin-top:1px}
.subm-main{flex:1;min-width:0}
.subm-name{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:3px}
.subm-nm{font-size:12.5px;font-weight:700;color:var(--fg1)}
.subm-proc{font-size:10px;font-weight:700;border-radius:5px;padding:1px 7px}
.subm-note{font-size:11.5px;color:var(--fg2);line-height:1.5}
.subm-blk{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--behind);margin-top:3px}
.subm-blk svg{flex:none}
.subm-meta{font-size:10.5px;color:var(--fg4);margin-top:3px}

/* 总表：多段周次徽标 / 多段日期只读 */
.sprint-chips{display:flex;flex-wrap:wrap;gap:4px}
.sp-chip{font-family:var(--font-num);font-size:10.5px;font-weight:700;color:var(--primary);background:#E8F0FB;border-radius:5px;padding:1px 7px;white-space:nowrap}
.dt-multi{font-size:11.5px;color:var(--fg3)}

/* 成员名单管理面板（问题5）*/
.tb-btn .mem-cnt{color:var(--fg4);margin-left:1px}
.members-panel{min-width:210px;max-height:340px;overflow:auto}
.mem-row{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:8px}
.mem-row:hover{background:var(--line-soft)}
.mem-av{width:24px;height:24px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;background:var(--ink);color:#fff;font-size:10.5px;font-weight:700}
.mem-nm{flex:1;font-size:12.5px;font-weight:600;color:var(--fg1)}
.mem-x{width:22px;height:22px;border-radius:6px;border:1px solid var(--line);background:#fff;color:var(--fg4);font-size:15px;line-height:1;cursor:pointer;flex:none}
.mem-x:hover:not(:disabled){border-color:var(--behind);color:var(--behind);background:#FCEBEC}
.mem-x:disabled{opacity:.4;cursor:default}
.mem-addrow{display:flex;gap:6px;margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.mem-in{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:6px 9px;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none}
.mem-in:focus{border-color:var(--primary-mid)}
.mem-add{flex:none;border:1px solid var(--primary);background:var(--primary);color:#fff;font-family:inherit;font-size:12.5px;font-weight:700;padding:6px 14px;border-radius:8px;cursor:pointer}
.mem-add:hover{background:var(--ink)}

/* 日分配 · 本周待排：结构化分组（型号 › 大类，可折叠）*/
.cal-pool .pf-bar{margin:0;padding:12px 18px 2px}
.cph-hint{font-size:11px;color:var(--fg4)}
.cph-toggle{border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:11.5px;font-weight:700;padding:5px 12px;border-radius:8px;cursor:pointer;margin-left:10px}
.cph-toggle:hover{border-color:var(--primary-mid,var(--ink));color:var(--ink)}
.cal-pool-body.grouped{display:block;padding:10px 14px 16px}
.cpg-model{display:flex;align-items:center;gap:8px;padding:9px 8px;margin-top:6px;border-bottom:1px solid var(--line);cursor:pointer;user-select:none;position:sticky}
.cpg-model:first-child{margin-top:0}
.cpg-model:hover{background:var(--line-soft)}
.cpg-caret{display:flex;color:var(--fg4);transition:transform .15s}
.cpg-model.col .cpg-caret,.cpg-cat.col .cpg-caret{transform:rotate(-90deg)}
.cpg-mic{display:flex;color:var(--ink)}
.cpg-mname{font-size:13px;font-weight:800;color:var(--fg1)}
.cpg-mpno{font-size:11px;font-weight:600;color:var(--fg4)}
.cpg-mn{font-size:11px;font-weight:700;color:var(--fg3);background:var(--bg);border:1px solid var(--line);border-radius:100px;padding:1px 9px}
.cpg-cat{display:flex;align-items:center;gap:7px;padding:6px 8px 6px 22px;cursor:pointer;user-select:none}
.cpg-cat:hover{background:var(--line-soft)}
.cpg-dot{width:7px;height:7px;border-radius:50%;flex:none}
.cpg-cname{font-size:11.5px;font-weight:700}
.cpg-cn{font-size:10.5px;font-weight:700;color:var(--fg4)}
.cpg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:9px;padding:2px 4px 8px 22px}

/* ══════════════════════════════════════════════════════════════
   工作空间：左侧栏 + 汇总（客户带）+ 研发面板
   ══════════════════════════════════════════════════════════════ */
.layout{display:flex;align-items:flex-start;min-height:calc(100vh - 60px)}
.wsside{position:sticky;top:60px;height:calc(100vh - 60px);width:256px;flex:none;overflow:auto;
  background:var(--panel);border-right:1px solid var(--line);padding:8px 10px 22px;z-index:30}
#view{flex:1;min-width:0}
.wsside .page,#view .page{max-width:none}
.ws-title{padding:13px 9px 8px;font-size:11.5px;letter-spacing:.1em;color:var(--fg4);font-weight:700}

.ws-row{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:10px;cursor:pointer;position:relative}
.ws-row:hover{background:#F4F7FC}
.ws-row.active{background:#E8F0FB}
.ws-row.active .ws-name{color:var(--primary);font-weight:700}
.ws-cb{width:15px;height:15px;flex:none;border:1.6px solid var(--fg5);border-radius:4px;background:#fff;display:flex;align-items:center;justify-content:center}
.ws-cb:hover{border-color:var(--primary)}
.ws-cb.on{background:var(--primary);border-color:var(--primary)}
.ws-cb.on::after{content:"";width:9px;height:9px;background:#fff;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23000' d='M6.4 11.2 3.2 8l1.1-1.1 2.1 2.1 5-5L12.5 5z'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23000' d='M6.4 11.2 3.2 8l1.1-1.1 2.1 2.1 5-5L12.5 5z'/%3E%3C/svg%3E") center/contain no-repeat}
.ws-ic{width:23px;height:23px;flex:none;display:flex;align-items:center;justify-content:center;color:var(--fg3)}
.ws-ic svg{width:18px;height:18px}
.ws-leaddot{width:8px;height:8px;border-radius:3px;flex:none;margin:0 4px}
.ws-main{flex:1;min-width:0}
.ws-name{font-size:13px;color:var(--fg1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-sub{font-size:11px;color:var(--fg4);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-mini{height:4px;border-radius:3px;background:#E9EDF4;overflow:hidden;margin-top:4px}
.ws-mini i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#2861AE,#6E5BD6)}
.ws-pn{font-size:11px;color:var(--fg4);flex:none;font-weight:700}
.ws-del{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:24px;height:24px;display:none;align-items:center;justify-content:center;border-radius:7px;color:var(--fg4);background:#fff;box-shadow:0 0 0 1px var(--line)}
.ws-row:hover .ws-del{display:flex}
.ws-del:hover{color:#C0392B;background:#FCEEEC;box-shadow:0 0 0 1px #F0C7C0}
.ws-row.aggregate .ws-name{font-weight:600}
.ws-row.allwork{margin:4px 0 8px;border:1px solid var(--line);background:#FAFBFE}
.ws-row.allwork.active{background:#E8F0FB;border-color:#BBD3F2}
.ws-star{color:var(--car);font-size:14px}
.ws-add{display:flex;align-items:center;gap:8px;padding:8px 9px;color:var(--primary);font-size:12.5px;font-weight:600;
  cursor:pointer;border-radius:10px;border:1px dashed #C6D6EE;margin:4px 2px 0}
.ws-add:hover{background:#F4F7FC}

.ws-sec-h{display:flex;align-items:center;gap:7px;padding:9px 9px 6px;color:var(--fg2);font-weight:700;font-size:12.5px;cursor:pointer;user-select:none;margin-top:6px}
.ws-sec-h .ws-caret{width:12px;height:12px;color:var(--fg4);transition:transform .15s}
.ws-sec-h.collapsed .ws-caret{transform:rotate(-90deg)}
.ws-secdot{width:8px;height:8px;border-radius:3px;flex:none}
.ws-sec-h .grow{flex:1}
.ws-tag{font-size:10px;font-weight:700;color:var(--car);background:#F7EFE0;border:1px solid #E7D3AE;border-radius:5px;padding:1px 6px}
.ws-sec-body{display:flex;flex-direction:column;gap:1px}
.ws-sec-body.hidden{display:none}

/* 汇总：作用域条 */
.scopebar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:15px}
.scopebar .lead{font-size:12.5px;color:var(--fg4)}
.scopebar .schip{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--line);border-radius:100px;padding:5px 13px;font-size:12.5px;color:var(--fg2);box-shadow:var(--shadow)}
.scopebar .schip .d{width:8px;height:8px;border-radius:50%}
.scopebar .schip.count{background:#E8F0FB;border-color:#BBD3F2;color:var(--primary);font-weight:700}

/* 客户带 */
.band{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:14px;overflow:hidden;box-shadow:var(--shadow)}
.band-head{display:flex;align-items:center;gap:12px;padding:13px 16px;cursor:pointer;border-left:4px solid var(--bandc,#2861AE)}
.band-head .bcaret{width:13px;height:13px;color:var(--fg4);transition:transform .15s;flex:none}
.band.collapsed .bcaret{transform:rotate(-90deg)}
.band.collapsed .band-body{display:none}
.band-ic{width:30px;height:30px;border-radius:8px;background:var(--bandcs,#E8F0FB);color:var(--bandc,#2861AE);display:flex;align-items:center;justify-content:center;flex:none}
.band-ic svg{width:17px;height:17px}
.band-tt{flex:1;min-width:0}
.band-tt .bn{font-weight:700;font-size:14.5px;color:var(--fg1)}
.band-tt .bs{font-size:11.5px;color:var(--fg4);margin-top:2px}
.band-stats{display:flex;align-items:center;gap:15px;flex:none}
.bstat{text-align:center}
.bstat b{font-family:var(--font-num);font-size:16px;font-weight:700;display:block;line-height:1.2}
.bstat span{font-size:10.5px;color:var(--fg4)}
.bprog{display:flex;align-items:center;gap:8px;min-width:120px;flex:none}
.bprog .pb{flex:1;height:7px;border-radius:5px;background:#EAEEF4;overflow:hidden}
.bprog .pb i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#2861AE,#6E5BD6)}
.bprog .pn{font-family:var(--font-num);font-weight:700;font-size:13px;color:var(--fg2)}
.band-body{padding:8px 14px 14px;border-top:1px solid var(--line-soft)}
.band-body .board-body,.band-body .tbl-wrap{margin-top:4px}
@media(max-width:880px){.band-stats{display:none}}

/* 研发面板 */
.rnd-hero{display:flex;align-items:flex-start;gap:13px;background:linear-gradient(120deg,#F3F0FB,#EAF1FB);border:1px solid #DAD2F3;border-radius:var(--radius);padding:16px 18px;margin-bottom:16px}
.rnd-hero .ic{width:38px;height:38px;border-radius:10px;background:var(--acc);color:#fff;display:flex;align-items:center;justify-content:center;flex:none}
.rnd-hero .ic svg{width:20px;height:20px}
.rnd-hero h3{margin:0 0 4px;font-size:15px;color:var(--ink)}
.rnd-hero p{margin:0;font-size:12.5px;color:var(--fg3);line-height:1.65}
.rnd-list{display:flex;flex-direction:column;gap:11px}
.rnd-grp{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:13px 15px;box-shadow:var(--shadow)}
.rnd-grp .gh{display:flex;align-items:center;gap:9px}
.rnd-grp .gh .gd{width:9px;height:9px;border-radius:3px;background:var(--acc);flex:none}
.rnd-grp .gh .gn{font-weight:700;font-size:13.5px;color:var(--fg1)}
.rnd-grp .gh .gc{font-size:11px;color:var(--fg4);margin-left:auto}
.rnd-grp .gadd{border:1px dashed #D3C9F2;background:#fff;color:var(--acc);font-family:inherit;font-size:11.5px;font-weight:600;border-radius:8px;padding:4px 10px;cursor:pointer}
.rnd-grp .gadd:hover{background:#F5F2FD}
.rnd-task{display:flex;align-items:center;gap:10px;padding:9px 0;border-top:1px solid var(--line-soft);font-size:12.5px;color:var(--fg2);margin-top:9px}
.rnd-task:first-of-type{margin-top:10px}
.rnd-task .rt-name{flex:1;min-width:0}
.rnd-empty{font-size:12px;color:var(--fg4);padding:11px 0 3px}
.rst{font-size:10.5px;font-weight:700;border-radius:5px;padding:2px 9px;border:0;font-family:inherit;cursor:pointer}
.rnd-task .who{font-size:11px;color:var(--fg4)}
.rnd-task .rt-x{border:0;background:none;color:var(--fg5);cursor:pointer;font-size:14px;padding:0 2px}
.rnd-task .rt-x:hover{color:var(--behind)}

.rnd-who{border:1px solid var(--line);background:#fff;border-radius:7px;font-family:inherit;font-size:11.5px;color:var(--fg2);padding:3px 6px;cursor:pointer}
.rnd-addin{flex:1;border:1px solid var(--acc);background:#fff;border-radius:8px;font-family:inherit;font-size:12.5px;padding:6px 10px;outline:none}

/* 聚合下：禁用新增提示 */
.agg-hint{font-size:11.5px;color:var(--fg4);display:flex;align-items:center;gap:6px}
