/* ai-recruiting 工作台样式。
 *
 * ★ 从 docs/iterations/v0.1.0/prototype/index.html 的 <style> 原样提取 ——
 *   原型是 Gate 1 已确认的界面基准（iteration Step 6：编码以 prototype 为准，
 *   不自由发挥）。改样式先改原型，再同步过来，否则验收对不上。
 *
 * 设计口径：浅色白底、图标一律 SVG 不用 emoji。
 */

:root{
  --ink:#0F172A; --slate:#1E293B; --paper:#F8FAFC; --white:#FFFFFF;
  --rule:#E4E5E7; --mark:#2563EB; --flag:#DC2626; --quiet:#64748B; --wash:#F1F5F9;
  --ok:#15803D; --warn:#B45309;
  --f:"Plus Jakarta Sans",-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;
  --s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--f);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}
h1,h2,h3{margin:0;text-wrap:balance;font-weight:600;letter-spacing:-.01em}
h1{font-size:24px}h2{font-size:19px}h3{font-size:16px}
p{margin:0}
a{color:var(--mark);text-decoration:none}a:hover{text-decoration:underline}
button{font:inherit;cursor:pointer;border:none;background:none;color:inherit}
:focus-visible{outline:2px solid var(--mark);outline-offset:2px;border-radius:3px}
.num{font-variant-numeric:tabular-nums}

#proto{position:sticky;top:0;z-index:100;background:var(--slate);color:#CBD5E1;padding:var(--s2) var(--s4);display:flex;gap:var(--s4);align-items:center;flex-wrap:wrap;font-size:12px}
#proto b{color:#fff;font-weight:600;margin-right:var(--s2)}
#proto .grp{display:flex;gap:var(--s1);align-items:center}
#proto .grp>span{color:#64748B;margin-right:var(--s1)}
#proto button{padding:3px 8px;border-radius:4px;color:#CBD5E1;white-space:nowrap}
#proto button:hover{background:#334155;color:#fff}
#proto button[aria-current="true"]{background:var(--mark);color:#fff}
.view{display:none}.view.on{display:block}

.shell{display:grid;grid-template-columns:200px 1fr;min-height:calc(100vh - 40px)}
.side{background:var(--white);border-right:1px solid var(--rule);padding:var(--s5) 0}
.brand{padding:0 var(--s5) var(--s5);display:flex;gap:var(--s2);align-items:center}
.brand .bt{font-weight:700;font-size:15px;letter-spacing:-.02em}
.nav a{display:flex;gap:var(--s3);align-items:center;padding:var(--s2) var(--s5);color:var(--quiet);font-size:14px}
.nav a:hover{background:var(--wash);text-decoration:none;color:var(--ink)}
.nav a[aria-current="page"]{color:var(--ink);font-weight:600;box-shadow:inset 3px 0 0 var(--mark);background:var(--wash)}
.main{padding:var(--s6) var(--s7);max-width:1240px}
.head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s5);margin-bottom:var(--s5);flex-wrap:wrap}
.sub{color:var(--quiet);font-size:14px;margin-top:2px}

