/* RDCC H5 — 研发作战台
   设计语言遵循 .agent/rule/frontend_rule.style：
   紫（violet）主色 + 红黄绿灯状态色 + 移动优先 + 卡片化。
   主色对齐门户页（portal_dingtalk）RDCC 板块的 --purple：板块色是空间定位线索，
   门户看到什么色、进来还得是什么色，否则用户会怀疑自己进错板块。 */
:root{
  /* 品牌主色（2026-11-12 由青绿 #0f766e 改为紫，对齐门户 RDCC 板块）
     变量名沿用历史名称 --teal：CSS 26 处、JS 5 处引用全部走 var(--teal*)，而 JS 属
     「逻辑通用、需与 DDCC 同步」的文件——若改名为 --brand，RDCC 与 DDCC 的 JS 会
     长期产生无意义 diff、抬高每次同步的噪音。故只改值、不改名，勿按字面理解为青绿。
     取色：#6d28d9 = violet-700（门户 --purple）；#5b21b6 = violet-800（按压/深色端）；
     #f5f3ff = violet-50（选中·hover 浅底）。与白字对比度 7.14:1（原青绿 5.55:1）。 */
  --teal:#6d28d9; --teal-d:#5b21b6; --teal-l:#f5f3ff;
  /* 文字 */
  --navy:#0f172a; --slate:#475569; --slate-l:#94a3b8;
  /* 表面 */
  --bg:#f1f5f9; --card:#fff; --line:#e2e8f0;
  /* 红黄绿灯（状态色 + 浅底配对） */
  --red:#dc2626; --red-bg:#fee2e2;
  --yellow:#d97706; --yellow-bg:#fef3c7;
  --green:#059669; --green-bg:#d1fae5;
  --gray:#94a3b8; --gray-bg:#f1f5f9;
  --blue:#2563eb; --blue-bg:#dbeafe;
  --purple:#7c3aed; --purple-bg:#ede9fe;
  /* 圆角 / 阴影 / 安全区 */
  --r:12px;
  --sh:0 1px 3px rgba(15,23,42,.08),0 1px 2px rgba(15,23,42,.04);
  --sh2:0 4px 16px rgba(15,23,42,.12);
  --safe-b:env(safe-area-inset-bottom,0px);
  /* 兼容别名（旧内联样式引用） */
  --c-bg:var(--bg); --c-surface:var(--card); --c-border:var(--line);
  --c-text:var(--navy); --c-sub:var(--slate);
  --c-accent:var(--teal); --c-danger:var(--red);
  --c-warn:var(--yellow); --c-ok:var(--green);
  --c-red:var(--red); --c-yellow:var(--yellow); --c-green:var(--green);
  --c-btn:var(--bg); --c-btn-hover:var(--teal-l);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  font-size:15px;line-height:1.55;color:var(--navy);background:var(--bg);
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:15px}
.hide{display:none !important}

/* ── 人员管理表格 ─────────────────────────── */
.people-table-wrap{padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch}
.people-table{width:100%;border-collapse:collapse;font-size:14px}
.people-table thead{background:var(--bg);border-bottom:2px solid var(--line)}
.people-table th{padding:12px 16px;text-align:left;font-weight:600;color:var(--slate);white-space:nowrap}
.people-table td{padding:12px 16px;border-bottom:1px solid var(--line);vertical-align:middle}
.people-table tbody tr:hover{background:var(--bg)}
.people-table tbody tr:last-child td{border-bottom:none}
.people-table strong{color:var(--navy);font-weight:600}

/* ── 页面骨架（移动优先） ─────────────────────── */
.app{max-width:1180px;margin:0 auto;padding:14px 14px 24px}
.hdr{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:12px 0;border-bottom:1px solid var(--line);margin-bottom:16px}
.hdr .logo{font-weight:700;font-size:16px}
.hdr .user{color:var(--slate);font-size:13px}
.hdr .actions{display:flex;gap:8px;flex-wrap:wrap}

