/* ══════════════════════════════════════════════════════════════
   口袋电梯 · 开发端 · 程序页 —— 样式（prog.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;
  --study:#2861AE; --feature:#15A05A; --bug:#E5484D;
  --avp:#6E5BD6; --mobile:#2861AE; --backend:#1F8A5B;
  --high:#E5484D; --mid:#E0892A; --low:#8A93A6; --amber:#E0892A; --ahead:#15A05A;
  --radius:14px;
  --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);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{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:14px;padding:0 20px;height:62px;
  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;flex:none}
.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 .sp{flex:1}
.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}
.ab-tools{display:flex;align-items:center;gap:7px;flex:none}
.ab-tool{display:inline-flex;align-items:center;gap:5px;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.1);color:#Eaf1fb;
  font-family:inherit;font-size:12.5px;font-weight:700;padding:7px 11px;border-radius:9px;cursor:pointer;transition:all .15s;white-space:nowrap}
.ab-tool:hover{background:#fff;border-color:#fff;color:var(--ink)}
.ab-tool svg{flex:none}
/* 登录胶囊占掉约 190px：有胶囊时提前进入紧凑模式，避免右侧导入/导出被盖住 */
@media(max-width:1560px){
  body:has(#pl-auth-chip) .pipe-tab .pt-en{display:none}
  body:has(#pl-auth-chip) .pipe-tab{padding:6px 10px}
  body:has(#pl-auth-chip) .appbar .brand .bt small{display:none}
}
/* 窄屏（笔记本 ≤1100px）：收起非必要文字，保证「开发端」返回链接不被挤出 */
@media(max-width:1100px){
  .appbar{gap:10px;padding:0 14px}
  .appbar .brand .bt small{display:none}
  .appbar .ab-back{padding:7px 10px}
  .pipe-tab .pt-en{display:none}
  .pipe-tab{padding:6px 10px}
  .ab-tool{padding:6px 10px}
}
@media(max-width:940px){
  .appbar .ab-back{font-size:0;gap:0;padding:8px}
  .appbar .ab-back svg{width:15px;height:15px}
  .pipe-tab .pt-no{display:none}
  .ab-tool span.lbl{display:none}
}

.pipe{display:flex;align-items:center;gap:4px}
.pipe-arrow{color:#5E84BE;display:flex}
.pipe-tab{display:flex;align-items:center;gap:8px;border:1px solid transparent;background:rgba(255,255,255,.08);border-radius:11px;
  padding:7px 11px;cursor:pointer;font-family:inherit;transition:all .15s;position:relative}
.pipe-tab:hover{background:rgba(255,255,255,.16)}
.pipe-tab .pt-no{font-size:11px;font-weight:700;color:#7FA4D8}
.pipe-tab .pt-tt{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15}
.pipe-tab .pt-name{font-size:13px;font-weight:700;color:#D7E4F6;white-space:nowrap}
.pipe-tab .pt-en{font-family:var(--font-num);font-size:8.5px;font-weight:600;letter-spacing:.16em;color:#6E92C8}
.pipe-tab .pt-badge{font-family:var(--font-num);font-size:11px;font-weight:700;color:#fff;background:rgba(255,255,255,.18);border-radius:100px;min-width:20px;text-align:center;padding:1px 6px}
.pipe-tab.on{background:#fff}
.pipe-tab.on .pt-no{color:var(--primary-mid)}
.pipe-tab.on .pt-name{color:var(--ink)}
.pipe-tab.on .pt-en{color:var(--fg4)}
.pipe-tab.on .pt-badge{background:var(--primary);color:#fff}

/* 总表：横向「全程记录」入口，独立于编号流水线（无序号 / 无流程箭头）*/
.pipe-aux{display:inline-flex;align-items:center;gap:7px;flex:none;margin-left:14px;padding:7px 13px;cursor:pointer;font-family:inherit;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.22);border-radius:11px;color:#D7E4F6;transition:all .15s;position:relative}
.pipe-aux::before{content:"";position:absolute;left:-14px;top:50%;transform:translateY(-50%);width:1px;height:26px;background:rgba(255,255,255,.2)}
.pipe-aux:hover{background:rgba(255,255,255,.16)}
.pipe-aux svg{flex:none;color:#9DC0F0}
.pipe-aux .pt-name{font-size:13px;font-weight:700;white-space:nowrap}
.pipe-aux .pt-badge{font-family:var(--font-num);font-size:11px;font-weight:700;color:#fff;background:rgba(255,255,255,.18);border-radius:100px;min-width:20px;text-align:center;padding:1px 6px}
.pipe-aux.on{background:#fff;color:var(--ink)}
.pipe-aux.on svg{color:var(--primary-mid)}
.pipe-aux.on .pt-badge{background:var(--primary);color:#fff}
@media(max-width:940px){ .pipe-aux .pt-name{display:none} }

/* ───────── 页容器 ───────── */
.pg-page{max-width:1080px;margin:0 auto;padding:24px 24px 70px}
.pg-page.wide{max-width:1360px}
.pg-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:18px}
.pg-head .pg-h1{font-size:22px;font-weight:800;color:var(--fg1);display:flex;align-items:center;gap:12px}
.pg-head .cur-sprint{font-size:13px;font-weight:700;color:var(--primary);background:#EAF1FB;border-radius:100px;padding:3px 12px}
.pg-head .pg-sub{font-size:13px;color:var(--fg3);margin-top:6px;max-width:680px;line-height:1.6}
.pg-head-r{margin-left:auto;display:flex;align-items:center;gap:9px;flex:none}
.pill-count{font-size:13px;color:var(--fg3);background:var(--panel);border:1px solid var(--line);border-radius:100px;padding:6px 14px}
.pill-count b{color:var(--primary);font-size:15px;margin:0 2px}
.pill-soft{font-size:12px;font-weight:700;color:var(--primary);background:#EAF1FB;border-radius:100px;padding:6px 12px}
.pg-empty{background:var(--panel);border:1px dashed var(--line);border-radius:var(--radius);padding:44px;text-align:center;color:var(--fg4);font-size:13px}

/* ───────── ① 需求池 ───────── */
.add-row{display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:8px 10px 8px 14px;box-shadow:var(--shadow);margin-bottom:16px}
.add-row .add-ic{color:var(--primary);display:flex;flex:none}
.add-input{flex:1;border:none;background:none;font-family:inherit;font-size:14px;color:var(--fg1);outline:none}
.add-btn{display:flex;align-items:center;gap:6px;border:none;background:var(--primary);color:#fff;font-family:inherit;font-size:13px;font-weight:700;padding:9px 16px;border-radius:9px;cursor:pointer;white-space:nowrap}
.add-btn:hover{background:var(--ink)}
/* ── 需求池 · 便利贴网格 ──
   真便利贴质感：按提交人固定配色（note-c0~c4）、右下折角、无硬边框、柔和投影；
   align-self:start 防止同行卡片被拉伸出大片空白。 */
.inbox-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;align-items:start}
.inbox-note{--nc-bg:#FFF8DC;--nc-deep:#F3E5AC;--nc-ink:#6B5B1E;
  align-self:start;background:var(--nc-bg);border:none;border-radius:4px 4px 4px 14px;
  box-shadow:0 1px 2px rgba(80,70,20,.10),0 4px 10px rgba(80,70,20,.10);
  padding:12px 13px 9px;transition:box-shadow .15s,transform .15s;display:flex;flex-direction:column;gap:6px;cursor:grab;position:relative}
.inbox-note::after{content:"";position:absolute;right:0;bottom:0;width:0;height:0;
  border-style:solid;border-width:0 16px 16px 0;border-color:transparent var(--nc-deep) rgba(0,0,0,.06) transparent;
  border-radius:0 0 0 4px;filter:brightness(1.02)}
.inbox-note:hover{box-shadow:0 2px 4px rgba(80,70,20,.12),0 10px 22px rgba(80,70,20,.16);transform:translateY(-2px)}
.inbox-note:active{cursor:grabbing}
/* 五色便利贴（按提交人哈希分配，同一人恒同色） */
.inbox-note.note-c0{--nc-bg:#FFF8DC;--nc-deep:#EFDF9E;--nc-ink:#6B5B1E}
.inbox-note.note-c1{--nc-bg:#E8F2FF;--nc-deep:#C9DFF7;--nc-ink:#2A517E}
.inbox-note.note-c2{--nc-bg:#E9F7EC;--nc-deep:#C8E8CF;--nc-ink:#2E6B3F}
.inbox-note.note-c3{--nc-bg:#FDEEF0;--nc-deep:#F4CFD6;--nc-ink:#8A3A4C}
.inbox-note.note-c4{--nc-bg:#F2EFFB;--nc-deep:#D9D0F0;--nc-ink:#54418C}
.inbox-item{position:relative}
.inbox-item.dragging{opacity:.45}
.inbox-item.drop-before::before{content:"";position:absolute;top:8px;bottom:8px;left:-7px;width:3px;border-radius:3px;background:var(--primary);box-shadow:0 0 0 3px #EAF1FB;z-index:3}
.inbox-item.drop-after::after{content:"";position:absolute;top:8px;bottom:8px;right:-7px;width:3px;border-radius:3px;background:var(--primary);box-shadow:0 0 0 3px #EAF1FB;z-index:3;border-style:none;border-width:0}
.inbox-note .ic-main{flex:1;min-width:0}
.inbox-note .ic-text{font-size:13.5px;font-weight:600;color:var(--fg1);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.inbox-note .ic-meta{display:flex;align-items:center;gap:6px;margin-top:7px;flex-wrap:wrap}
.inbox-note .ic-meta .sp{flex:1}
/* 彩底上的标签统一改半透明白底 */
.inbox-note .src{padding:2px 7px;font-size:10px;background:rgba(255,255,255,.65);border:none;color:var(--nc-ink)}
.inbox-note .src svg{color:var(--nc-ink)}
.inbox-note .ic-by{font-size:11px;color:var(--nc-ink)}
.inbox-note .ic-time{font-size:10.5px;color:var(--nc-ink);opacity:.55}
/* 元行小徽标（备注 / 子需求展开） */
.ic-mini{position:relative;display:inline-flex;align-items:center;gap:3px;border:none;background:rgba(255,255,255,.65);color:var(--nc-ink);font-family:var(--font-num);font-size:10.5px;font-weight:700;border-radius:7px;padding:3px 7px;cursor:pointer;transition:all .14s}
.ic-mini:hover{background:#fff}
.ic-mini.on{background:#fff;box-shadow:inset 0 0 0 1.5px var(--nc-ink)}
.ic-mini.has .dot{position:absolute;top:-3px;right:-3px;width:7px;height:7px;border-radius:50%;background:var(--amber);border:1.5px solid var(--nc-bg)}
/* 图标操作行：常显低调、悬停清晰（不跳动、不留白） */
.inbox-note .ic-actions{display:flex;align-items:center;gap:4px;opacity:.4;transition:opacity .14s;margin-top:1px;padding-right:14px}
.inbox-note:hover .ic-actions,.inbox-note .ic-actions:focus-within{opacity:1}
.ic-act{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:rgba(255,255,255,.6);color:var(--nc-ink);border-radius:7px;cursor:pointer;padding:0;transition:all .14s}
.ic-act:hover{background:#fff;color:var(--primary)}
.ic-act.on{background:#fff;color:var(--primary);box-shadow:inset 0 0 0 1.5px var(--primary-mid)}
.ic-act.danger:hover{color:var(--bug);background:#fff}
.enter-btn.sm{font-size:11px;padding:4px 10px;gap:3px;border:none;background:rgba(255,255,255,.75);color:var(--nc-ink);font-weight:700}
.enter-btn.sm:hover{background:var(--primary);color:#fff}
.inbox-note .ic-actions .sp{flex:1}
/* 便利贴上的备注/编辑输入沿用白底 */
.inbox-note .ic-note{background:rgba(255,255,255,.75);border:none}
.inbox-note .ic-note:focus{background:#fff;box-shadow:inset 0 0 0 1.5px var(--primary-mid)}
.inbox-note .ic-note[readonly]{background:rgba(255,255,255,.45);color:var(--fg3)}
.inbox-note .ic-edit{color:var(--nc-ink);opacity:0}
.inbox-note:hover .ic-edit{opacity:.7}
.inbox-note .ic-edit:hover{opacity:1;background:rgba(255,255,255,.8)}
/* 多选勾选 / 移出组合 */
.ic-check{position:absolute;top:9px;right:9px;width:16px;height:16px;accent-color:var(--primary);cursor:pointer;z-index:2}
.inbox-note.selected{box-shadow:0 0 0 2.5px var(--primary),0 6px 16px rgba(40,97,174,.2);transform:translateY(-2px)}
.ic-ungroup{position:absolute;top:4px;right:4px;width:18px;height:18px;border:none;border-radius:50%;background:transparent;color:var(--nc-ink);font-size:13px;line-height:1;cursor:pointer;padding:0;opacity:0;transition:all .14s;z-index:2}
.inbox-note:hover .ic-ungroup{opacity:.7}
.ic-ungroup:hover{opacity:1 !important;background:rgba(255,255,255,.8);color:var(--bug)}
/* 组合块（箩筐）：软木板质感的浅色底 */
.inbox-group{grid-column:1/-1;border:1px solid #E3DED2;border-radius:14px;background:linear-gradient(180deg,#FBF9F4,#F6F2E9);padding:11px 13px 13px;position:relative;box-shadow:inset 0 1px 0 #fff,0 2px 8px rgba(120,105,70,.08)}
.inbox-group.dragging{opacity:.45}
.inbox-group.drop-into{border-color:#9BC6F6;background:linear-gradient(180deg,#F5FAFF,#EEF6FF);box-shadow:inset 0 0 0 2px #C5DDFA,0 8px 22px rgba(40,97,174,.14)}
.inbox-group.drop-before::before{content:"";position:absolute;top:8px;bottom:8px;left:-7px;width:3px;border-radius:3px;background:var(--primary);z-index:3}
.inbox-group.drop-after::after{content:"";position:absolute;top:8px;bottom:8px;right:-7px;width:3px;border-radius:3px;background:var(--primary);z-index:3}
.ig-head{display:flex;align-items:center;gap:9px;margin-bottom:10px;cursor:grab}
.ig-head:active{cursor:grabbing}
.ig-drag{color:#B7AD97;display:inline-flex}
.ig-name{font-size:13.5px;font-weight:700;color:#5C5240;cursor:text;border-bottom:1.5px dashed transparent}
.ig-name:hover{border-bottom-color:#B7AD97}
.ig-name-input{border:none;background:#fff;border-radius:8px;padding:4px 9px;font-family:inherit;font-size:13px;font-weight:700;color:var(--fg1);outline:none;min-width:240px;box-shadow:inset 0 0 0 1.5px var(--primary-mid)}
.ig-n{font-size:11px;color:#8A7F68;background:rgba(255,255,255,.7);border-radius:100px;padding:1px 9px}
.ig-head .sp{flex:1}
.ig-dissolve{border:none;background:rgba(255,255,255,.7);color:#8A7F68;font-family:inherit;font-size:11px;font-weight:700;padding:4px 12px;border-radius:100px;cursor:pointer;transition:all .14s}
.ig-dissolve:hover{color:var(--bug);background:#fff}
.ig-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:11px;align-items:start}
/* 多选浮条 */
.multi-btn{border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:12.5px;font-weight:700;padding:7px 14px;border-radius:100px;cursor:pointer;transition:all .15s}
.multi-btn:hover{color:var(--primary);border-color:#C5DDFA}
.multi-btn.on{color:#fff;background:var(--primary);border-color:var(--primary)}
.multi-bar{position:sticky;bottom:14px;display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:100px;box-shadow:0 8px 30px rgba(13,55,121,.18);padding:9px 10px 9px 20px;margin-top:14px;z-index:20}
.multi-bar .mb-t{font-size:13px;color:var(--fg2)}
.multi-bar .mb-t b{color:var(--primary);margin:0 2px}
.multi-bar .sp{flex:1}
.src{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;border-radius:7px;padding:3px 9px}
.src-feishu{color:#1A6FD4;background:#E8F1FE;border:1px solid #C5DDFA}
.src-feishu svg{color:#1A6FD4}
.src-manual{color:var(--fg3);background:var(--line-soft)}
.ic-by{font-size:12px;color:var(--fg3);font-weight:600}
.ic-role{font-size:11px;color:var(--primary);background:#EAF1FB;border:1px solid #C5DDFA;border-radius:7px;padding:2px 8px;font-weight:700}
.ic-time{font-size:11.5px;color:var(--fg4)}
.ic-note-wrap{margin-top:9px}
.ic-note{width:100%;min-height:40px;border:1px solid var(--line);background:#FAFBFD;border-radius:9px;padding:8px 10px;font-family:inherit;font-size:12.5px;color:var(--fg2);line-height:1.5;outline:none;resize:vertical}
.ic-note:focus{border-color:var(--primary-mid);background:#fff}
.enter-btn{display:flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;color:var(--primary);font-family:inherit;font-size:13px;font-weight:700;padding:8px 14px;border-radius:9px;cursor:pointer;white-space:nowrap;flex:none;transition:all .15s}
.enter-btn:hover{background:var(--primary);border-color:var(--primary);color:#fff}
.ic-actions{display:flex;align-items:center;gap:8px;flex:none}
.reject-btn{display:flex;align-items:center;gap:5px;border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:13px;font-weight:600;padding:8px 13px;border-radius:9px;cursor:pointer;white-space:nowrap;transition:all .15s}
.reject-btn:hover{border-color:var(--bug);color:var(--bug);background:#FCEDEA}
.delete-req-btn{display:flex;align-items:center;gap:5px;border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:13px;font-weight:600;padding:8px 13px;border-radius:9px;cursor:pointer;white-space:nowrap;transition:all .15s}
.delete-req-btn:hover{border-color:var(--bug);color:var(--bug);background:#FCEDEA}
/* 驳回填原因 */
.inbox-card.rejecting{flex-direction:column;align-items:stretch;gap:12px;border-color:#F3C0C2;background:#FFFBFB}
.rej-form{display:flex;align-items:center;gap:8px}
.rej-input{flex:1;border:1px solid #F0C5C7;background:#fff;border-radius:9px;padding:8px 11px;font-family:inherit;font-size:13px;color:var(--fg1);outline:none}
.rej-input:focus{border-color:var(--bug)}
.rej-cancel{border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:12.5px;font-weight:600;padding:8px 14px;border-radius:9px;cursor:pointer;flex:none}
.rej-ok{border:none;background:var(--bug);color:#fff;font-family:inherit;font-size:12.5px;font-weight:700;padding:8px 16px;border-radius:9px;cursor:pointer;flex:none}
.rej-ok:hover{filter:brightness(.94)}
.pill-muted{font-size:13px;color:var(--fg4);background:var(--panel);border:1px solid var(--line);border-radius:100px;padding:6px 13px}
.pill-muted b{color:var(--fg3);margin:0 2px}
/* 已驳回 section */
.rej-section{margin-top:22px;border-top:1px dashed var(--line);padding-top:16px}
.rej-head{display:inline-flex;align-items:center;gap:7px;cursor:pointer;user-select:none;color:var(--fg3)}
.rej-head .rh-caret{display:flex;transition:transform .2s;transform:rotate(-90deg)}
.rej-head .rh-caret.open{transform:none}
.rej-head .rh-t{font-size:13px;font-weight:700}
.rej-head .rh-n{font-size:11.5px;font-weight:700;color:var(--fg4);background:var(--line-soft);border-radius:100px;padding:1px 9px}
.rej-list{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.rej-item{display:flex;align-items:center;gap:12px;background:#FAFBFD;border:1px solid var(--line);border-radius:11px;padding:11px 14px;opacity:.92}
.rej-item .rj-main{flex:1;min-width:0}
.rej-item .rj-text{font-size:13.5px;color:var(--fg2);text-decoration:line-through;text-decoration-color:var(--fg5)}
.rej-item .rj-meta{display:flex;align-items:center;gap:10px;margin-top:5px}
.rej-item .rj-by{font-size:11.5px;color:var(--fg4);font-weight:600}
.rej-item .rj-reason{font-size:11.5px;color:var(--bug);background:#FCEDEA;border-radius:6px;padding:2px 8px;font-weight:600}
.rej-item .rj-reason.none{color:var(--fg4);background:var(--line-soft);font-weight:500}
.rej-restore{border:1px solid var(--line);background:#fff;color:var(--primary);font-family:inherit;font-size:12.5px;font-weight:700;padding:7px 14px;border-radius:9px;cursor:pointer;flex:none}
.rej-restore:hover{background:var(--primary);border-color:var(--primary);color:#fff}

/* ───────── ② 评审排期 ───────── */
.tri-filter{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.tri-filter .seg{background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:4px 8px}
.tri-filter select{border:none;background:none;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;cursor:pointer}
.tri-filter .sp{flex:1}
.tri-legend{display:flex;gap:12px}
.tri-legend .lg{display:flex;align-items:center;gap:5px;font-size:11.5px;color:var(--fg3)}
.tri-legend .lg i{width:9px;height:9px;border-radius:3px;display:inline-block}
.tri-list{display:flex;flex-direction:column;gap:11px}
.tri-row{background:var(--panel);border:1px solid var(--line);border-radius:13px;box-shadow:var(--shadow);padding:14px 16px;border-left:4px solid var(--fg5);transition:box-shadow .15s}
.tri-row.is-study{border-left-color:var(--study)}
.tri-row:not(.is-study).placed{opacity:.7}
.tri-row.dragging{opacity:.4}
.tri-row.drop-hint{box-shadow:0 0 0 2px var(--primary-mid)}
.tr-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.tr-head .drag-h{color:var(--fg5);cursor:grab;display:flex;flex:none}
.tr-head .tr-text{flex:1;font-size:14.5px;font-weight:700;color:var(--fg1);display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.study-badge{font-size:10.5px;font-weight:700;color:var(--study);background:#EAF1FB;border:1px solid #C5DDFA;border-radius:6px;padding:2px 8px}
.placed-tag{font-size:11.5px;font-weight:700;color:var(--ahead);background:#E7F6EE;border:1px solid #B6E3C8;border-radius:8px;padding:6px 12px;flex:none}
.place-btn{display:flex;align-items:center;gap:6px;border:1px solid var(--primary);background:var(--primary);color:#fff;font-family:inherit;font-size:12.5px;font-weight:700;padding:8px 13px;border-radius:9px;cursor:pointer;white-space:nowrap;flex:none}
.place-btn:hover{background:var(--ink)}
.place-btn:disabled{background:#fff;color:var(--fg5);border-color:var(--line);cursor:not-allowed}
.tr-ctrls{display:flex;align-items:flex-start;gap:18px;flex-wrap:wrap;padding-left:24px}
.tr-ctrls .tc{display:flex;flex-direction:column;gap:6px}
.tr-ctrls .tc.grow{flex:1;min-width:220px}
.tr-ctrls .tc > label{font-size:11px;font-weight:700;color:var(--fg4)}
.type-seg{display:flex;gap:5px}
.ts-btn{border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:12px;font-weight:600;padding:5px 11px;border-radius:8px;cursor:pointer;transition:all .12s}
.ts-btn:hover{border-color:var(--fg4)}
.ts-btn.on{color:#fff;border-color:transparent;background:var(--tc);box-shadow:0 2px 8px color-mix(in srgb,var(--tc) 35%,transparent)}
.end-chips{display:flex;gap:5px}
.end-chip{border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:12px;font-weight:600;padding:5px 11px;border-radius:8px;cursor:pointer;transition:all .12s}
.end-chip:hover{border-color:var(--fg4)}
.end-chip.on{color:var(--ec);border-color:var(--ec);background:var(--es)}
.mini-sel{border:1px solid var(--line);background:#fff;font-family:inherit;font-size:12.5px;color:var(--fg1);border-radius:8px;padding:6px 9px;outline:none;cursor:pointer}
.mini-sel.prio-high{color:var(--high);font-weight:700;border-color:#F3C0C2}
.mini-sel.prio-mid{color:var(--mid);font-weight:700;border-color:#F0D7AE}
.mini-sel.prio-low{color:var(--fg3)}
.eff{min-width:200px}
.eff-row{display:flex;align-items:flex-start;gap:8px;margin-bottom:6px}
.eff-row label{font-size:11.5px;color:var(--fg3);font-weight:600;width:56px;flex:none;padding-top:7px}
.eff-inp{flex:1;border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none}
.eff-inp:focus{border-color:var(--primary)}
.concl{flex:1;border:1px solid #C5DDFA;background:#F6FAFF;border-radius:8px;padding:7px 10px;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none;resize:vertical}
.eff.none{font-size:12px;color:var(--fg4);padding-top:8px}

/* ───────── ③ Sprint 看板 ───────── */
.sprint-bar{display:flex;align-items:center;gap:14px;margin-bottom:16px;flex-wrap:wrap}
.sprint-switch{display:flex;gap:8px}
.sps{display:flex;flex-direction:column;align-items:flex-start;gap:1px;border:1px solid var(--line);background:#fff;border-radius:11px;padding:8px 15px;cursor:pointer;font-family:inherit;transition:all .14s;position:relative}
.sps:hover{border-color:var(--primary-mid)}
.sps .sps-n{font-size:14px;font-weight:800;color:var(--fg2)}
.sps .sps-r{font-family:var(--font-num);font-size:10.5px;color:var(--fg4)}
.sps .sps-tag{position:absolute;top:-8px;right:-6px;font-size:9px;font-weight:700;color:#fff;background:var(--ahead);border-radius:100px;padding:1px 7px}
.sps.on{background:var(--ink);border-color:var(--ink)}
.sps.on .sps-n{color:#fff}
.sps.on .sps-r{color:#A9C6EE}
.sprint-bar .sp{flex:1}
.view-toggle{display:flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:4px}
.view-toggle .vt-label{font-size:11.5px;color:var(--fg4);font-weight:600;padding:0 6px}
.vt{border:none;background:none;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--fg3);padding:6px 13px;border-radius:8px;cursor:pointer}
.vt:hover{color:var(--fg1)}
.vt.on{background:var(--primary);color:#fff}

.sprint-ov{display:flex;gap:16px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;margin-bottom:16px;flex-wrap:wrap}
.ov-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;flex:1;min-width:380px}
.ov-stat{border-right:1px solid var(--line-soft);padding-right:12px}
.ov-stat:last-child{border-right:none}
.ov-stat .ov-v{font-size:26px;font-weight:800;color:var(--fg1);line-height:1}
.ov-stat .ov-v small{font-size:13px;font-weight:600;color:var(--fg4);margin-left:1px}
.ov-stat.ok .ov-v{color:var(--ahead)}
.ov-stat.warn .ov-v{color:var(--amber)}
.ov-stat .ov-k{font-size:12px;color:var(--fg3);margin-top:5px;font-weight:600}
.ov-stat .ov-s{font-size:11px;color:var(--fg4);margin-top:2px}
.burn{width:260px;flex:none;border-left:1px solid var(--line-soft);padding-left:16px}
.burn-t{font-size:12px;font-weight:700;color:var(--fg3);margin-bottom:4px}
.burn-svg{width:100%}
.burn-lg{display:flex;gap:14px;margin-top:2px}
.burn-lg span{display:flex;align-items:center;gap:5px;font-size:10.5px;color:var(--fg4)}
.burn-lg i{width:14px;height:0;display:inline-block}
.burn-lg i.dash{border-top:1.6px dashed #9BA3B4}
.burn-lg i.solid{border-top:2px solid var(--primary)}
@media(max-width:780px){.burn{border-left:none;padding-left:0;width:100%}.ov-stats{min-width:0}}

.board-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:start}
@media(max-width:900px){.board-cols{grid-template-columns:1fr}}
.bcol{background:#EEF1F7;border:1px solid var(--line);border-radius:var(--radius);padding:10px;min-height:120px}
.bcol-head{display:flex;align-items:center;gap:8px;padding:4px 6px 10px}
.bch-dot{width:9px;height:9px;border-radius:50%}
.bch-dot.s-todo{background:var(--fg4)}
.bch-dot.s-doing{background:var(--primary)}
.bch-dot.s-qa{background:var(--amber)}
.bch-n{font-size:13.5px;font-weight:800;color:var(--fg1)}
.bch-c{font-size:11.5px;font-weight:700;color:var(--fg4);background:#fff;border:1px solid var(--line);border-radius:100px;padding:1px 8px;margin-left:auto}
.bcol-body{display:flex;flex-direction:column;gap:10px}
.bcol-empty{text-align:center;color:var(--fg5);font-size:12px;padding:18px}

.sp-card{background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:13px;border-top:3px solid var(--feature)}
.sp-card.type-bug{border-top-color:var(--bug);background:linear-gradient(180deg,#FEF6F5,#fff 36px)}
.sp-card.type-study{border-top-color:var(--study)}
.sp-card.outsourced{border:1px dashed var(--mid);border-top:3px solid var(--feature)}
.sp-card.type-bug.outsourced{border-top-color:var(--bug)}
.spc-top{display:flex;align-items:center;gap:7px;margin-bottom:9px;flex-wrap:wrap}
.type-badge{font-size:10.5px;font-weight:700;border-radius:6px;padding:2px 8px}
.ends{display:flex;gap:4px}
.end-tag{font-size:10px;font-weight:700;border-radius:5px;padding:2px 7px}
.spc-h{margin-left:auto;font-size:12px;font-weight:700;color:var(--fg3)}
.spc-title{font-size:14px;font-weight:700;color:var(--fg1);line-height:1.4;margin-bottom:10px}
.spc-prog{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.spc-prog .pg-frac{font-size:11.5px;font-weight:700;color:var(--fg3);flex:none;min-width:42px}
.spc-prog .pg-bar{flex:1;height:6px;border-radius:4px;background:var(--line);overflow:hidden}
.spc-prog .pg-bar i{display:block;height:100%;border-radius:4px}
.spc-prog .pg-pct{font-size:11.5px;font-weight:800;color:var(--fg2);flex:none}
.subs{display:flex;flex-direction:column;gap:5px;margin-bottom:10px;padding:9px;background:var(--bg);border-radius:9px}
.sub{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--fg2)}
.sub-ck{width:16px;height:16px;border-radius:5px;border:1.5px solid var(--fg5);flex:none;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#fff;transition:all .12s}
.sub-ck.on{background:var(--ahead);border-color:var(--ahead)}
.sub-ck svg{opacity:0}
.sub-ck.on svg{opacity:1}
.sub-t{flex:1;cursor:pointer}
.sub.done .sub-t{color:var(--fg4);text-decoration:line-through}
.sub-o{font-size:10.5px;color:var(--fg4);font-weight:600;flex:none}
.sub-add{border:1px dashed var(--line);background:none;border-radius:7px;padding:6px 9px;font-family:inherit;font-size:12px;color:var(--fg2);outline:none;margin-top:2px}
.sub-add:focus{border-color:var(--primary);border-style:solid}
.proxy-note{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--mid);background:#FCF1E1;border-radius:8px;padding:6px 10px;margin-bottom:10px}
.proxy-note svg{flex:none}
.spc-foot{display:flex;align-items:center;gap:8px}
.owner-chip{display:flex;align-items:center;gap:7px;min-width:0}
.oc-av{width:24px;height:24px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;font-size:9.5px;font-weight:700;color:#fff}
.oc-av.oi-int{background:var(--primary)}
.oc-av.oi-ext{background:var(--avp)}
.oc-av.oi-out{background:#fff;color:var(--mid);border:2px dashed var(--mid)}
.oc-name{font-size:12px;font-weight:600;color:var(--fg2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.out-tag{font-size:9.5px;font-weight:800;color:#fff;background:var(--mid);border-radius:5px;padding:2px 7px;flex:none}
.spc-foot .sp{flex:1}
.mv-grp{display:flex;gap:4px;flex:none}
.mv{width:28px;height:28px;border:1px solid var(--line);background:#fff;border-radius:8px;color:var(--fg3);cursor:pointer;display:flex;align-items:center;justify-content:center}
.mv:hover{border-color:var(--primary);color:var(--primary)}
.mv:disabled{opacity:.35;cursor:not-allowed}

/* toast */
#pgToast{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}
#pgToast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ───────── ① 需求池 · 层级 + 工具 + 导入导出（新增） ───────── */
.tool-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--panel);color:var(--primary);
  font-family:inherit;font-size:12.5px;font-weight:700;padding:7px 13px;border-radius:9px;cursor:pointer;transition:all .15s}
.tool-btn:hover{border-color:var(--primary);background:var(--primary);color:#fff}
.tool-btn svg{flex:none}
.tool-btn.primary{border-color:var(--primary);background:var(--primary);color:#fff;box-shadow:0 3px 10px rgba(40,97,174,.28)}
.tool-btn.primary:hover{background:var(--ink);border-color:var(--ink)}
.th-divider{width:1px;align-self:stretch;background:var(--line);margin:2px 2px}

.inbox-item{display:flex;flex-direction:column}
.ic-title{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
/* 标题行内编辑（仅创建者/超管可见铅笔） */
.ic-edit{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;border-radius:6px;background:transparent;color:var(--fg4);cursor:pointer;padding:0;opacity:0;transition:all .14s}
.inbox-card:hover .ic-edit{opacity:1}
.ic-edit:hover{background:#EAF1FB;color:var(--primary)}
.ic-edit-input{flex:1;min-width:220px;border:1px solid var(--primary-mid,#457DC9);background:#fff;border-radius:9px;padding:6px 10px;font-family:inherit;font-size:14px;font-weight:600;color:var(--fg1);outline:none}
.ic-note[readonly]{background:#F7F9FC;color:var(--fg3);cursor:default}
.kid-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;color:var(--primary);background:#EAF1FB;border:1px solid #C5DDFA;border-radius:7px;padding:2px 8px}
.src-import{color:#8453C9;background:#F1EAFB;border:1px solid #DECBF5}

.split-btn{display:flex;align-items:center;gap:5px;border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:13px;font-weight:600;padding:8px 13px;border-radius:9px;cursor:pointer}
.split-btn:hover{border-color:var(--primary-mid);color:var(--primary)}
.split-btn.on{border-color:var(--primary);color:var(--primary);background:#EAF1FB}

/* 子需求区 */
/* 子需求区（便利贴内紧凑版：无深缩进，白底行） */
.ic-children{margin-top:4px;padding-top:7px;border-top:1px dashed rgba(0,0,0,.10);display:flex;flex-direction:column;gap:5px}
.ic-child{display:flex;align-items:center;gap:7px;background:rgba(255,255,255,.72);border:none;border-radius:8px;padding:6px 9px;position:relative}
.ic-child .cc-tick{display:none}
.ic-child .cc-text{flex:1;min-width:0;font-size:12px;font-weight:600;color:var(--fg2);line-height:1.4}
.cc-acts{display:flex;align-items:center;gap:3px;flex:none}
.cr-act{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:var(--fg4);border-radius:6px;cursor:pointer;transition:all .15s;padding:0}
.cr-act:hover{color:var(--primary);background:#fff}
.cr-act.enter:hover{background:var(--primary);color:#fff}
.cr-act.del:hover{color:var(--bug);background:#fff}
.ic-addchild{display:flex;align-items:center;gap:6px;position:relative;padding:1px 0}
.ic-addchild .cc-tick.add{display:none}
.addchild-input{flex:1;min-width:0;border:none;background:rgba(255,255,255,.85);border-radius:8px;padding:7px 9px;font-family:inherit;font-size:12px;color:var(--fg1);outline:none}
.addchild-input:focus{background:#fff;box-shadow:inset 0 0 0 1.5px var(--primary-mid)}
.addchild-input::placeholder{color:var(--fg4)}
.addchild-btn{border:none;background:var(--primary);color:#fff;font-family:inherit;font-size:11.5px;font-weight:700;padding:7px 11px;border-radius:8px;cursor:pointer;flex:none}
.addchild-btn:hover{background:var(--ink)}
.addchild-done{border:none;background:rgba(255,255,255,.75);color:var(--fg3);font-family:inherit;font-size:11.5px;font-weight:600;padding:7px 10px;border-radius:8px;cursor:pointer;flex:none}
.addchild-done:hover{color:var(--primary);background:#fff}

/* 评审：子需求计数 */
.tr-kids{font-size:10.5px;font-weight:700;color:#8453C9;background:#F1EAFB;border:1px solid #DECBF5;border-radius:6px;padding:2px 8px}

/* ───────── 导入 / 导出 弹层 ───────── */
.pm-mask{position:fixed;inset:0;z-index:200;background:rgba(10,28,58,.5);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:24px}
.pm-box{width:100%;max-width:580px;max-height:88vh;display:flex;flex-direction:column;background:var(--panel);border-radius:16px;box-shadow:var(--shadow-pop);overflow:hidden}
.pm-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--line)}
.pm-title{font-size:16px;font-weight:800;color:var(--fg1)}
.pm-x{border:none;background:none;color:var(--fg4);font-size:24px;line-height:1;cursor:pointer;padding:0 4px}
.pm-x:hover{color:var(--fg1)}
.pm-body{padding:18px 22px;overflow:auto}
.pm-foot{display:flex;align-items:center;justify-content:flex-end;gap:9px;padding:14px 22px;border-top:1px solid var(--line);background:#FAFBFD}
.pm-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.pm-row .sp{flex:1}
.pm-label{font-size:12.5px;font-weight:700;color:var(--fg3)}
.pm-hint{font-size:12px;color:var(--fg4)}
.pm-modes{display:inline-flex;background:var(--line-soft);border-radius:9px;padding:3px}
.pm-mode{border:none;background:none;font-family:inherit;font-size:12.5px;font-weight:700;color:var(--fg3);padding:6px 13px;border-radius:7px;cursor:pointer}
.pm-mode.on{background:#fff;color:var(--primary);box-shadow:0 1px 4px rgba(28,52,92,.12)}
.pm-link{border:none;background:none;color:var(--primary);font-family:inherit;font-size:12.5px;font-weight:700;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.pm-ta{width:100%;border:1px solid var(--line);border-radius:11px;padding:12px 14px;font-family:var(--font-num);font-size:13px;line-height:1.7;color:var(--fg1);outline:none;resize:vertical;background:#FAFBFD}
.pm-ta:focus{border-color:var(--primary-mid);background:#fff}
.pm-preview{margin-top:12px;border:1px dashed var(--line);border-radius:11px;padding:12px 14px;font-size:12.5px;color:var(--fg4);min-height:46px}
.pm-preview.live{border-style:solid;border-color:#C5DDFA;background:#F6FAFF;color:var(--fg2)}
.pp-sum{font-size:13px;color:var(--fg2);margin-bottom:7px}
.pp-sum b{color:var(--primary);font-family:var(--font-num)}
.pp-line{font-size:12.5px;color:var(--fg2);line-height:1.7}
.pp-line.sub{color:var(--fg3);padding-left:14px}
.pp-line.more{color:var(--fg4);font-style:italic}
.pm-btn{border:1px solid var(--line);background:#fff;color:var(--fg2);font-family:inherit;font-size:13px;font-weight:700;padding:9px 18px;border-radius:9px;cursor:pointer;transition:all .15s}
.pm-btn.ghost:hover{border-color:var(--primary-mid);color:var(--primary)}
.pm-btn.primary{border-color:var(--primary);background:var(--primary);color:#fff}
.pm-btn.primary:hover{background:var(--ink);border-color:var(--ink)}

/* ═══════════ ② 评审 review（新增） ═══════════ */
.rv-filter{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.rv-fseg{border:1px solid var(--line);background:var(--panel);color:var(--fg3);font-family:inherit;font-size:12.5px;font-weight:700;padding:7px 14px;border-radius:9px;cursor:pointer}
.rv-fseg:hover{border-color:var(--primary-mid);color:var(--primary)}
.rv-fseg.on{background:var(--primary);border-color:var(--primary);color:#fff}
.rv-list{display:flex;flex-direction:column;gap:12px}
.rv-row{background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:15px 17px}
.rv-row.dragging{opacity:.5}
.rv-row.drop-hint{border-color:var(--primary-mid)}
.rv-row.reviewed{border-color:#B6E3C8;background:linear-gradient(180deg,#FAFEFB,#fff)}
.rv-row.is-study{border-left:3px solid var(--study)}
.rv-head{display:flex;align-items:center;gap:10px;margin-bottom:13px}
.rv-head .drag-h{color:var(--fg5);cursor:grab;display:flex;flex:none}
.rv-text{flex:1;font-size:14.5px;font-weight:700;color:var(--fg1);display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.rv-badge{font-size:10.5px;font-weight:700;border-radius:6px;padding:2px 9px;flex:none}
.rv-badge.todo{color:var(--amber);background:#FCF1E1;border:1px solid #F2D9AE}
.rv-badge.done{color:var(--ahead);background:#E7F6EE;border:1px solid #B6E3C8}
.rv-kids{font-size:10.5px;font-weight:700;color:var(--primary);background:#EAF1FB;border:1px solid #C5DDFA;border-radius:6px;padding:2px 8px}
.rv-complete{display:flex;align-items:center;gap:6px;border:1px solid var(--ahead);background:var(--ahead);color:#fff;font-family:inherit;font-size:12.5px;font-weight:700;padding:8px 14px;border-radius:9px;cursor:pointer;flex:none}
.rv-complete:hover{filter:brightness(.95)}
.rv-complete:disabled{opacity:.45;cursor:not-allowed;filter:none}
.rv-reopen{display:flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;color:var(--fg3);font-family:inherit;font-size:12.5px;font-weight:600;padding:8px 13px;border-radius:9px;cursor:pointer;flex:none}
.rv-reopen:hover{border-color:var(--primary-mid);color:var(--primary)}
.rv-ctrls{display:grid;grid-template-columns:repeat(2,1fr);gap:12px 18px}
.rv-ctrls .tc{display:flex;flex-direction:column;gap:6px;min-width:0}
.rv-ctrls .tc.grow{grid-column:span 1}
.rv-ctrls .tc.full{grid-column:1 / -1}
.rv-ctrls .tc>label{font-size:11.5px;font-weight:700;color:var(--fg4)}
.rv-note{width:100%;border:1px solid var(--line);border-radius:9px;padding:9px 11px;font-family:inherit;font-size:13px;color:var(--fg1);outline:none;resize:vertical;background:#FAFBFD}
.rv-note:focus{border-color:var(--primary-mid);background:#fff}
.rv-subs{display:flex;flex-direction:column;gap:6px}
.rv-sub{display:flex;align-items:center;gap:9px;background:#FAFBFD;border:1px solid var(--line);border-radius:9px;padding:7px 11px}
.rv-sub-tick{width:6px;height:6px;border-radius:50%;background:var(--fg5);flex:none}
.rv-sub-t{flex:1;font-size:13px;color:var(--fg2);font-weight:600}
.rv-sub-craft{font-size:10.5px;font-weight:700;flex:none}
.rv-sub-owner{border:1px solid var(--line);border-radius:7px;padding:4px 6px;font-family:inherit;font-size:11.5px;color:var(--fg2);background:#fff;cursor:pointer;flex:none}
.rv-sub-x{width:24px;height:24px;border:1px solid var(--line);background:#fff;color:var(--fg4);border-radius:7px;font-size:15px;line-height:1;cursor:pointer;flex:none}
.rv-sub-x:hover{border-color:var(--bug);color:var(--bug);background:#FCEDEA}
.rv-sub-add{border:1px dashed var(--line);background:#fff;border-radius:9px;padding:8px 11px;font-family:inherit;font-size:12.5px;color:var(--fg1);outline:none}
.rv-sub-add:focus{border-color:var(--primary-mid);border-style:solid}
.rvm-title{font-size:15px;font-weight:800;color:var(--fg1);margin-bottom:14px}
.rv-modal-body .rv-ctrls{grid-template-columns:1fr 1fr}

/* ═══════════ ③ 排期 schedule（新增） ═══════════ */
.step-seg{display:inline-flex;background:var(--line-soft);border-radius:9px;padding:3px}
.step-seg .ss{border:none;background:none;font-family:inherit;font-size:12.5px;font-weight:700;color:var(--fg3);padding:7px 15px;border-radius:7px;cursor:pointer}
.step-seg .ss.on{background:#fff;color:var(--primary);box-shadow:0 1px 4px rgba(28,52,92,.12)}
.sched-tip{display:flex;align-items:center;gap:10px;background:var(--tint-1,#F0F7FF);border:1px solid var(--line);border-radius:11px;padding:11px 15px;font-size:12.5px;color:var(--fg3);line-height:1.5;margin-bottom:16px}
.sched-tip svg{flex:none;color:var(--primary)}
.sched-tip b{color:var(--primary-dark,var(--ink));font-weight:700}
.tint-1{}
/* 周列 */
.wk-cols{display:flex;gap:14px;overflow-x:auto;padding-bottom:8px;align-items:flex-start}
.wk-col{flex:0 0 290px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);display:flex;flex-direction:column;min-height:160px}
.wk-col.cur{border-color:var(--primary-mid);box-shadow:0 0 0 2px rgba(40,97,174,.12),var(--shadow)}
.wk-col.drop{border-color:var(--primary);border-style:dashed;background:#F6FAFF}
.wk-head{display:flex;align-items:center;gap:8px;padding:13px 15px 9px}
.wk-h-l{flex:1;display:flex;flex-direction:column;gap:3px}
.wk-name{font-size:14px;font-weight:800;color:var(--fg1)}
.wk-range{font-size:11px;color:var(--fg4);font-weight:600}
.wk-cn{font-size:11.5px;font-weight:700;color:var(--fg4);background:var(--line-soft);border-radius:100px;min-width:22px;text-align:center;padding:2px 7px}
.wk-stats{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:0 15px 11px;border-bottom:1px solid var(--line-soft)}
.wk-total{font-size:12px;color:var(--fg3)}
.wk-total b{color:var(--fg1);font-family:var(--font-num)}
.wk-stat{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;color:var(--sc);background:color-mix(in srgb,var(--sc) 12%,#fff);border-radius:7px;padding:2px 8px}
.wk-stat .ws-dot{width:6px;height:6px;border-radius:50%;background:var(--sc)}
.wk-stat .ws-k{color:var(--fg3);font-weight:600}
.wk-stat .ws-v{color:var(--sc)}
.wk-body{flex:1;display:flex;flex-direction:column;gap:9px;padding:12px 13px}
.wk-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--fg5);font-size:12px;border:1px dashed var(--line);border-radius:10px;padding:22px;text-align:center}
.wk-card{background:#fff;border:1px solid var(--line);border-radius:11px;padding:11px 12px;cursor:grab;box-shadow:0 1px 4px rgba(28,52,92,.05)}
.wk-card.dragging{opacity:.5}
.wk-card.type-bug{border-left:3px solid var(--bug)}
.wk-card.type-feature{border-left:3px solid var(--feature)}
.wc-top{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.type-badge.sm{font-size:9.5px;padding:1px 6px}
.wc-h{margin-left:auto;font-size:11.5px;font-weight:700;color:var(--fg2)}
.wc-x{width:22px;height:22px;border:1px solid var(--line);background:#fff;color:var(--fg4);border-radius:6px;font-size:14px;line-height:1;cursor:pointer;flex:none}
.wc-x:hover{border-color:var(--bug);color:var(--bug);background:#FCEDEA}
.wc-title{font-size:13px;font-weight:600;color:var(--fg1);line-height:1.4}
.wc-foot{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap}
.wc-crafts{display:flex;gap:4px}
.wc-craft{font-size:10px;font-weight:700;border-radius:5px;padding:1px 7px}
.wc-subn{font-size:10.5px;color:var(--fg4);margin-left:auto}
.wk-add{flex:0 0 120px;align-self:stretch;border:1px dashed var(--line);background:rgba(255,255,255,.5);border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;cursor:pointer;color:var(--fg4);font-family:inherit}
.wk-add:hover{border-color:var(--primary-mid);color:var(--primary);background:#F6FAFF}
.wk-add .wk-add-ic{font-size:24px;line-height:1}
.wk-add small{font-size:12px;font-weight:600}
/* 排期需求池 */
.sched-pool{margin-top:18px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:15px 17px}
.sp-pool-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.sph-t{font-size:14px;font-weight:800;color:var(--fg1)}
.sph-hint{font-size:11.5px;color:var(--fg4)}
.sph-n{font-size:11.5px;font-weight:700;color:var(--ahead);background:#E7F6EE;border-radius:100px;padding:3px 11px}
.sph-n.warn{color:var(--amber);background:#FCF1E1}
.sp-pool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.sp-pool-item{border:1px solid var(--line);border-radius:11px;padding:11px 13px;background:#FBFCFE;cursor:grab}
.sp-pool-item:hover{border-color:var(--primary-mid)}
.sp-pool-item.dragging{opacity:.5}
.sp-pool-item.unreviewed{background:#FBF9F4;border-style:dashed;cursor:default}
.spi-top{display:flex;align-items:center;gap:7px;margin-bottom:6px}
.spi-badge{font-size:9.5px;font-weight:700;border-radius:5px;padding:1px 7px}
.spi-badge.done{color:var(--ahead);background:#E7F6EE}
.spi-badge.todo{color:var(--amber);background:#FCF1E1}
.spi-h{margin-left:auto;font-size:11px;font-weight:700;color:var(--fg3)}
.spi-title{font-size:13px;font-weight:600;color:var(--fg1);line-height:1.4}
.spi-crafts{display:flex;gap:4px;margin-top:7px}
.spi-review{margin-top:8px;border:1px solid var(--amber);background:#fff;color:var(--amber);font-family:inherit;font-size:11.5px;font-weight:700;padding:5px 12px;border-radius:8px;cursor:pointer}
.spi-review:hover{background:var(--amber);color:#fff}
/* 日排期 */
.day-bar{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.day-weeksel{display:flex;gap:7px;flex-wrap:wrap}
.dws{display:flex;flex-direction:column;align-items:flex-start;gap:1px;border:1px solid var(--line);background:var(--panel);border-radius:9px;padding:6px 12px;cursor:pointer;font-family:inherit}
.dws:hover{border-color:var(--primary-mid)}
.dws.on{border-color:var(--primary);background:#EAF1FB}
.dws.on span{color:var(--primary)}
.dws>span:first-child{font-size:12.5px;font-weight:700;color:var(--fg1)}
.dws-r{font-size:10px;color:var(--fg4)}
.day-tip{font-size:12px;color:var(--fg4)}
.day-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:9px}
.day-cell{background:var(--panel);border:1px solid var(--line);border-radius:12px;min-height:150px;display:flex;flex-direction:column;box-shadow:var(--shadow)}
.day-cell.weekend{background:#FBFAF7;border-color:#EEE6D6}
.day-cell.drop{border-color:var(--primary);border-style:dashed;background:#F6FAFF}
.day-cell-head{display:flex;align-items:center;gap:6px;padding:9px 11px;border-bottom:1px solid var(--line-soft)}
.dch-wd{font-size:12px;font-weight:700;color:var(--fg1)}
.dch-d{font-size:10.5px;color:var(--fg4)}
.dch-ot{margin-left:auto;font-size:9.5px;font-weight:700;color:var(--gold-dark,#B58953);background:#FBF1DD;border-radius:5px;padding:1px 6px}
.day-cell-body{flex:1;display:flex;flex-direction:column;gap:7px;padding:9px}
.day-empty{color:var(--fg5);font-size:12px;text-align:center;padding:10px 0}
.day-chip{border:1px solid var(--line);border-left:3px solid var(--cc);border-radius:9px;padding:8px 9px;background:#fff;cursor:grab;display:flex;align-items:flex-start;gap:7px}
.day-chip.dragging{opacity:.5}
.day-chip.done{opacity:.6}
.day-chip.done .dc-t{text-decoration:line-through;color:var(--fg4)}
.dc-main{flex:1;min-width:0}
.dc-t{font-size:12px;font-weight:600;color:var(--fg1);line-height:1.35}
.dc-meta{display:flex;align-items:center;gap:6px;margin-top:3px}
.dc-card{font-size:10px;color:var(--fg4)}
.dc-craft{font-size:10px;font-weight:700;color:var(--cc)}
.dc-h{font-size:10.5px;font-weight:700;color:var(--fg3);flex:none}
.day-pool{margin-top:16px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:14px 16px}
.day-pool.drop{border-color:var(--primary);border-style:dashed;background:#F6FAFF}
.day-pool-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:9px}

/* ───────── ⑤ 总表（ledger）───────── */
.lg-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.lg-segs{display:inline-flex;gap:3px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:3px}
.lg-seg{font-family:inherit;font-size:12.5px;font-weight:600;color:var(--fg3);background:none;border:none;border-radius:7px;padding:6px 12px;cursor:pointer;white-space:nowrap}
.lg-seg:hover{color:var(--fg1);background:var(--line-soft)}
.lg-seg.on{background:var(--primary);color:#fff}
.lg-div{width:1px;height:24px;background:var(--line)}
.lg-search{font-family:inherit;font-size:13px;color:var(--fg1);background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:8px 13px;min-width:200px;outline:none}
.lg-search:focus{border-color:var(--primary-mid)}

.lg-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:var(--panel)}
.lg-tbl{min-width:1080px}
.lg-tr{display:grid;grid-template-columns:minmax(220px,2.4fr) 84px 96px minmax(130px,1.2fr) 110px 64px 64px 78px 110px minmax(150px,1.4fr);align-items:center;border-bottom:1px solid var(--line-soft)}
.lg-head{position:sticky;top:0;z-index:2;background:linear-gradient(180deg,#F7F9FD,#EFF3FA);border-bottom:1px solid var(--line)}
.lg-th{font-size:11.5px;font-weight:700;color:var(--fg3);padding:11px 12px;white-space:nowrap}
.lg-body .lg-tr:hover{background:#F8FBFF}
.lg-body .lg-tr.is-done{background:#F6FBF8}
.lg-td{padding:10px 12px;font-size:12.5px;color:var(--fg2);min-width:0}
.lg-title{font-weight:600;color:var(--fg1);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lg-dash{color:var(--fg5)}
.lg-chip{display:inline-block;font-size:11px;font-weight:700;border:1px solid;border-radius:6px;padding:1px 8px;white-space:nowrap}
.lg-ends{display:flex;flex-wrap:wrap;gap:4px}
.lg-owner{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--fg2);white-space:nowrap}
.lg-ava{width:20px;height:20px;border-radius:50%;background:var(--primary);color:#fff;font-size:9.5px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.lg-ava.ext{background:var(--amber)}
.lg-prio{font-size:12px;font-weight:700}
.lg-ver{font-size:12px;font-weight:700;color:var(--primary);background:#EAF1FB;border-radius:6px;padding:1px 8px}
.lg-done{display:inline-flex;align-items:center;gap:6px;font-size:12px;white-space:nowrap}
.lg-done.yes{color:var(--feature);font-weight:700}
.lg-tick{width:16px;height:16px;border-radius:50%;background:var(--feature);color:#fff;font-size:10px;display:flex;align-items:center;justify-content:center;flex:none}
.lg-done.part{color:var(--fg3)}
.lg-bar-mini{width:46px;height:6px;border-radius:100px;background:var(--line);overflow:hidden;flex:none}
.lg-bar-mini i{display:block;height:100%;background:var(--primary);border-radius:100px}
.lg-done.no{color:var(--fg5)}
.lg-note{font-size:11.5px;color:var(--fg3);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lg-owners{display:flex;flex-wrap:wrap;gap:5px}

/* 评审：负责人多选 + 录入 */
.owner-multi{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.own-chip{display:inline-flex;align-items:center;gap:5px;font-family:inherit;font-size:12px;font-weight:600;color:var(--fg3);
  background:var(--panel);border:1px solid var(--line);border-radius:100px;padding:3px 10px 3px 4px;cursor:pointer;transition:all .14s}
.own-chip:hover{border-color:var(--primary-mid);color:var(--fg1)}
.own-chip .own-ava{width:20px;height:20px;border-radius:50%;background:var(--fg5);color:#fff;font-size:9.5px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.own-chip.on{background:#EAF1FB;border-color:var(--primary);color:var(--ink)}
.own-chip.on .own-ava{background:var(--primary)}
.own-chip .own-ava.ext{background:var(--amber)}
.own-chip.on .own-ava.ext{background:var(--amber)}
.own-add{font-family:inherit;font-size:12px;font-weight:700;color:var(--primary);background:none;border:1px dashed var(--primary-mid);border-radius:100px;padding:5px 11px;cursor:pointer}
.own-add:hover{background:#EAF1FB}
.ao-body{display:grid;grid-template-columns:auto 1fr;gap:11px 12px;align-items:center;min-width:300px}
.ao-l{font-size:12.5px;font-weight:700;color:var(--fg2)}
.ao-inp{font-family:inherit;font-size:13.5px;color:var(--fg1);border:1px solid var(--line);border-radius:9px;padding:8px 11px;outline:none}
.ao-inp:focus{border-color:var(--primary-mid)}
.ao-craft{display:inline-flex;gap:5px}
.ao-cb{font-family:inherit;font-size:12.5px;font-weight:600;color:var(--fg3);background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:6px 14px;cursor:pointer}
.ao-cb.on{background:var(--primary);color:#fff;border-color:var(--primary)}
.ao-sec{grid-column:1 / -1;font-size:11.5px;font-weight:700;color:var(--fg4);border-top:1px solid var(--line);padding-top:10px;margin-top:2px}
.ao-list{grid-column:1 / -1;display:flex;flex-direction:column;gap:6px;max-height:200px;overflow-y:auto}
.ao-empty{font-size:12px;color:var(--fg4);padding:6px 2px}
.ao-li{display:flex;align-items:center;gap:9px;padding:6px 8px;border:1px solid var(--line);border-radius:9px;background:var(--panel)}
.ao-li .own-ava{width:22px;height:22px;border-radius:50%;background:var(--primary);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.ao-li .own-ava.ext{background:var(--amber)}
.ao-li-n{font-size:13px;font-weight:600;color:var(--fg1);flex:1}
.ao-li-c{font-size:11px;font-weight:700;color:var(--fg3);background:var(--line-soft);border-radius:6px;padding:1px 8px;flex:none}
.ao-del{width:24px;height:24px;border-radius:7px;border:1px solid var(--line);background:var(--panel);color:var(--fg4);font-size:16px;line-height:1;cursor:pointer;flex:none;display:flex;align-items:center;justify-content:center}
.ao-del:hover{background:#FCEDEA;border-color:var(--bug);color:var(--bug)}