.btn{display:inline-flex;gap:var(--s2);align-items:center;padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;transition:background .15s}
.btn.p{background:var(--slate);color:#fff}.btn.p:hover{background:#0F172A}
.btn.g{border:1px solid var(--rule);background:var(--white);color:var(--ink)}.btn.g:hover{background:var(--wash)}
.btn.d{border:1px solid #FCA5A5;background:var(--white);color:var(--flag)}.btn.d:hover{background:#FEF2F2}
.btn[disabled]{opacity:.4;cursor:not-allowed}
.btn.big{padding:14px 20px;font-size:16px;width:100%;justify-content:center}
.ico{width:16px;height:16px;flex:0 0 auto;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.stack{display:flex;gap:var(--s3);flex-wrap:wrap}

.panel{background:var(--white);border:1px solid var(--rule);border-radius:8px}
.panel>.ph{padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule);display:flex;justify-content:space-between;align-items:center;gap:var(--s4)}
.panel>.pb{padding:var(--s5)}

.rows{background:var(--white);border:1px solid var(--rule);border-radius:8px;overflow:hidden}
.row{display:grid;grid-template-columns:1fr 160px 170px 40px;gap:var(--s4);padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule);align-items:center}
.row:last-child{border-bottom:none}.row:hover{background:var(--wash)}
.row .t{font-weight:600}.row .m{color:var(--quiet);font-size:13px;margin-top:1px}
.tag{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;padding:3px 9px;border-radius:99px;border:1px solid var(--rule);color:var(--quiet);background:var(--white);white-space:nowrap}
.tag.act{border-color:#BFDBFE;background:#EFF6FF;color:#1D4ED8}
.tag.wait{border-color:#FDE68A;background:#FFFBEB;color:var(--warn)}
.tag.done{border-color:#BBF7D0;background:#F0FDF4;color:var(--ok)}
.tag.bad{border-color:#FCA5A5;background:#FEF2F2;color:var(--flag)}
.who{font-size:13px;color:var(--quiet)}.who b{color:var(--ink);font-weight:600}

.empty{text-align:center;padding:var(--s7) var(--s5);background:var(--white);border:1px solid var(--rule);border-radius:8px}
.empty .ph2{width:44px;height:44px;margin:0 auto var(--s4);color:#94A3B8}
.empty h3{margin-bottom:var(--s2)}
.empty p{color:var(--quiet);max-width:46ch;margin:0 auto var(--s5)}

.fld{margin-bottom:var(--s5)}
.fld label{display:block;font-size:14px;font-weight:600;margin-bottom:6px}
.fld .hint{font-size:13px;color:var(--quiet);margin-bottom:var(--s2)}
.fld .hint.warn{color:var(--warn)}
.fld .req{color:var(--flag);margin-left:3px}
/* ⚠️ 按 type 列举很容易漏。漏掉的那个 type 会渲染成浏览器原生小框 ——
   降级建单里唯一的必填项「企业邮箱」就这么变成了全页最小的控件，
   而页面自己写着它是「他认领这张单的钥匙」。 */
input[type=text],input[type=password],input[type=email],input[type=tel],input[type=number],input[type=url],input[type=date],select,textarea{width:100%;padding:10px 12px;border:1px solid var(--rule);border-radius:6px;font:inherit;font-size:15px;background:var(--white);color:var(--ink)}
textarea{min-height:120px;resize:vertical;line-height:1.7}
input:focus,select:focus,textarea:focus{outline:2px solid var(--mark);outline-offset:-1px;border-color:var(--mark)}
.err input,.err textarea{border-color:var(--flag);background:#FEF2F2}
.emsg{display:flex;gap:6px;align-items:flex-start;color:var(--flag);font-size:13px;margin-top:6px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4)}
.opt{font-size:13px;color:var(--quiet);font-weight:400}

.picker{position:relative}
.plist{border:1px solid var(--rule);border-radius:6px;margin-top:var(--s2);overflow:hidden;background:var(--white)}
.pitem{display:flex;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4);border-bottom:1px solid var(--rule);cursor:pointer}
.pitem:last-child{border-bottom:none}.pitem:hover{background:var(--wash)}
.pitem.sel{background:#EFF6FF}
.av{width:30px;height:30px;border-radius:50%;background:var(--wash);color:var(--quiet);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex:0 0 auto}
.pitem .pn{font-weight:600;font-size:14px}.pitem .pd{font-size:13px;color:var(--quiet)}
/* ⚠️ 作者样式无条件盖过 UA 的 [hidden]{display:none}，与优先级无关。
   .chosen{display:flex} 于是让一张设了 hidden 的「已选中」卡片照样显示 ——
   通讯录降级后，页面上留着一张姓名为空的蓝色对勾卡片，看上去像「已经选好人了」。
   凡是给 display 定值的类都会犯这个错，所以在这里一次性钉死。 */
[hidden]{display:none !important}
.chosen{display:flex;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4);border:1px solid #BFDBFE;background:#EFF6FF;border-radius:6px;margin-top:var(--s2)}

.share{display:flex;gap:var(--s2);align-items:center;padding:var(--s3) var(--s4);background:#EFF6FF;border:1px solid #BFDBFE;border-radius:6px;font-size:13px}
.share code{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:#1D4ED8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── 画像页 ── */
.gist{background:var(--white);border:1px solid var(--rule);border-left:3px solid var(--slate);border-radius:0 8px 8px 0;padding:var(--s4) var(--s5);margin-bottom:var(--s5)}
.gist .line{font-size:16px;font-weight:600;letter-spacing:-.01em}
.gist .line em{font-style:normal;color:var(--flag)}
.gist .meta{color:var(--quiet);font-size:13px;margin-top:var(--s1)}
.pf{display:grid;grid-template-columns:1fr 330px;gap:var(--s5);align-items:start}

.sec{background:var(--white);border:1px solid var(--rule);border-radius:8px;margin-bottom:var(--s4);overflow:hidden}
.sec>summary{padding:var(--s3) var(--s5);display:flex;justify-content:space-between;align-items:center;cursor:pointer;list-style:none;background:var(--wash);border-bottom:1px solid var(--rule)}
.sec>summary::-webkit-details-marker{display:none}
.sec .st{display:flex;gap:var(--s3);align-items:center;font-weight:600;font-size:15px}
.sec .cnt{color:var(--quiet);font-weight:400;font-size:13px}
.sec .sb{padding:var(--s4) var(--s5)}
.sec[open]>summary .chev{transform:rotate(90deg)}
.chev{transition:transform .15s;color:var(--quiet)}
.addbtn{font-size:13px;color:var(--mark);display:inline-flex;gap:5px;align-items:center}
.addbtn:hover{text-decoration:underline}

.kv{display:grid;grid-template-columns:120px 1fr;gap:var(--s2) var(--s4);font-size:14px}
.kv dt{color:var(--quiet)}.kv dd{margin:0}
.kv .chg{color:var(--warn);font-size:13px;margin-left:var(--s2)}

.item{border-left:3px solid var(--rule);padding:var(--s3) 0 var(--s3) var(--s4);margin-bottom:var(--s4)}
.item:last-child{margin-bottom:0}
.item.must{border-left-color:var(--slate)}
.item.bonus{border-left-color:#CBD5E1}
.item.tbd{border-left-color:var(--quiet);border-left-style:dashed}
.item.ai{border-left-color:var(--mark);border-left-style:dashed}
.item.hum{border-left-color:var(--ok);border-left-style:dotted}
.item.dis{border-left-color:var(--flag)}
.item .st2{font-size:15px;font-weight:600;line-height:1.45;margin-bottom:5px}
.item .facts{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:var(--s2)}
.item .why{color:var(--quiet);font-size:13.5px;margin-bottom:var(--s2)}
.item .why b{color:var(--ink);font-weight:600}
.quote{border-left:2px solid var(--rule);padding-left:var(--s3);margin:var(--s2) 0}
.quote .q{color:#475569;font-size:13.5px;line-height:1.6}
.quote .attr{margin-top:4px;font-size:12px;color:var(--quiet);display:flex;gap:var(--s3);flex-wrap:wrap}
.acts{display:flex;gap:var(--s3);margin-top:var(--s2)}
.acts button{font-size:13px;color:var(--quiet)}
.acts button:hover{color:var(--mark)}
.acts button.no:hover{color:var(--flag)}
.disbox{background:#FEF2F2;border:1px solid #FCA5A5;border-radius:6px;padding:var(--s2) var(--s3);font-size:13px;margin-top:var(--s2)}
.disbox b{color:var(--flag)}

.jd h4{margin:0 0 var(--s2);font-size:14px;font-weight:600}
.jd ol{margin:0 0 var(--s4);padding-left:20px;font-size:14px}
.jd li{margin-bottom:5px}

.chat{background:var(--white);border:1px solid var(--rule);border-radius:8px;position:sticky;top:56px;display:flex;flex-direction:column;max-height:calc(100vh - 110px)}
.chat .ch{padding:var(--s3) var(--s4);border-bottom:1px solid var(--rule);font-size:13px;font-weight:600;display:flex;justify-content:space-between;align-items:center}
.chat .ch .keep{font-weight:400;color:var(--quiet);font-size:12px}
.chat .cb{flex:1;overflow-y:auto;padding:var(--s4);display:flex;flex-direction:column;gap:var(--s3);min-height:200px}
/* AI 回复里会逐条列出改了什么，换行要留住 —— 不留的话所有条目挤成一行 */
.msg{font-size:13.5px;line-height:1.6;white-space:pre-line}
.msg.me{background:var(--wash);border-radius:8px;padding:var(--s2) var(--s3);align-self:flex-end;max-width:90%}
.msg.ai .r{color:var(--quiet);font-size:12px;margin-bottom:3px}
.msg .applied{color:var(--ok);font-weight:600}
.msg .rejected{color:var(--warn)}
.msg .day{text-align:center;color:var(--quiet);font-size:12px;padding:var(--s2) 0}
.chat .cf{padding:var(--s3);border-top:1px solid var(--rule);display:flex;gap:var(--s2)}
.chat .cf textarea{min-height:38px;height:38px;padding:8px 10px;font-size:14px}
.aside-note{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s5);position:sticky;top:56px}
.aside-note h3{margin-bottom:var(--s3)}
.aside-note p{color:var(--quiet);font-size:14px;margin-bottom:var(--s4)}

.prog{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s7) var(--s5);text-align:center}
.bar{height:4px;background:var(--wash);border-radius:99px;overflow:hidden;max-width:340px;margin:var(--s5) auto var(--s3)}
.bar i{display:block;height:100%;width:42%;background:var(--mark);border-radius:99px;animation:crawl 2.4s ease-in-out infinite}
@keyframes crawl{0%{width:18%}50%{width:64%}100%{width:18%}}
@media (prefers-reduced-motion:reduce){.bar i{animation:none;width:42%}}

.phone{max-width:400px;margin:var(--s6) auto;background:var(--white);border:1px solid var(--rule);border-radius:14px;overflow:hidden}
.phone .top{padding:var(--s5) var(--s5) var(--s4);border-bottom:1px solid var(--rule)}
.phone .top .kicker{font-size:13px;color:var(--quiet);margin-bottom:var(--s2)}
.phone .body{padding:var(--s5)}
.phone .foot{padding:var(--s4) var(--s5) var(--s5);display:flex;flex-direction:column;gap:var(--s3)}

.doc{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s7);max-width:820px}
.doc h1{font-size:22px;margin-bottom:var(--s1)}
.doc .dm{color:var(--quiet);font-size:13px;margin-bottom:var(--s6);padding-bottom:var(--s4);border-bottom:2px solid var(--slate)}
.doc h2{font-size:15px;margin:var(--s6) 0 var(--s3);padding-bottom:6px;border-bottom:1px solid var(--rule)}
.doc h2:first-of-type{margin-top:0}
.doc table{width:100%;border-collapse:collapse;font-size:14px}
.doc td,.doc th{padding:7px 10px;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top}
.doc th{color:var(--quiet);font-weight:500;width:130px}
.doc .diff{color:var(--warn);font-weight:600}
.doc ol{margin:0;padding-left:20px}.doc li{margin-bottom:var(--s3)}
.doc .note{background:var(--wash);border-radius:6px;padding:var(--s3) var(--s4);font-size:14px;color:#475569}

/* ── 画像条目：定稿文档式线性排版，点某条才展开该条的操作 ── */
.sechint{font-size:12px;font-weight:400;color:var(--quiet);margin-left:var(--s2)}
.doc ol.reqs{list-style:none;padding-left:0;counter-reset:r;margin:0 0 var(--s5)}
.doc ol.reqs>li{counter-increment:r;position:relative;margin-bottom:2px;
  padding:var(--s3) var(--s4) var(--s3) var(--s6);border-radius:6px;
  cursor:pointer;transition:background .12s}
.doc ol.reqs>li::before{content:counter(r);position:absolute;left:var(--s3);top:calc(var(--s3) + 2px);
  font-size:12px;line-height:1.6;color:var(--quiet);font-variant-numeric:tabular-nums}
.doc ol.reqs>li:hover{background:var(--wash)}
.doc ol.reqs>li.open{background:var(--wash)}
.doc ol.reqs>li.flag{box-shadow:inset 3px 0 0 var(--flag)}
.doc ol.reqs>li.aiitem{box-shadow:inset 3px 0 0 var(--mark)}
.doc ol.reqs>li.humitem{box-shadow:inset 3px 0 0 var(--ok)}
.rt{font-size:14.5px;line-height:1.65}
.rm{font-size:12.5px;color:var(--quiet);margin-top:2px}
.rm b{color:var(--slate);font-weight:600}
.rs{font-size:12.5px;line-height:1.7;color:#475569;margin-top:6px;
  border-left:2px solid var(--rule);padding-left:var(--s3)}
.ract{display:none;gap:var(--s2);align-items:center;flex-wrap:wrap;
  margin-top:var(--s3);padding-top:var(--s3);border-top:1px dashed var(--rule)}
.doc ol.reqs>li.open .ract{display:flex}
.ract button{font-size:12.5px;padding:4px 10px;border-radius:5px;
  border:1px solid var(--rule);background:var(--white);color:var(--ink)}
.ract button:hover{background:var(--wash);border-color:#CBD5E1}
.ract button.no{color:var(--flag);border-color:#FCA5A5}
.ract button.no:hover{background:#FEF2F2}
.ract .hintx{font-size:11.5px;color:var(--quiet);margin-left:auto}

.warnbox{display:flex;gap:var(--s3);padding:var(--s4);border-radius:6px;background:#FFFBEB;border:1px solid #FDE68A;font-size:14px;margin-bottom:var(--s4)}
.warnbox .ico{color:var(--warn);margin-top:2px}
.errbox{display:flex;gap:var(--s3);padding:var(--s4);border-radius:6px;background:#FEF2F2;border:1px solid #FCA5A5;font-size:14px}
.errbox .ico{color:var(--flag);margin-top:2px}
.okbox{display:flex;gap:var(--s3);padding:var(--s4);border-radius:6px;background:#F0FDF4;border:1px solid #BBF7D0;font-size:14px;margin-bottom:var(--s4)}
.okbox .ico{color:var(--ok);margin-top:2px}

.tsc{font-size:13px;line-height:1.8}
.tsc .seg{padding:var(--s2) 0;border-bottom:1px dashed var(--rule)}
.tsc .seg:target{background:#FFFBEB}
.tsc .sn{color:var(--quiet);font-size:12px;margin-right:var(--s2)}
.tsc mark{background:#FEF3C7;box-shadow:inset 0 -2px 0 #F59E0B;color:var(--ink);border-radius:2px;padding:0 1px}

/* ── 看原文浮窗 ── */
.src{font-size:12px;white-space:nowrap;margin-left:5px;color:var(--mark);
     border-bottom:1px dotted currentColor;padding-bottom:1px}
.src:hover{text-decoration:none;background:#EFF6FF;border-radius:2px}
.src[aria-expanded="true"]{background:#DBEAFE;border-radius:2px}
#srcpop{position:absolute;z-index:200;background:var(--white);border:1px solid var(--rule);
        border-radius:8px;box-shadow:0 10px 30px rgba(15,23,42,.16);overflow:hidden}
#srcpop .sph{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);
             padding:var(--s2) var(--s2) var(--s2) var(--s4);border-bottom:1px solid var(--rule);background:var(--wash)}
#srcpop .spt{font-size:12px;font-weight:600;color:var(--slate);display:flex;align-items:center;gap:6px}
#srcpop .spt .ico{width:14px;height:14px;color:var(--quiet)}
#srcpop .spx{padding:4px;border-radius:4px;color:var(--quiet);display:flex}
#srcpop .spx:hover{background:var(--rule);color:var(--ink)}
#srcpop .spx .ico{width:14px;height:14px}
#srcpop .spb{padding:var(--s3) var(--s4);max-height:42vh;overflow-y:auto}
#srcpop .sq+.sq{margin-top:var(--s3);padding-top:var(--s3);border-top:1px dashed var(--rule)}
#srcpop .sqn{display:block;font-size:11px;color:var(--quiet);margin-bottom:3px}
#srcpop .sq p{font-size:13.5px;line-height:1.75;color:var(--slate)}
#srcpop mark{background:#FEF3C7;box-shadow:inset 0 -2px 0 #F59E0B;color:var(--ink);border-radius:2px;padding:0 1px}
#srcpop .spf{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);
             padding:var(--s2) var(--s4);border-top:1px solid var(--rule);background:var(--paper)}
#srcpop .spm{font-size:11.5px;color:var(--quiet)}
#srcpop .splink{font-size:12px;color:var(--mark);font-weight:500;white-space:nowrap}
#srcpop .splink:hover{text-decoration:underline}


/* ── Tab ── */
.tabs{display:flex;border-bottom:1px solid var(--rule);margin-bottom:var(--s5);gap:var(--s1)}
.tab{padding:var(--s3) var(--s4);font-size:14px;font-weight:500;color:var(--quiet);
     border-bottom:2px solid transparent;margin-bottom:-1px;display:flex;gap:6px;align-items:center}
.tab:hover{color:var(--ink)}
.tab[aria-selected="true"]{color:var(--ink);font-weight:600;border-bottom-color:var(--mark)}
.tab .bdg{font-size:11px;padding:1px 6px;border-radius:99px;background:var(--wash);color:var(--quiet);font-weight:500}
.tab .bdg.new{background:#FEF3C7;color:var(--warn)}
.tab .bdg.n{background:#FEE2E2;color:var(--flag)}
.tabpanel{display:none}.tabpanel.on{display:block}

/* ── 划词评论 ── */
.anchor{background:#FEF3C7;box-shadow:inset 0 -2px 0 #F59E0B;cursor:pointer;border-radius:2px}
.anchor:hover{background:#FDE68A}
.cmt{background:#FFFBEB;border:1px solid #FDE68A;border-radius:6px;padding:var(--s3);margin-top:var(--s2);font-size:13px}
.cmt .ch2{display:flex;justify-content:space-between;gap:var(--s3);margin-bottom:5px;color:var(--warn);font-weight:600}
.cmt .frag{color:var(--quiet);font-style:normal;border-left:2px solid #FDE68A;padding-left:var(--s2);margin-bottom:5px;display:block}
.cmt.done{background:var(--wash);border-color:var(--rule)}
.cmt.done .ch2{color:var(--ok)}
.cmtbox{position:relative;background:var(--white);border:1px solid var(--mark);border-radius:8px;
        padding:var(--s3);margin-top:var(--s2);box-shadow:0 4px 12px rgba(15,23,42,.08)}
.cmtbox .sel{font-size:13px;color:var(--quiet);border-left:2px solid var(--mark);padding-left:var(--s2);margin-bottom:var(--s2)}
.cmtbox textarea{min-height:60px;font-size:14px}
.cmtbox .row2{display:flex;gap:var(--s2);justify-content:flex-end;margin-top:var(--s2)}

/* ── 时间线 ── */
.tl{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s5) var(--s5) var(--s3)}
.tlrow{display:grid;grid-template-columns:118px 20px 1fr;gap:var(--s3);padding-bottom:var(--s5)}
.tlrow .when{font-size:13px;color:var(--quiet);text-align:right;padding-top:1px}
.tlrow .dot{position:relative}
.tlrow .dot i{position:absolute;left:5px;top:6px;width:9px;height:9px;border-radius:50%;
              background:var(--white);border:2px solid var(--rule)}
.tlrow .dot::before{content:"";position:absolute;left:9px;top:14px;bottom:-14px;width:1px;background:var(--rule)}
.tlrow:last-child .dot::before{display:none}
.tlrow.mark .dot i{border-color:var(--mark)}
.tlrow.ok .dot i{border-color:var(--ok);background:var(--ok)}
.tlrow.warn .dot i{border-color:var(--warn)}
.tlrow .what{font-size:14px}
.tlrow .who2{font-weight:600}
.tlrow .det{color:var(--quiet);font-size:13px;margin-top:3px}
.tlrow .det .q2{border-left:2px solid var(--rule);padding-left:var(--s2);display:block;margin-top:4px}

@media print{
  #proto,.side,.tabs,.chat,.aside-note,.btn{display:none!important}
  .shell{grid-template-columns:1fr}.main{padding:0;max-width:none}
  .tabpanel{display:block!important}
  .sec{break-inside:avoid;border:none;margin-bottom:var(--s5)}
  .sec>summary{background:none;border-bottom:1px solid var(--slate);padding-left:0}
  .sec .sb{padding-left:0;padding-right:0}
}

@media(max-width:980px){
  .shell{grid-template-columns:1fr}.side{display:none}
  .main{padding:var(--s5) var(--s4)}.pf{grid-template-columns:1fr}
  .chat,.aside-note{position:static;max-height:none}
  .row{grid-template-columns:1fr;gap:var(--s2)}.two{grid-template-columns:1fr}
  .kv{grid-template-columns:100px 1fr}
}

/* 刚被改过的条目：进来时闪一下就淡出。
   AI 一次可能改好几条，没有这个标记用户只能拿一句「已应用 N 处改动」
   自己去列表里找差异（PRD R3 步 1「改动处高亮」）。
   动画只跑一次、2 秒内结束，不留常驻色块。 */
@keyframes touched-fade { from { background: #FEF3C7; } to { background: transparent; } }
.doc ol.reqs > li.touched { animation: touched-fade 2s ease-out 1; }
@media (prefers-reduced-motion: reduce) {
  .doc ol.reqs > li.touched { animation: none; background: #FEF3C7; }
}

/* 定稿文档要能在手机上读：表格自己横滚，页面不横滚。
   390px 实测表格 441px，整页跟着横向溢出。 */
.doc table { display: block; width: 100%; overflow-x: auto; }
@media print { .doc table { display: table; overflow-x: visible; } }


/* ════════════ v0.2.0 新增：简历进岗位与分析 ════════════
   以上是 v0.1.0 的 static/app.css；以下两段由 v0.3.0 从原型同步进来。 */

.unread{display:inline-block;min-width:18px;padding:0 5px;border-radius:99px;background:var(--flag);color:#fff;font-size:11px;line-height:18px;text-align:center;margin-left:auto}
.crumb{font-size:13px;color:var(--quiet);margin-bottom:var(--s3);display:flex;gap:6px;flex-wrap:wrap}
.crumb a{color:var(--quiet)}.crumb a:hover{color:var(--mark)}
.route{font-size:13px;color:#475569;margin-top:var(--s2);display:flex;gap:6px;align-items:flex-start;max-width:72ch}
.route .ico{width:14px;height:14px;margin-top:4px;color:var(--quiet)}
.btn.sm{padding:5px 12px;font-size:13px}
h2.lh{font-size:15px;margin:0 0 var(--s3);display:flex;gap:var(--s2);align-items:baseline}
h2.lh .cnt{color:var(--quiet);font-weight:400;font-size:13px}
.infobox{display:flex;gap:var(--s3);padding:var(--s3) var(--s4);border-radius:6px;background:#EFF6FF;border:1px solid #BFDBFE;font-size:13.5px;margin-bottom:var(--s4);color:#1E3A8A}
.infobox .ico{color:var(--mark);margin-top:3px}

/* ── 档位：三格信号条 + 文字 ──
   形状承载等级（几格亮），不只靠颜色；刻意不做成彩色胶囊，
   和「待决定 / 待约面」这类流程状态标签分开，一行里两者不会混。 */
.lvl{display:inline-flex;align-items:center;gap:7px;font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap}
.lvl .bars{display:inline-flex;align-items:flex-end;gap:2px;height:13px}
.lvl .bars i{display:block;width:4px;border-radius:1px;background:#D7DCE3}
.lvl .bars i:nth-child(1){height:5px}.lvl .bars i:nth-child(2){height:9px}.lvl .bars i:nth-child(3){height:13px}
.lvl.hi .bars i,.lvl.mid .bars i:nth-child(-n+2),.lvl.lo .bars i:nth-child(1){background:var(--slate)}
.lvl.lo{color:var(--quiet)}
.lvl.x{color:var(--flag)}
.lvl.x .ico{width:15px;height:15px;stroke-width:2}
.lvl.big{font-size:24px;gap:12px;letter-spacing:-.01em}
.lvl.big .bars{height:24px;gap:3px}
.lvl.big .bars i{width:7px;border-radius:2px}
.lvl.big .bars i:nth-child(1){height:9px}.lvl.big .bars i:nth-child(2){height:16px}.lvl.big .bars i:nth-child(3){height:24px}
.lvl.big.x .ico{width:26px;height:26px}

/* ── 逐条格：一格 = 一条必需要求 ──
   四种判断靠「填法」区分：实心 / 斜纹 / 空心 / 红底带叉，色弱也分得开。
   排列固定为 有支持 → 要核实 → 没写到 → 有反证，前两种合起来就是「找得到对应」。 */
.tally{display:inline-flex;gap:3px;vertical-align:middle}
.tally i{display:block;width:12px;height:12px;border-radius:2px}
.c-s{background:var(--slate)}
.c-v{background:repeating-linear-gradient(135deg,#F59E0B 0 1.5px,#FFFBEB 1.5px 4px);box-shadow:inset 0 0 0 1px #D97706}
.c-m{background:var(--white);box-shadow:inset 0 0 0 1.5px #B6BFCB}
.c-x{background:linear-gradient(45deg,transparent 40%,#fff 40% 60%,transparent 60%),linear-gradient(-45deg,transparent 40%,#fff 40% 60%,transparent 60%),var(--flag)}
.tally.big{gap:4px}
.tally.big button{display:block;width:28px;height:28px;border-radius:4px;padding:0}
.tally.big button:hover{outline:2px solid var(--mark);outline-offset:2px}
.tw{position:relative;display:inline-block;padding:8px 0 24px}
.tw .half{position:absolute;top:0;height:44px;width:0;border-left:1.5px dashed var(--ink)}
.tw .half span{position:absolute;top:100%;left:-24px;width:48px;text-align:center;font-size:11px;color:var(--quiet);margin-top:2px;white-space:nowrap}
.legend{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s4);font-size:12.5px;color:var(--quiet)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{display:block;width:11px;height:11px;border-radius:2px}

/* ── 单条判断标签 ── */
.vd{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;font-weight:600;white-space:nowrap}
.vd .ico{width:14px;height:14px;stroke-width:2}
.vd.s{color:var(--ok)}.vd.v{color:var(--warn)}.vd.m{color:var(--quiet)}.vd.x{color:var(--flag)}

/* ── 分析单顶部：档位是怎么来的 ── */
.verdict{background:var(--white);border:1px solid var(--rule);border-radius:8px;margin-bottom:var(--s4)}
.verdict.xx{border-color:#FCA5A5;box-shadow:inset 3px 0 0 var(--flag)}
.verdict .vt{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:var(--s5);padding:var(--s5)}
.verdict .cnts{font-size:13.5px;color:var(--quiet);margin-top:var(--s2)}
.verdict .cnts b{color:var(--ink);font-weight:600}
.verdict .calc{font-size:14px;color:#475569;margin-top:var(--s3);max-width:46ch}
.verdict .vr{display:flex;flex-direction:column;gap:var(--s2);align-items:flex-start}
.verdict .ai{border-top:1px solid var(--rule);background:var(--paper);padding:var(--s4) var(--s5)}
.verdict .ai .by{font-size:12px;color:var(--quiet);margin-bottom:4px}
.verdict .ai p{font-size:14.5px;line-height:1.75;max-width:68ch}
.rules{border-top:1px solid var(--rule);padding:0 var(--s5)}
.rules summary{font-size:13px;color:var(--mark);cursor:pointer;padding:var(--s3) 0;list-style:none;display:inline-flex;gap:6px;align-items:center}
.rules summary::-webkit-details-marker{display:none}
.rules[open] summary .chev{transform:rotate(90deg)}
.rules table{width:100%;border-collapse:collapse;font-size:13.5px;margin-bottom:var(--s3)}
.rules td{padding:7px 12px 7px 0;border-bottom:1px solid var(--rule);vertical-align:top}
.rules td:first-child{white-space:nowrap;width:1%}
.rules p{font-size:13px;color:var(--quiet);padding-bottom:var(--s4);max-width:70ch}

/* ── 分析单正文：逐条 ── */
.doc .vl{list-style:none;padding:0;margin:0 0 var(--s5)}
.doc .vl>li{position:relative;padding:var(--s3) var(--s4) var(--s3) 40px;border-radius:6px;margin-bottom:2px;transition:background .4s}
.doc .vl>li>.cell{position:absolute;left:13px;top:17px;width:14px;height:14px;border-radius:3px}
.doc .vl>li.hl{background:#EFF6FF}
.doc .vl .rm{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center;margin-top:4px}
.doc .vl .ex{font-size:13.5px;margin-top:6px;line-height:1.65}
.doc .vl>li>.cell.na{border-radius:50%;box-shadow:inset 0 0 0 1.5px #CBD5E1;background:var(--white)}
.doc .vl.light .rt{color:#475569}
.doc .vl.light .ex{color:var(--quiet)}

/* ── 你的决定 ── */
.decide{background:var(--white);border:1px solid var(--rule);border-radius:8px;position:sticky;top:56px}
.decide .dh{padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule)}
.decide .dh .sub{font-size:13px}
.decide .db{padding:var(--s4) var(--s5) var(--s5)}
.dch{display:flex;gap:var(--s3);align-items:flex-start;padding:10px var(--s3);border:1px solid var(--rule);border-radius:6px;margin-bottom:var(--s2);cursor:pointer}
.dch:hover{border-color:#CBD5E1}
.dch:has(input:checked){border-color:var(--slate);box-shadow:inset 0 0 0 1px var(--slate);background:var(--paper)}
.dch input{margin:5px 0 0;accent-color:var(--slate);flex:0 0 auto}
.dch b{display:block;font-size:14px;font-weight:600}
.dch small{display:block;font-size:12.5px;color:var(--quiet);line-height:1.5}
.dmore{margin-top:var(--s4)}
.dl{font-size:14px;font-weight:600;margin-bottom:6px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:var(--s4);padding:2px;border-radius:8px}
.chip{font-size:13px;padding:4px 11px;border:1px solid var(--rule);border-radius:99px;background:var(--white);color:var(--ink)}
.chip:hover{border-color:#94A3B8}
.chip[aria-pressed="true"]{background:var(--slate);border-color:var(--slate);color:#fff}
.chips.err{box-shadow:0 0 0 1px #FCA5A5;background:#FEF2F2}
.decide .fld{margin-bottom:var(--s4)}
.decide textarea{min-height:76px;font-size:14px}
.ddone{padding:var(--s5)}
.ddone .dres{display:flex;gap:var(--s2);align-items:center;font-size:16px;font-weight:600}
.ddone .dres .ico{color:var(--ok);width:18px;height:18px}
.ddone .dwho{font-size:13px;color:var(--quiet);margin-top:2px}
.ddone .dq{font-size:13.5px;color:#475569;border-left:2px solid var(--rule);padding-left:var(--s3);margin-top:var(--s3)}
.ddone .dnext{font-size:13px;color:var(--quiet);margin-top:var(--s4);padding-top:var(--s3);border-top:1px dashed var(--rule)}
.ddone .relink{font-size:13px;color:var(--mark);margin-top:var(--s3)}

/* ── 岗位候选人列表 ── */
.crows{background:var(--white);border:1px solid var(--rule);border-radius:8px;overflow:hidden}
.crow{display:grid;grid-template-columns:minmax(0,1fr) 104px 176px 136px 20px;gap:var(--s4);padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule);align-items:center;cursor:pointer}
.crow:last-child{border-bottom:none}.crow:hover{background:var(--wash)}
.crow .t{font-weight:600}
.crow .g{font-size:13px;color:var(--quiet);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crow .n2{font-size:12px;color:var(--quiet);margin-top:5px;font-variant-numeric:tabular-nums}
.crow .when{font-size:13px;color:var(--quiet);line-height:1.45}
.crow .when b{color:var(--ink);font-weight:600}
.crow .chv{color:var(--quiet)}
.minibar{height:3px;background:var(--wash);border-radius:99px;overflow:hidden;width:90px;margin-top:7px}
.minibar i{display:block;height:100%;width:40%;background:var(--mark);border-radius:99px;animation:crawl 2.4s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.minibar i{animation:none}}
.lhead{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--s3);align-items:center;margin:calc(-1 * var(--s2)) 0 var(--s4)}
.lhead .sub{margin:0}
.tabempty{padding:var(--s6) var(--s5);text-align:center;color:var(--quiet);font-size:14px;background:var(--white);border:1px solid var(--rule);border-radius:8px}

/* ── 上传 ── */
.drop{display:block;width:100%;border:1.5px dashed #B6BFCB;border-radius:8px;background:var(--white);padding:var(--s6) var(--s5);text-align:center;color:var(--ink)}
.drop:hover{border-color:var(--mark);background:#F8FBFF}
.drop .ph2{width:36px;height:36px;margin:0 auto var(--s3);color:var(--quiet);display:block}
.drop b{font-size:16px;font-weight:600}
.drop small{display:block;color:var(--quiet);font-size:13px;margin-top:4px}
.jchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:var(--s2)}
.qfiles{margin-top:var(--s4);border:1px solid var(--rule);border-radius:6px;overflow:hidden}
.qf{display:flex;gap:var(--s3);align-items:center;padding:var(--s2) var(--s4);border-bottom:1px solid var(--rule);font-size:14px}
.qf:last-child{border-bottom:none}
.qf>.ico{color:var(--quiet)}
.qf .sz{margin-left:auto;font-size:12.5px;color:var(--quiet);white-space:nowrap}
.qf.bad{background:#FFFBEB}.qf.bad .sz{color:var(--warn)}
.qf button{color:var(--quiet);padding:2px;display:flex}.qf button:hover{color:var(--flag)}

/* ── 上传结果 ── */
.frows{background:var(--white);border:1px solid var(--rule);border-radius:8px;overflow:hidden;margin-bottom:var(--s5)}
.frow{display:grid;grid-template-columns:190px minmax(0,1fr) auto;gap:var(--s4);padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule);align-items:start}
.frow:last-child{border-bottom:none}
.frow .fn{display:flex;gap:6px;align-items:flex-start;font-size:13px;color:var(--quiet);word-break:break-all;padding-top:2px}
.frow .fn .ico{margin-top:3px;width:14px;height:14px}
.frow .r1{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center}
.frow .r1 .t{font-weight:600}
.frow .r1 .to{font-size:14px}
.frow .why2{font-size:13px;color:var(--quiet);margin-top:3px;max-width:62ch}
.frow .bad2{font-size:13.5px;color:var(--ink);margin-top:3px;max-width:62ch}
.frow .dup{margin-top:var(--s2);font-size:13px;background:#FFFBEB;border:1px solid #FDE68A;border-radius:6px;padding:var(--s2) var(--s3);display:flex;flex-wrap:wrap;gap:var(--s2) var(--s3);align-items:center}
.frow .dup .ico{color:var(--warn);width:14px;height:14px}
.frow .fa{display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap;justify-content:flex-end}
.frow .fa select{width:auto;padding:6px 10px;font-size:14px}

/* ── 切换岗位弹窗 ── */
.scrim{position:fixed;inset:0;z-index:300;background:rgba(15,23,42,.38);display:flex;justify-content:center;align-items:flex-start;padding:14vh var(--s4) var(--s4);overflow-y:auto}
.dlg{background:var(--white);border-radius:10px;width:min(500px,100%);box-shadow:0 24px 60px rgba(15,23,42,.28)}
.dlg .dh{padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule)}
.dlg .db{padding:var(--s4) var(--s5)}
.dlg .df{padding:var(--s3) var(--s5);border-top:1px solid var(--rule);display:flex;justify-content:flex-end;gap:var(--s2)}
.jopt{display:flex;gap:var(--s3);align-items:flex-start;padding:var(--s3) var(--s4);border:1px solid var(--rule);border-radius:6px;margin-bottom:var(--s2);cursor:pointer}
.jopt:has(input:checked){border-color:var(--mark);background:#EFF6FF}
.jopt input{margin-top:5px;accent-color:var(--mark)}
.jopt b{font-weight:600}.jopt small{display:block;font-size:12.5px;color:var(--quiet)}
.jopt.cur{cursor:not-allowed;background:var(--paper);color:var(--quiet)}
.dlg .note2{font-size:13px;color:var(--quiet);margin-top:var(--s3)}

/* ── 简历原文 ── */
.cv .cvh{font-size:13px;font-weight:600;color:var(--quiet);margin:var(--s5) 0 var(--s1)}
.cv .cvh:first-child{margin-top:0}

/* 原型专用：点到没画的页面时给一句说明 */
#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--slate);color:#fff;font-size:13px;padding:8px 14px;border-radius:6px;z-index:400;box-shadow:0 8px 24px rgba(15,23,42,.2)}

/* ── 同一页两种身份：HR 能操作，业务负责人只能看 ── */
.owner-only{display:none}
[data-role="owner"] .owner-only{display:block}
[data-role="owner"] .hr-only{display:none}

@media(max-width:980px){
  .crow{grid-template-columns:1fr;gap:var(--s2)}
  .crow .chv{display:none}
  .frow{grid-template-columns:1fr}
  .frow .fa{justify-content:flex-start}
  .decide{position:static}
  .verdict .vt{flex-direction:column}
}

/* ════════════ v0.3.0 新增：岗位主页 · 候选人看板 · 状态流转 ════════════
   岗位主页的头部与进度条、候选人看板、候选人详情右侧的推进面板、每一面的评语。 */

/* ── 岗位主页头部 ── */
.jh{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s5);flex-wrap:wrap;margin-bottom:var(--s4)}
.jh .meta{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:13.5px;color:var(--quiet);margin-top:4px}
.jh .meta b{color:var(--ink);font-weight:600}
.jh .right{display:flex;gap:var(--s4);align-items:center;flex-wrap:wrap}
.hire{font-size:13px;color:var(--quiet);text-align:right;line-height:1.3}
.hire b{display:block;font-size:20px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}

/* ── 需求阶段进度条：五步本来就有先后，所以带编号 ── */
.steps{display:flex;list-style:none;margin:0 0 var(--s5);padding:0;background:var(--white);border:1px solid var(--rule);border-radius:8px;overflow:hidden}
.steps li{flex:1;display:flex;align-items:center;gap:10px;padding:var(--s3) var(--s4);color:var(--quiet);min-width:0}
.steps li+li{border-left:1px solid var(--rule)}
.steps .n{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:600;border:1.5px solid #CBD5E1;flex:0 0 auto;font-variant-numeric:tabular-nums}
.steps .n .ico{width:13px;height:13px;stroke-width:2.5}
.steps .l{min-width:0}
.steps .l b{display:block;font-weight:600;font-size:13.5px;white-space:nowrap}
.steps .l small{display:block;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.steps li.done{color:var(--ink)}
.steps li.done .n{background:var(--slate);border-color:var(--slate);color:#fff}
.steps li.cur{background:#EFF6FF;color:var(--ink);box-shadow:inset 0 -2px 0 var(--mark)}
.steps li.cur .n{border-color:var(--mark);color:var(--mark);background:var(--white)}
.steps li.cur small{color:#1D4ED8}

/* 基础信息区块：收起时一行摘要，点「编辑」展开 */
.bi{background:var(--white);border:1px solid var(--rule);border-radius:8px;margin-bottom:var(--s5)}
.bi .bih{display:flex;justify-content:space-between;align-items:center;gap:var(--s3);padding:var(--s3) var(--s5);border-bottom:1px solid var(--rule)}
.bi .bih h3{font-size:15px}
.bi .bib{padding:var(--s4) var(--s5)}
.bi .kv{grid-template-columns:96px 1fr 96px 1fr}
.bi .kv dd.miss{color:var(--quiet)}
.bi .kv dd .chg{display:block;margin:2px 0 0}
.askline{font-size:13px;color:var(--quiet);margin-top:var(--s3);padding-top:var(--s3);border-top:1px dashed var(--rule)}
.linkbtn{font-size:13px;color:var(--mark);display:inline;padding:0}
.linkbtn:hover{text-decoration:underline}
.linkbtn.no{color:var(--flag)}
.linkbtn.q{color:var(--quiet);text-decoration:underline}

/* ── 候选人看板：只看不拖，一列一个状态 ── */
.kb{display:flex;gap:var(--s3);overflow-x:auto;padding-bottom:var(--s3);align-items:flex-start}
.kcol{flex:1 0 196px;background:var(--wash);border-radius:8px;padding:var(--s2);min-height:140px}
.kcol>header{display:flex;justify-content:space-between;align-items:center;gap:var(--s2);padding:var(--s1) var(--s2) var(--s2);font-size:13.5px;font-weight:600}
.kcol>header .c{font-size:12px;font-weight:500;color:var(--quiet);background:var(--white);border-radius:99px;padding:0 8px;font-variant-numeric:tabular-nums}
.kcol.fold{flex:0 0 118px;cursor:pointer}
.kcol.fold .kcard,.kcol.fold .kempty{display:none}
.kcol.fold>header{flex-direction:column;align-items:flex-start}
.kcol .unfold{display:none;font-size:12px;font-weight:500;color:var(--mark)}
.kcol.fold .unfold{display:block}
.kcard{display:block;width:100%;text-align:left;background:var(--white);border:1px solid var(--rule);border-radius:6px;padding:10px var(--s3);margin-bottom:var(--s2)}
.kcard:hover{border-color:#94A3B8}
.kcard .nm{display:flex;justify-content:space-between;align-items:center;gap:var(--s2);font-weight:600;font-size:14.5px}
.kcard .nm .lvl{font-size:12.5px}
.kcard .tk{display:flex;align-items:center;gap:var(--s2);margin-top:7px;font-size:12px;color:var(--quiet);font-variant-numeric:tabular-nums}
.kcard .tally i{width:10px;height:10px}
.kcard .sm{font-size:12.5px;color:#475569;line-height:1.55;margin-top:6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.kcard .mk{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.mkx{font-size:11.5px;line-height:18px;padding:0 7px;border-radius:4px;background:var(--wash);color:#475569;white-space:nowrap;display:inline-flex;align-items:center;gap:4px}
.mkx .ico{width:12px;height:12px}
.mkx.warn{background:#FFFBEB;color:var(--warn)}
.mkx.bad{background:#FEF2F2;color:var(--flag)}
.mkx.ok{background:#F0FDF4;color:var(--ok)}
.mkx.act{background:#EFF6FF;color:#1D4ED8}
.kempty{font-size:12.5px;color:var(--quiet);padding:var(--s4) var(--s2);text-align:center}
.kcard .minibar{width:100%;margin-top:9px}

/* ── 候选人详情：左边 Tab，右边「当前这一步」 ── */
.cdl{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--s5);align-items:start}
.act{background:var(--white);border:1px solid var(--rule);border-radius:8px;position:sticky;top:56px}
.act .ah{padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule)}
.act .ah .k{font-size:12.5px;color:var(--quiet)}
.act .ah .v{font-size:18px;font-weight:600;letter-spacing:-.01em;margin-top:2px}
.act .ah .v2{font-size:13.5px;color:#475569;margin-top:4px}
.act .ab{padding:var(--s4) var(--s5);display:flex;flex-direction:column;gap:var(--s2)}
.act .ab .btn{justify-content:center}
.act .ab .gl{font-size:12.5px;color:var(--quiet);margin-top:var(--s2)}
.act .ab .gl:first-child{margin-top:0}
.act .ab .row3{display:flex;gap:var(--s2)}
.act .ab .row3 .btn{flex:1}
.act .af{padding:var(--s3) var(--s5);border-top:1px dashed var(--rule);font-size:12.5px;color:var(--quiet);line-height:1.6}
.act .af b{color:var(--ink);font-weight:600}
.act .errbox{margin:var(--s4) var(--s5) 0}
.act .dq{font-size:13.5px;color:#475569;border-left:2px solid var(--rule);padding-left:var(--s3);margin-top:var(--s2)}

/* 每一面 */
.rinfo{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s5);align-items:center;background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s4) var(--s5);margin-bottom:var(--s4);font-size:14px}
.rinfo .ico{color:var(--quiet)}
.rinfo .t2{display:flex;gap:var(--s2);align-items:center}
.rinfo .sp{margin-left:auto}
.verify{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s4) var(--s5);margin-bottom:var(--s4)}
.verify h3{font-size:14px;margin-bottom:var(--s2)}
.verify ol{margin:0;padding-left:1.2em;font-size:14px}
.verify li{margin-bottom:4px}
.verify li small{color:var(--quiet);font-size:12.5px;margin-left:6px}
.cm2{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s4) var(--s5);margin-bottom:var(--s3)}
.cm2 .by2{display:flex;justify-content:space-between;gap:var(--s3);font-size:13px;color:var(--quiet);margin-bottom:6px}
.cm2 .by2 b{color:var(--ink);font-weight:600}
.cm2 p{font-size:14.5px;line-height:1.75;white-space:pre-line}
.cm2.mine{border-color:#BFDBFE}
.cm2.none{border-style:dashed;background:transparent;color:var(--quiet);font-size:13.5px}
.cm2 textarea{min-height:96px;font-size:14px}
.cm2 .row2{display:flex;justify-content:flex-end;gap:var(--s2);margin-top:var(--s2)}
.edited{font-size:12px;color:var(--warn)}

/* 画像与 JD：需求池里的入口只占位置，产品里不出现 */
.resv{display:flex;flex-wrap:wrap;gap:var(--s2);align-items:center;margin-bottom:var(--s4);padding:var(--s3) var(--s4);border:1px dashed #CBD5E1;border-radius:8px;font-size:13px;color:var(--quiet)}
.resv .btn{border-style:dashed;color:var(--quiet);cursor:not-allowed}

/* 弹窗里的原因分组 */
.cg{margin-bottom:var(--s3)}
.cg .cgl{font-size:12.5px;color:var(--quiet);margin-bottom:6px}
.dlg .fld{margin-bottom:var(--s4)}
.dlg .fld:last-child{margin-bottom:0}
.dlg .two{gap:var(--s3)}
.dlg p.lead{font-size:14px;color:#475569;margin-bottom:var(--s4)}
.chk{display:flex;gap:var(--s3);align-items:flex-start;padding:var(--s2) 0;border-bottom:1px solid var(--rule);font-size:14px}
.chk:last-child{border-bottom:none}
.chk input{margin-top:5px;accent-color:var(--mark)}
.chk small{display:block;font-size:12.5px;color:var(--quiet)}

/* 岗位列表的分组 */
.lg{margin-bottom:var(--s5)}
.lg>h2{font-size:15px;margin:0 0 var(--s3);display:flex;gap:var(--s2);align-items:baseline}
.lg>h2 .cnt{color:var(--quiet);font-weight:400;font-size:13px}
.row.jr{grid-template-columns:minmax(0,1fr) 190px minmax(0,260px) 20px}
.row .step2{font-size:13px;color:var(--quiet)}
.row .step2 b{color:var(--ink);font-weight:600}
.cols{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:13px;color:var(--quiet);font-variant-numeric:tabular-nums}
.cols b{color:var(--ink);font-weight:600}
details.lg>summary{font-size:15px;font-weight:600;cursor:pointer;list-style:none;display:inline-flex;gap:var(--s2);align-items:center;margin-bottom:var(--s3)}
details.lg>summary::-webkit-details-marker{display:none}
details.lg[open]>summary .chev{transform:rotate(90deg)}

/* 候选人页的行 */
.prow{grid-template-columns:minmax(0,1fr) 150px 120px 110px 20px}

/* ── 候选人行与详情标题里的岗位：岗位要和名字一样一眼看见 ── */
.jtag{display:inline-flex;align-items:center;font-size:12px;font-weight:500;line-height:19px;padding:0 8px;border-radius:4px;background:#EFF6FF;color:#1D4ED8;white-space:nowrap}
.jtag.no{background:var(--wash);color:var(--quiet)}
.crow .t{display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap}
h1 .hjob{font-weight:600;color:var(--mark);box-shadow:inset 0 -2px 0 #BFDBFE}
h1 .hjob:hover{box-shadow:inset 0 -2px 0 var(--mark)}
h1 .hsep{color:#CBD5E1;font-weight:400}

/* 人工新增的条目：对不上谈话原文，只有 HR 自己写的原因 */
.nosrc{display:block;font-size:12px;color:var(--quiet);margin-top:3px}
.doc ol.reqs>li.hl{background:#EFF6FF}

/* 上传简历：归到哪个岗位 */
.picks{display:flex;flex-direction:column;gap:var(--s2)}
.pk{display:flex;gap:var(--s3);align-items:flex-start;border:1px solid var(--rule);border-radius:6px;padding:var(--s3) var(--s4);cursor:pointer;background:var(--white)}
.pk:has(input:checked){border-color:#BFDBFE;background:#F8FBFF}
.pk input{margin-top:4px;accent-color:var(--mark);flex:0 0 auto}
.pk b{font-size:14px;font-weight:600}
.pk small{display:block;font-size:12.5px;color:var(--quiet);line-height:1.6;margin-top:2px}
.pk select{margin-top:var(--s2);width:auto;max-width:100%;padding:5px 10px;font-size:14px}

@media(max-width:980px){
  .cdl{grid-template-columns:1fr}
  .act{position:static}
  .steps{flex-direction:column}
  .steps li+li{border-left:none;border-top:1px solid var(--rule)}
  .bi .kv{grid-template-columns:96px 1fr}
  .row.jr,.prow{grid-template-columns:1fr}
}

/* ── v0.3.2 沟通记录（原型 new.css 同名段）── */
/* 沟通记录 */
.notes .nf{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s4) var(--s5);margin-bottom:var(--s4)}
.notes .nf textarea{width:100%;min-height:88px;padding:8px 10px;border:1px solid var(--rule);border-radius:6px;font:inherit;font-size:14px;resize:vertical}
.notes .nf .row2{display:flex;justify-content:space-between;align-items:center;margin-top:var(--s2);font-size:12.5px;color:var(--quiet)}
.notes .nf .row2 .over{color:var(--flag)}
.note{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:var(--s3) var(--s5);margin-bottom:var(--s3)}
.note .nb{display:flex;justify-content:space-between;gap:var(--s3);font-size:13px;color:var(--quiet);margin-bottom:4px;flex-wrap:wrap}
.note .nb b{color:var(--ink);font-weight:600}
.note .nb .ops{display:flex;gap:var(--s3)}
.note p{white-space:pre-wrap;font-size:14.5px}
.note textarea{width:100%;min-height:80px;padding:8px 10px;border:1px solid var(--rule);border-radius:6px;font:inherit;font-size:14px}

/* ── v0.3.2 那一面的会议区（原型 new.css 同名段）── */
/* 会议区：沿用 .rinfo 的白底框，拆成三行 —— 时间 / 会议 / 参会人 */
.meet{background:var(--white);border:1px solid var(--rule);border-radius:8px;margin-bottom:var(--s4);font-size:14px}
.meet .mr{display:flex;gap:var(--s3);align-items:center;padding:var(--s3) var(--s5);flex-wrap:wrap}
.meet .mr+.mr{border-top:1px solid var(--rule)}
.meet .mr .ico{color:var(--quiet)}
.meet .mr .grow{flex:1;min-width:0;display:flex;gap:var(--s2);align-items:baseline;flex-wrap:wrap}
.meet .mr .link{font-variant-numeric:tabular-nums;word-break:break-all}
.meet .mr .who{color:var(--quiet);font-size:13.5px}
.meet .mr .who b{color:var(--ink);font-weight:500}
.meet .mr.bad{background:#FEF2F2}
.meet .mr.bad .ico{color:var(--flag)}
.meet .mr.bad b{color:var(--flag)}
.meet .mr.soft{background:var(--wash)}
.meet .invite{display:block;width:calc(100% - 2 * var(--s5));margin:0 var(--s5) var(--s4);padding:var(--s3) var(--s4);background:var(--wash);border:none;border-radius:6px;font:inherit;font-size:14px;line-height:1.75;resize:none;min-height:96px}
.meet .copied{color:var(--ok);font-size:13px;display:inline-flex;gap:4px;align-items:center}
.meet form.paste{display:flex;gap:var(--s2);flex:1;min-width:260px}
.meet form.paste input{flex:1;min-width:0;padding:6px 10px;border:1px solid var(--rule);border-radius:6px;font:inherit;font-size:14px}

.meet .emsg{margin:0}

/* ── v0.3.2 那一面的提纲与只读页（原型 new.css 同名段）── */
/* 提纲：题目本身就是先后顺序，所以编号；每题下面一条细线，把出处连回画像与简历 */
.outline{background:var(--white);border:1px solid var(--rule);border-radius:8px;margin-bottom:var(--s4)}
.outline .oh{display:flex;justify-content:space-between;align-items:center;gap:var(--s3);padding:var(--s4) var(--s5) 0;flex-wrap:wrap}
.outline .oh h3{font-size:16px}
.outline .oh h3 small{font-weight:400;color:var(--quiet);font-size:13.5px;margin-left:6px}
.outline .ohint{padding:4px var(--s5) 0;color:var(--quiet);font-size:13px}
.outline .ob{padding:var(--s4) var(--s5)}
.outline .ofoot{padding:var(--s3) var(--s5) var(--s4);border-top:1px solid var(--rule)}
.qs{list-style:none;margin:0;padding:0;counter-reset:q}
.qs>li{counter-increment:q;display:grid;grid-template-columns:28px minmax(0,1fr);column-gap:var(--s2);padding:var(--s3) 0}
.qs>li+li{border-top:1px dashed var(--rule)}
.qs>li::before{content:counter(q);grid-row:1 / span 2;font-weight:600;color:var(--quiet);font-variant-numeric:tabular-nums;line-height:1.55;font-size:15px}
.qs .qt{font-size:15.5px;line-height:1.6;color:var(--ink)}
.qs .qw{margin-top:6px;border-left:2px solid var(--rule);padding-left:var(--s3);font-size:13.5px;color:#475569;display:grid;gap:2px}
.qs .qw dt{display:inline;color:var(--quiet)}
.qs .qw dd{display:inline;margin:0}
.qs .qw div{line-height:1.65}
.qs .qw q{quotes:"「" "」";color:var(--ink)}
.qs .x{color:var(--flag);display:inline-flex;gap:3px;align-items:center;margin-left:6px;font-size:12.5px}
.qs .x .ico{width:13px;height:13px}
.qs .fresh{color:var(--mark);font-size:12.5px;margin-left:6px}
.qs>li.just{background:linear-gradient(90deg,#EFF6FF,transparent 70%);border-radius:6px}
.ochat{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s2);align-items:end}
.ochat textarea{width:100%;min-height:44px;padding:8px 10px;border:1px solid var(--rule);border-radius:6px;font:inherit;font-size:14px;resize:vertical}
.omsg{font-size:13.5px;margin-top:var(--s2);color:#475569}
.omsg.ok{color:var(--ok)}
.omsg.warn{color:var(--warn)}
.olog{margin-top:var(--s3);font-size:13px;color:var(--quiet)}
.olog summary{cursor:pointer;width:max-content}
.olog ol{list-style:none;padding:0;margin:var(--s2) 0 0;display:grid;gap:6px}
.olog li b{color:var(--ink);font-weight:500}
.ostate{display:flex;gap:var(--s3);align-items:flex-start;padding:var(--s5);font-size:14px}
.ostate .ico{margin-top:3px;color:var(--quiet)}
.ostate.bad .ico{color:var(--flag)}
.ostate p+p{margin-top:4px}
.newmat{display:flex;gap:var(--s3);align-items:center;justify-content:space-between;flex-wrap:wrap;margin:var(--s3) var(--s5) 0;padding:var(--s2) var(--s3);border-radius:6px;background:#FFFBEB;border:1px solid #FDE68A;font-size:13.5px;color:#78350F}

/* 提纲只读页：手机上一页看完，打印时去掉按钮 */
.olone{max-width:680px;margin:0 auto;padding:var(--s5) var(--s4) var(--s7)}
.olone .ohd{margin-bottom:var(--s4)}
.olone .ohd h1{font-size:21px}
.olone .ohd .sub{margin-top:4px}
.olone .meta{display:grid;gap:4px;font-size:14px;margin:var(--s3) 0 var(--s4);padding:var(--s3) var(--s4);background:var(--white);border:1px solid var(--rule);border-radius:8px}
.olone .meta .link{word-break:break-all}
.olone .qs>li{grid-template-columns:24px minmax(0,1fr)}
.olone .qs .qt{font-size:16.5px}
.olone .tools{display:flex;gap:var(--s2);margin-top:var(--s5)}
@media print{
  .olone .tools,.olone .noprint{display:none!important}
  .olone{max-width:none;padding:0}
  .qs>li{break-inside:avoid}
}