/* ── 导航按钮 ─────────────────────────────── */
.nav-btn{border-color:var(--line);background:var(--card)}
.nav-btn.on,.nav-btn.active{background:var(--teal);border-color:var(--teal);color:#fff}

/* ── 按钮（规范 3.3） ───────────────────────── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:4px;
  padding:6px 14px;border:1px solid var(--line);border-radius:9px;
  background:var(--card);color:var(--navy);font-size:13px;font-weight:600;
  cursor:pointer;text-decoration:none;white-space:nowrap;transition:transform .15s,background .2s,border-color .2s;
}
.btn:hover{background:var(--teal-l);border-color:var(--teal)}
.btn:active{transform:scale(.98)}
.btn-primary,.btn.primary{background:var(--teal);color:#fff;border-color:var(--teal)}
.btn-primary:hover,.btn.primary:hover{background:var(--teal-d);border-color:var(--teal-d)}
.btn-danger,.btn.danger{background:var(--red);color:#fff;border-color:var(--red)}
.btn-danger:hover{background:var(--red);opacity:.9}
.btn-ghost{background:transparent;border-color:var(--line)}
.btn-sm,.btn.sm{padding:3px 10px;font-size:12px}
.btn.block{width:100%;display:flex}
.btn[disabled],.btn.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}

/* 卡片内按钮行（`.actions compact`，目前集中在项目详情）：此前无对应规则，按钮靠 HTML
   空白字符隔开，间距随字号/换行变化且不统一。统一为 flex 横排 + 8px 间距，窄屏自动换行。
   align-items 用 center 而非默认 stretch：同排混拼普通按钮与 .sm 按钮时，矮的不会被拉高。 */
.actions.compact{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* ── 空态 / 弱化文本 ───────────────────────── */
.empty{text-align:center;padding:40px 16px;color:var(--slate)}
.empty b{display:block;font-size:32px;opacity:.35;margin-bottom:8px}
.empty h2{font-size:18px;margin-bottom:8px}
.muted{color:var(--slate);font-size:12px}

/* ── 卡片 / 区块标题 ───────────────────────── */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-bottom:12px;box-shadow:var(--sh)}
.card h3{font-size:15px;margin-bottom:8px}
.card .meta{color:var(--slate);font-size:12px}
.sec-title{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:15px;font-weight:700}
.sec-title .more{color:var(--teal);font-size:12px;cursor:pointer;text-decoration:none}
.section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.section-head h3{margin-bottom:0}
.search-bar{display:flex;gap:8px;align-items:center;margin-top:8px}
.search-bar input{width:180px;flex:none;padding:6px 12px;border:1px solid var(--line);border-radius:9px;background:var(--card);color:var(--navy)}
.search-bar input:focus{outline:none;border-color:var(--teal)}
.divider{height:1px;background:var(--line);margin:12px 0}

/* ── 列表行（trow） ────────────────────────── */
.trow,.list-item{display:flex;align-items:center;padding:12px 16px;background:var(--card);border-bottom:1px solid var(--line);cursor:pointer;gap:12px;box-shadow:var(--sh);margin-bottom:8px;border-radius:var(--r)}
.trow:hover,.list-item:hover{background:var(--teal-l)}
.trow .name,.list-item .name{font-weight:600;flex:1;display:flex;flex-direction:column;min-width:0}
.trow .health-why,.list-item .health-why{font-weight:400;font-size:12px;color:var(--slate);white-space:normal;word-break:break-word}
.trow .state,.list-item .state{font-size:12px;padding:2px 8px;border-radius:10px;background:var(--bg)}
.trow.done .name{text-decoration:line-through;color:var(--slate)}
.mini-list{display:flex;flex-direction:column}
.mini-list .trow{margin-bottom:0;border-radius:0;box-shadow:none}
.mini-list .trow:first-child{border-radius:var(--r) var(--r) 0 0}
.mini-list .trow:last-child{border-radius:0 0 var(--r) var(--r)}

/* ── 表格行（grid 布局） ───────────────────── */
.trow.grid{display:grid;gap:12px;border-radius:0;box-shadow:none;margin-bottom:0}
.trow.grid:hover{background:var(--teal-l)}

/* ── 统计网格（移动 2 列 / 桌面 ≥760px 4 列） ── */
.metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}
.metric-card,.responsibility-card,.problem-list-card{
  width:100%;border:1px solid var(--line);border-radius:var(--r);background:var(--card);
  color:var(--navy);padding:12px;text-align:left;cursor:pointer;box-shadow:var(--sh);
}
.metric-card{display:flex;flex-direction:column;gap:2px}
.metric-card strong{font-size:24px;color:var(--teal)}
.metric-card span{font-size:13px;font-weight:600}
.metric-card small,.responsibility-card small,.problem-list-card small{color:var(--slate);font-size:12px;word-break:break-word}
.responsibility-card,.problem-list-card{display:flex;flex-direction:column;gap:5px;margin-bottom:8px}
.filter-row{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0}

/* ── 筛选 chip（规范 3.3） ───────────────────── */
.chip{
  padding:5px 12px;border-radius:999px;border:1px solid var(--line);background:var(--card);
  color:var(--slate);font-size:12px;font-weight:600;cursor:pointer;
}
.chip.on{background:var(--teal);border-color:var(--teal);color:#fff}
.chip.red{color:var(--red)}
.chip.red.on{background:var(--red);border-color:var(--red);color:#fff}
.chip.yellow{color:var(--yellow)}
.chip.yellow.on{background:var(--yellow);border-color:var(--yellow);color:#fff}

/* ── 指示灯（规范 3.3） ─────────────────────── */
.light,.health-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;background:var(--gray)}
.light.green,.health-dot.green{background:var(--green);box-shadow:0 0 0 3px var(--green-bg)}
.light.yellow,.health-dot.yellow{background:var(--yellow);box-shadow:0 0 0 3px var(--yellow-bg)}
.light.red,.health-dot.red{background:var(--red);box-shadow:0 0 0 3px var(--red-bg)}
.light.none,.health-dot.none{background:var(--gray)}
.light.blink{animation:bk 1.4s infinite}
@keyframes bk{0%,100%{opacity:1}50%{opacity:.35}}

/* ── 进度条（规范 3.3） ─────────────────────── */
.bar{height:6px;border-radius:999px;background:var(--gray-bg);overflow:hidden}
.bar>i{display:block;height:100%;border-radius:999px;background:var(--teal);transition:width .4s}
.bar.red>i{background:var(--red)}.bar.yellow>i{background:var(--yellow)}.bar.green>i{background:var(--green)}

/* ── 状态标签 tag（规范 3.3） ────────────────── */
.tag,.badge{
  display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:2px 8px;
  border-radius:6px;font-weight:600;line-height:1.6;
}
.tag.green,.badge.green{background:var(--green-bg);color:var(--green)}
.tag.yellow,.badge.yellow{background:var(--yellow-bg);color:var(--yellow)}
.tag.red,.badge.red{background:var(--red-bg);color:var(--red)}
.tag.gray,.badge.gray{background:var(--gray-bg);color:var(--slate)}
.tag.blue,.badge.blue{background:var(--blue-bg);color:var(--blue)}
.tag.purple,.badge.purple{background:var(--purple-bg);color:var(--purple)}
.tag.line,.badge.line{background:transparent;border:1px solid var(--line)}

/* ── 表单（规范 3.3） ───────────────────────── */
.form{max-width:520px}
.form label,.field label{display:block;font-size:13px;font-weight:600;margin-bottom:4px;margin-top:12px}
.form label .req,.field label .req{color:var(--red)}
.form input,.form select,.form textarea,
.field input,.field textarea,.field select{
  width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:9px;font-size:14px;background:var(--card);color:var(--navy);
}
.form input:focus,.form textarea:focus,.form select:focus,
.field input:focus,.field textarea:focus,.field select:focus{outline:none;border-color:var(--teal);box-shadow:0 0 0 2px var(--teal-l)}
.form textarea,.field textarea{min-height:80px}
.form .hint,.field .hint{font-size:12px;color:var(--slate);margin-top:2px}
.form .actions,.field .actions{margin-top:16px;display:flex;gap:8px;flex-wrap:wrap}
.field{display:flex;flex-direction:column;gap:4px;margin-top:12px}
.field input[type="checkbox"],.field input[type="radio"]{width:auto}
.frow{display:grid;grid-template-columns:1fr 1fr;gap:8px}

/* ── tabs ──────────────────────────────────── */
.tabs{display:flex;gap:0;border-bottom:2px solid var(--line);margin-bottom:16px}
.tabs button{padding:8px 16px;border:none;background:none;font-size:14px;cursor:pointer;color:var(--slate);border-bottom:2px solid transparent;margin-bottom:-2px}
.tabs button.on,.tabs button.active{color:var(--teal);border-bottom-color:var(--teal);font-weight:600}

/* ── 节点 / 问题 / 协调行 ───────────────────── */
.node-row{display:flex;align-items:center;padding:8px 12px;gap:12px;border-bottom:1px solid var(--line);font-size:13px}
.node-row .seq{width:24px;text-align:center;color:var(--slate)}
.node-row .node-name{flex:1;font-weight:500}
.node-row .node-date{color:var(--slate);font-size:12px;min-width:110px}
.node-row .node-actions{display:flex;gap:4px}
/* 当前节点表格化：一节点一行，窄屏下外层容器横向滚动 */
.node-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.node-table{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap}
.node-table th{background:var(--bg);color:var(--slate);font-weight:600;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}
.node-table td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.node-table .seq{width:24px;text-align:center;color:var(--slate)}
.node-table .node-name{font-weight:500;white-space:normal;min-width:110px}
.problem-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--line)}
.problem-row:first-of-type{border-top:none}
.problem-main{display:flex;flex-direction:column;gap:4px;min-width:0}
.problem-main strong{font-size:14px;word-break:break-word}
.problem-main small{font-size:12px;color:var(--slate);word-break:break-word}
.coord-row{display:flex;flex-direction:column;gap:4px;padding:8px 0;border-top:1px solid var(--line)}
.error{color:var(--red);font-size:13px;padding:8px;background:var(--red-bg);border-radius:var(--r);margin:8px 0}
.danger{background:var(--red);color:#fff;border-color:var(--red)}

/* ── 登录 / Persona 屏 ─────────────────────── */
#login-screen{text-align:center;padding:80px 16px}
#login-screen h1{font-size:24px;margin-bottom:8px}
#login-screen p{color:var(--slate)}
#persona-screen{text-align:center;padding:80px 16px}
#persona-screen h1{font-size:24px;margin-bottom:8px}
#persona-screen p{color:var(--slate);margin-bottom:24px}
.persona-list{display:flex;flex-direction:column;gap:12px;max-width:280px;margin:0 auto}
.persona-btn{width:100%;padding:14px 20px;font-size:16px;border:1px solid var(--line);border-radius:var(--r);background:var(--card);color:var(--navy);cursor:pointer;transition:background .15s}
.persona-btn:hover{background:var(--teal-l)}

/* ── 弹层：底部 sheet（移动）/ 居中（桌面） ── */
.sheet,.modal-overlay{position:fixed;inset:0;background:rgba(15,23,42,.4);display:flex;align-items:flex-end;justify-content:center;z-index:100;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s}
.sheet.on,.modal-overlay.show{opacity:1;visibility:visible}
.sheet-inner,.modal{background:var(--card);border-radius:var(--r) var(--r) 0 0;padding:20px 16px calc(20px + var(--safe-b));max-width:640px;width:100%;max-height:85vh;overflow-y:auto;transform:translateY(100%);transition:transform .25s;box-shadow:var(--sh2)}
.sheet.on .sheet-inner,.modal-overlay.show .modal{transform:translateY(0)}
.sheet-inner h3,.modal h3{margin-bottom:12px}
.sheet-inner .primary-actions,.modal .primary-actions{margin-top:12px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.sheet-inner .actions,.modal .actions{margin-top:16px;display:flex;gap:8px;flex-wrap:wrap}
/* ── 弹窗尾部操作区吸底（2026-09-17） ────────
   .modal 自身就是滚动容器（max-height:85vh;overflow-y:auto），长弹窗里末尾按钮行
   （关闭/取消/确认/提交）原本排在滚动流最末，必须滚到底才点得到。这里把弹窗内最后一
   个 .actions 钉在弹窗底部：按钮行自身不留底部内边距，下方用伪元素补一块同色遮罩盖住
   弹窗原有的底部内边距带（高度与之绑定：移动端 20px+safe-b、桌面 24px——改 .modal 的
   padding-bottom 时需同步改这两处）。嵌在表单容器里的尾部按钮行由 rdcc-core.js 的
   modal() 提升为 .modal 直接子元素后再生效（sticky 无法浮出父容器边界）。 */
.modal > .actions:last-child{position:sticky;bottom:0;z-index:1;background:var(--card);margin:0 -16px;padding:16px 16px 0;margin-bottom:calc(-20px - var(--safe-b))}
.modal > .actions:last-child::after{content:'';position:absolute;left:0;right:0;top:100%;height:calc(20px + var(--safe-b));background:var(--card)}

/* ── 轻提示 toast（规范 3.3） ───────────────── */
.toast{
  position:fixed;left:50%;bottom:calc(84px + var(--safe-b));transform:translateX(-50%) translateY(20px);
  background:rgba(15,23,42,.92);color:#fff;font-size:13px;padding:9px 16px;border-radius:999px;
  z-index:200;opacity:0;visibility:hidden;transition:opacity .25s,transform .25s,visibility .25s;max-width:86vw;text-align:center;
}
.toast.on{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}

/* ── 全局请求遮罩（2026-09-15） ──────────────
   由 rdcc-core.js _reqStart 动态创建：元素立即入 DOM 拦截一切点击（自身透明 +
   pointer-events:all），150ms 后才加 .show 淡入视觉（短请求不闪屏）；z-index 高于
   弹层(100)/toast(200)，保证弹窗内的审批等操作同样被拦住。 */
#req-mask{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;background:rgba(15,23,42,0);pointer-events:all;transition:background .25s}
#req-mask.show{background:rgba(15,23,42,.45)}
#req-mask .req-mask-box{display:flex;flex-direction:column;align-items:center;gap:10px;background:var(--card);border-radius:var(--r);padding:18px 28px;box-shadow:var(--sh2);opacity:0;transition:opacity .25s}
#req-mask.show .req-mask-box{opacity:1}
#req-mask .req-mask-spin{width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--teal);border-radius:50%;animation:req-spin .8s linear infinite}
@keyframes req-spin{to{transform:rotate(360deg)}}
#req-mask .req-mask-text{font-size:13px;color:var(--slate)}

/* ── 键值对（规范 3.3） ────────────────────── */
.kvlist{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:13px}
.kvlist dt{color:var(--slate)}
.kvlist dd{font-weight:600;word-break:break-word}

/* ── 时间线（规范 3.3） ────────────────────── */
.tl-item{display:flex;gap:12px;padding:8px 0}
.tl-item .tl-dot{width:30px;height:30px;border-radius:50%;background:var(--teal-l);color:var(--teal);display:flex;align-items:center;justify-content:center;font-size:12px;flex-shrink:0}
.tl-item .tl-c{flex:1;min-width:0}

/* ── 项目卡（pcard，左边框状态色） ─────────── */
.pcard{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--green);border-radius:var(--r);padding:12px 14px;margin-bottom:10px;box-shadow:var(--sh)}
.pcard.red{border-left-color:var(--red)}
.pcard.yellow{border-left-color:var(--yellow)}
.pcard.gray{border-left-color:var(--gray)}
.pcard .pc-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.pcard .pc-hosp{font-size:12px;color:var(--slate)}
.pcard .pc-meta{font-size:12px;color:var(--slate);margin:4px 0}
.pcard .pc-body{font-size:13px;margin:6px 0}
.pcard .pc-stage{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--slate);margin-top:6px}
.pcard .pc-foot{display:flex;justify-content:space-between;align-items:center;margin-top:8px}

/* ── 健康区（现存组件，迁移令牌） ───────────── */
.health-section{display:grid;grid-template-columns:20px minmax(120px,180px) 1fr;align-items:start;gap:12px;padding:12px;background:var(--bg);border-radius:var(--r);margin-bottom:12px}
.health-section .health-main{display:flex;flex-direction:column;gap:2px;min-width:0}
.health-section .current{font-size:28px;font-weight:700}
.health-section .details{font-size:13px;color:var(--slate)}
.health-reasons{display:flex;flex-direction:column;gap:6px;min-width:0}
.health-reason{font-size:13px;color:var(--navy);word-break:break-word}
.health-reason small{display:block;color:var(--slate);font-size:12px}
.datetime-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.backoffice-form,.accept-form{display:flex;flex-direction:column}
.people-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.people-main{display:flex;flex-direction:column;gap:4px;min-width:0}
.role-checks{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.role-check{display:flex;align-items:center;gap:8px;font-weight:500}
.role-check input{width:auto}

/* ── Create user dialog ─────────────────────── */
#dt-search{width:180px}
.create-user-form{display:flex;flex-direction:column;gap:12px}
.dt-results{max-height:200px;overflow-y:auto;margin-top:8px}
.dt-user-item{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border:1px solid var(--line);border-radius:9px;cursor:pointer;margin-bottom:6px;transition:background .15s}
.dt-user-item:hover{background:var(--teal-l)}
.dt-user-item.selected{background:var(--teal-l);border-color:var(--teal)}
.dt-user-info{display:flex;flex-direction:column;gap:2px;min-width:0}
.dt-user-info strong{font-size:14px}
.dt-user-info .meta{font-size:12px;color:var(--slate)}
.dt-user-item input[type="radio"]{width:auto;margin-left:8px}
#selected-user{padding:8px 12px;background:var(--teal-l);border-radius:9px;margin-top:8px;display:flex;flex-direction:column;gap:4px}
#selected-user strong{font-size:14px}
#selected-user .meta{font-size:12px;color:var(--slate)}

/* ── Person selector ───────────────────────── */
.person-selector{position:relative;margin-top:12px}
.person-selector label{display:block;font-size:13px;font-weight:600;margin-bottom:4px}
.person-selector input[type="text"]{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:9px;font-size:15px}
.person-selector input[type="text"]:focus{outline:none;border-color:var(--teal);box-shadow:0 0 0 2px var(--teal-l)}
.person-selector input[type="hidden"]{display:none}
.ps-dropdown{position:absolute;top:100%;left:0;right:0;background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh2);z-index:50;max-height:200px;overflow-y:auto}
.ps-item{display:flex;justify-content:space-between;padding:8px 12px;cursor:pointer;font-size:13px}
.ps-item:hover{background:var(--teal-l)}
.ps-item.muted{color:var(--slate);cursor:default}
.ps-name{font-weight:500}
.ps-role{font-size:11px;color:var(--slate);padding:1px 6px;background:var(--bg);border-radius:8px}

/* ── Plan view ─────────────────────────────── */
.form h4{font-size:14px;margin-bottom:4px;color:var(--navy)}
.form input[type="date"]{font-family:inherit}

/* ── 周报阻塞问题列表 ──────────────────────── */
.block-problem{display:flex;align-items:center;gap:14px;padding:6px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);cursor:pointer;transition:border-color .15s,background .15s}
.block-problem:hover{border-color:var(--teal);background:var(--teal-l)}
.block-problem-title{flex:1;min-width:0;font-size:14px;font-weight:500;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.block-problem-sev{flex:0 0 auto;margin-right:6px;font-size:12px;padding:2px 8px;border-radius:6px;background:var(--bg)}
.block-problem input[type=checkbox]{flex:0 0 auto;width:14px;height:14px;margin:0;accent-color:var(--teal);cursor:pointer}
.form input[type="checkbox"]{margin-top:8px}

/* ── 节点关联选项（文本与复选框同行） ──────── */
.node-opt{display:flex;align-items:center;gap:14px;padding:4px 2px}
.node-opt.node-disabled{opacity:.55}
.node-opt input[type="checkbox"]{width:14px;height:14px;margin:0;flex:none;accent-color:var(--teal);cursor:pointer}

/* ── 桌面增强（≥760px） ─────────────────────── */
@media(min-width:760px){
  .app{padding:16px 24px}
  .sheet,.modal-overlay{align-items:center}
  .sheet-inner,.modal{border-radius:var(--r);padding:24px;transform:translateY(20px) scale(.98)}
  .sheet.on .sheet-inner,.modal-overlay.show .modal{transform:translateY(0) scale(1)}
  .frow{grid-template-columns:1fr 1fr}
  .metric-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
  .hdr .actions{gap:8px}
  .node-row .node-actions{gap:6px}
  .modal > .actions:last-child{margin:0 -24px;padding:16px 24px 0}
  .modal > .actions:last-child::after{height:24px}
}
