:root{
  --bg:#F3F5F7;--surface:#FFFFFF;--sunken:#EAEEF2;--ink:#17212B;--muted:#5F6D7A;--rule:#D8DEE4;--rule-strong:#B9C3CD;
  --accent:#0B6E8A;--accent-ink:#0B6E8A;--accent-soft:#DFEFF4;
  --hi:#B42318;--hi-soft:#FBE9E7;--mid:#B54708;--mid-soft:#FCEFE3;--lo:#6B7280;--lo-soft:#EDEFF2;
  --ok:#067647;--ok-soft:#E3F3EA;--warn:#8A5A00;--warn-soft:#FFF4D6;--current:#B42318;
  --letter:#FBFAF7;--shadow:0 1px 2px rgba(23,33,43,.06),0 6px 18px rgba(23,33,43,.06);
  --sans:"IBM Plex Sans","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",system-ui,sans-serif;
  --serif:"IBM Plex Serif","Songti SC","SimSun","Noto Serif CJK SC",Georgia,serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#0E141A;--surface:#151D25;--sunken:#1B252F;--ink:#E4EAF0;--muted:#98A6B3;--rule:#26323E;--rule-strong:#3A4856;
  --accent:#4FB6CC;--accent-ink:#7CCBDC;--accent-soft:#143641;
  --hi:#F28B82;--hi-soft:#3A1F1C;--mid:#F2B27A;--mid-soft:#3A2A1A;--lo:#A3AEB9;--lo-soft:#232D37;
  --ok:#7BD3A0;--ok-soft:#173226;--warn:#F0C674;--warn-soft:#3A3116;--current:#F28B82;
  --letter:#1A2129;--shadow:0 1px 2px rgba(0,0,0,.4),0 6px 18px rgba(0,0,0,.35);
}}
*{box-sizing:border-box}
html{font-size:15px}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.55;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
a{color:var(--accent-ink)}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
[hidden]{display:none!important}

/* 顶栏 */
.top{position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--rule);padding:.55rem 1.25rem;display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}
.top h1{font-size:1.02rem;font-weight:600;margin:0;letter-spacing:.01em;white-space:nowrap}
.top .meta{color:var(--muted);font-size:.82rem}
.stats{display:flex;gap:.4rem;flex-wrap:wrap}
.stat{border:1px solid var(--rule);border-radius:6px;padding:.1rem .55rem;font-size:.8rem;background:var(--surface);cursor:pointer;display:inline-flex;gap:.35rem;align-items:baseline}
.stat b{font-family:var(--mono);font-weight:500;font-size:.95rem}
.stat.hi b{color:var(--hi)}
.stat[aria-pressed="true"]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}
.chips{display:flex;gap:.35rem;flex-wrap:wrap}
.chip{border:1px solid var(--rule);background:var(--surface);border-radius:999px;padding:.1rem .6rem;font-size:.8rem;cursor:pointer;display:inline-flex;gap:.3rem;align-items:center}
.chip b{font-weight:500;font-family:var(--mono)}
.chip[aria-pressed="true"]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}
.top .grow{flex:1}
.top input[type=search]{border:1px solid var(--rule-strong);border-radius:6px;padding:.3rem .6rem;background:var(--surface);min-width:12rem;font-size:.85rem}
.top select{border:1px solid var(--rule-strong);border-radius:6px;padding:.3rem .5rem;background:var(--surface);font-size:.85rem}
.btn{border:1px solid var(--rule-strong);background:var(--surface);border-radius:6px;padding:.32rem .75rem;font-size:.84rem;cursor:pointer;display:inline-flex;gap:.4rem;align-items:center;white-space:nowrap}
.btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.primary:hover{filter:brightness(1.08);color:#fff}
.btn.danger:hover{border-color:var(--hi);color:var(--hi)}
.btn.sm{padding:.15rem .5rem;font-size:.78rem}
.btn[disabled]{opacity:.5;cursor:default}
.linkish{background:none;border:0;color:var(--accent-ink);cursor:pointer;font-size:.84rem;padding:0}

/* 两栏 */
.shell{display:grid;grid-template-columns:320px minmax(0,1fr);min-height:calc(100vh - 52px)}
.list{border-right:1px solid var(--rule);background:var(--surface);overflow:auto;max-height:calc(100vh - 52px);position:sticky;top:52px}
.list .empty{padding:1.5rem 1rem;color:var(--muted);font-size:.9rem}
.row{display:grid;grid-template-columns:4px 1fr;gap:.6rem;padding:.55rem .8rem .55rem .55rem;border-bottom:1px solid var(--rule);cursor:pointer;width:100%;text-align:left;background:none;border-left:0;border-right:0;border-top:0}
.row:hover{background:var(--sunken)}
.row[aria-current="true"]{background:var(--accent-soft)}
.row.done{opacity:.62}
.stripe{border-radius:2px;background:var(--lo)}
.stripe.高{background:var(--hi)}.stripe.中{background:var(--mid)}
.row .l1{display:flex;justify-content:space-between;gap:.5rem;font-size:.76rem;color:var(--muted)}
.row .l1 .n{font-family:var(--mono)}
.row .subj{font-size:.88rem;line-height:1.35;margin:.12rem 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.row .l3{display:flex;gap:.35rem;align-items:center;font-size:.74rem;color:var(--muted);flex-wrap:wrap}
.tier,.st{display:inline-block;border-radius:4px;padding:0 .4rem;font-size:.72rem;line-height:1.55;background:var(--lo-soft);color:var(--lo);white-space:nowrap}
.tier.需回复{background:var(--accent-soft);color:var(--accent-ink)}
.tier.已回复但有遗漏项{background:var(--warn-soft);color:var(--warn)}
.tier.已回复无需动作,.tier.无需回复{background:var(--ok-soft);color:var(--ok)}
.st.sent{background:var(--ok-soft);color:var(--ok)}.st.snoozed{background:var(--warn-soft);color:var(--warn)}.st.skipped,.st.closed{background:var(--lo-soft);color:var(--lo)}.st.open{background:var(--accent-soft);color:var(--accent-ink)}
.flag{display:inline-block;border-radius:4px;padding:0 .35rem;font-size:.7rem;line-height:1.5;background:var(--hi-soft);color:var(--hi);white-space:nowrap}
.flag.soft{background:var(--warn-soft);color:var(--warn)}
.gdot{width:.55rem;height:.55rem;border-radius:50%;display:inline-block;margin-left:auto}
.gdot.可直接发{background:var(--ok)}.gdot.需小改{background:var(--mid)}.gdot.需重写{background:var(--hi)}

/* 详情 */
.detail{padding:1.1rem 1.8rem 4rem;max-width:1100px}
.detail .empty{color:var(--muted);padding:2rem 0}
.head{border-bottom:1px solid var(--rule);padding-bottom:.9rem;margin-bottom:1rem}
.head .kicker{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;color:var(--muted);font-size:.8rem;margin-bottom:.25rem}
.pri{display:inline-flex;align-items:center;gap:.3rem;font-weight:500}
.pri::before{content:"";width:.6rem;height:.6rem;border-radius:2px;background:var(--lo)}
.pri.高{color:var(--hi)}.pri.高::before{background:var(--hi)}
.pri.中{color:var(--mid)}.pri.中::before{background:var(--mid)}
.head h2{font-size:1.3rem;font-weight:600;line-height:1.3;margin:.1rem 0 .5rem;text-wrap:balance}
.facts{display:grid;grid-template-columns:auto 1fr;gap:.15rem 1rem;font-size:.86rem;margin:0}
.facts dt{color:var(--muted);white-space:nowrap}
.facts dd{margin:0;min-width:0;overflow-wrap:anywhere}
.facts select{border:1px solid var(--rule-strong);border-radius:5px;padding:.1rem .4rem;background:var(--surface);font-size:.82rem}
.toolbar{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center;margin:.8rem 0 0}
.menu{position:relative;display:inline-block}
.menu .pop{position:absolute;top:110%;left:0;background:var(--surface);border:1px solid var(--rule-strong);border-radius:6px;box-shadow:var(--shadow);padding:.3rem;display:none;z-index:6;min-width:11rem}
.menu.open .pop{display:block}
.menu .pop button{display:block;width:100%;text-align:left;background:none;border:0;padding:.35rem .6rem;border-radius:4px;cursor:pointer;font-size:.85rem}
.menu .pop button:hover{background:var(--sunken)}
.menu .pop input{width:100%;border:1px solid var(--rule-strong);border-radius:4px;padding:.25rem .4rem;margin:.2rem 0;background:var(--surface)}
.section{margin:1.4rem 0}
.eyebrow{font-size:.74rem;letter-spacing:.09em;color:var(--muted);font-weight:500;margin:0 0 .5rem;display:flex;align-items:center;gap:.6rem}
.eyebrow::after{content:"";flex:1;height:1px;background:var(--rule)}
.flags{display:grid;gap:.45rem;margin:0 0 1rem}
.note{border-left:3px solid var(--hi);background:var(--hi-soft);padding:.45rem .8rem;border-radius:0 6px 6px 0;font-size:.88rem}
.note.warn{border-color:var(--warn);background:var(--warn-soft)}
.note.ok{border-color:var(--ok);background:var(--ok-soft);color:var(--ok)}
.letter{background:var(--letter);border:1px solid var(--rule);border-radius:8px;box-shadow:var(--shadow);overflow:hidden}
.letter .bar{display:flex;gap:.5rem;align-items:center;padding:.5rem .9rem;border-bottom:1px solid var(--rule);background:var(--surface);font-size:.8rem;color:var(--muted);flex-wrap:wrap}
.letter .bar .subjline{flex:1;min-width:12rem;font-family:var(--mono);font-size:.8rem;color:var(--ink);overflow-wrap:anywhere;border:0;background:transparent;padding:.15rem 0}
.letter .bar .subjline:focus{background:var(--sunken);border-radius:4px}
.letter pre,.letter textarea{margin:0;padding:1rem 1.2rem 1.2rem;font-family:var(--serif);font-size:1rem;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere;max-width:72ch;width:100%;border:0;background:transparent;display:block}
.letter textarea{min-height:16rem;resize:vertical;outline:none}
.letter.editing{border-color:var(--accent)}
.letter.none{padding:.8rem 1rem;color:var(--muted);font-size:.9rem}
ul.clean{margin:.2rem 0 0;padding-left:1.2rem}
ul.clean li{margin:.2rem 0}
.cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(18rem,1fr));gap:1rem 1.5rem}
.cols h4{margin:0 0 .3rem;font-size:.86rem;font-weight:600}
.cols .wide{grid-column:1 / -1}
.ev{display:inline-block;font-family:var(--mono);font-size:.72rem;border:1px solid var(--rule-strong);border-radius:4px;padding:0 .3rem;margin-left:.2rem;color:var(--accent-ink);cursor:pointer;background:var(--surface);line-height:1.5;vertical-align:1px}
.ev:hover,.ev[aria-expanded="true"]{background:var(--accent-soft);border-color:var(--accent)}
.ev.tpl{color:var(--muted);cursor:default;border-style:dashed}
.evbox{margin:.5rem 0 0;border:1px solid var(--rule);border-radius:6px;background:var(--sunken);padding:.6rem .8rem;font-size:.84rem}
.evbox .evmeta{color:var(--muted);font-family:var(--mono);font-size:.74rem;margin-bottom:.25rem}
.evbox pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font-family:inherit;max-height:16rem;overflow:auto}
table{border-collapse:collapse;width:100%;font-size:.85rem}
th,td{text-align:left;vertical-align:top;padding:.38rem .55rem;border-bottom:1px solid var(--rule)}
th{color:var(--muted);font-weight:500;font-size:.76rem;letter-spacing:.03em}
.tbl{overflow-x:auto;border:1px solid var(--rule);border-radius:6px;background:var(--surface)}
td.t{font-family:var(--mono);white-space:nowrap;color:var(--muted)}
tr.cur td{background:var(--hi-soft)}
tr.cur td.t{color:var(--current);font-weight:500}
.src{display:inline-block;font-size:.72rem;color:var(--muted);border:1px solid var(--rule);border-radius:4px;padding:0 .35rem;white-space:nowrap}
.conf{color:var(--hi);font-weight:500}
.ship{border:1px solid var(--rule);border-radius:8px;background:var(--surface);padding:.85rem 1rem;margin:.7rem 0}
.ship h4{margin:0 0 .5rem;font-size:.93rem;display:flex;gap:.6rem;align-items:baseline}
.ship h4 .mono{color:var(--accent-ink)}
.kv{display:grid;grid-template-columns:auto 1fr auto;gap:.22rem .9rem;font-size:.85rem;align-items:baseline}
.kv .k{color:var(--muted);white-space:nowrap}
.kv .v{min-width:0;overflow-wrap:anywhere}
.sub{font-size:.8rem;color:var(--muted);margin:.6rem 0 .3rem}
.more{background:none;border:0;color:var(--accent-ink);cursor:pointer;font-size:.8rem;padding:.3rem 0}
details.raw{border:1px solid var(--rule);border-radius:6px;background:var(--surface);padding:.4rem .9rem;margin-bottom:.5rem}
details.raw summary{cursor:pointer;font-size:.86rem;color:var(--muted)}
details.raw pre{white-space:pre-wrap;overflow-wrap:anywhere;font-family:var(--mono);font-size:.8rem;line-height:1.5;max-height:28rem;overflow:auto;margin:.5rem 0}
.grade{border:1px solid var(--rule);border-radius:8px;background:var(--surface);padding:.85rem 1rem;display:grid;gap:.55rem}
.grade .opts{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}
.grade label{border:1px solid var(--rule-strong);border-radius:999px;padding:.2rem .75rem;cursor:pointer;font-size:.86rem;display:inline-flex;gap:.4rem;align-items:center}
.grade input[type=radio]{accent-color:var(--accent)}
.grade label:has(input:checked){background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}
.grade textarea{width:100%;min-height:3rem;border:1px solid var(--rule-strong);border-radius:6px;padding:.45rem .6rem;background:var(--surface);font-size:.86rem;resize:vertical}
.grade .hint{font-size:.76rem;color:var(--muted)}
.hist{font-size:.8rem;color:var(--muted)}
.hist li{margin:.15rem 0}
.nav{display:flex;gap:.5rem;justify-content:space-between;margin-top:1.4rem}
.toast{position:fixed;left:50%;bottom:1.5rem;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:.5rem .9rem;border-radius:6px;font-size:.88rem;opacity:0;pointer-events:none;transition:opacity .2s;z-index:20}
.toast.show{opacity:1}
.toast.err{background:var(--hi);color:#fff}

/* 登录 / 设置 页 */
.center{min-height:100vh;display:grid;place-items:center;padding:1rem}
.card{background:var(--surface);border:1px solid var(--rule);border-radius:10px;box-shadow:var(--shadow);padding:1.5rem 1.6rem;width:100%;max-width:24rem}
.card h1{font-size:1.15rem;margin:0 0 .2rem}
.card p{color:var(--muted);font-size:.86rem;margin:0 0 1rem}
.field{display:grid;gap:.25rem;margin:.6rem 0}
.field label{font-size:.8rem;color:var(--muted)}
.field input{border:1px solid var(--rule-strong);border-radius:6px;padding:.45rem .6rem;background:var(--surface)}
.err{color:var(--hi);font-size:.84rem;min-height:1.2em}
.page{max-width:980px;margin:0 auto;padding:1.2rem 1.5rem 4rem}
.page h2{font-size:1.05rem;margin:1.6rem 0 .6rem}
.page .box{background:var(--surface);border:1px solid var(--rule);border-radius:8px;padding:1rem 1.2rem}
.page .box p{margin:.3rem 0;font-size:.9rem}
.page input[type=text],.page input[type=password],.page input[type=number]{border:1px solid var(--rule-strong);border-radius:6px;padding:.35rem .55rem;background:var(--surface);font-size:.88rem}
code.tok{font-family:var(--mono);font-size:.82rem;background:var(--sunken);padding:.15rem .4rem;border-radius:4px;overflow-wrap:anywhere}
@media (max-width:860px){
  .shell{grid-template-columns:1fr}
  .list{position:static;max-height:38vh;border-right:0;border-bottom:1px solid var(--rule)}
  .detail{padding:1rem 1rem 3rem}
}
@media (prefers-reduced-motion:reduce){.toast{transition:none}}

/* 工作类型页签 */
.tabs{display:inline-flex;border:1px solid var(--rule-strong);border-radius:8px;overflow:hidden;background:var(--surface)}
.tab{border:0;background:none;padding:.35rem .9rem;font-size:.88rem;cursor:pointer;display:inline-flex;gap:.4rem;align-items:baseline;border-right:1px solid var(--rule)}
.tab:last-child{border-right:0}
.tab b{font-family:var(--mono);font-weight:500;font-size:.8rem;color:var(--muted)}
.tab[aria-pressed="true"]{background:var(--accent);color:#fff}
.tab[aria-pressed="true"] b{color:#fff}
/* 回访列表分组 */
.grp{position:sticky;top:0;z-index:1;background:var(--sunken);border-bottom:1px solid var(--rule);padding:.3rem .8rem;font-size:.78rem;font-weight:600;color:var(--muted);letter-spacing:.03em;display:flex;gap:.4rem;align-items:baseline}
.grp b{font-family:var(--mono);font-weight:500}
.row .subj.why{color:var(--ink);font-size:.84rem}
/* 催办清单 */
.board{padding:1rem 1.5rem 4rem;max-width:1400px}
.board .empty{padding:2rem 0;color:var(--muted)}
.btoolbar{display:flex;gap:.8rem;align-items:center;flex-wrap:wrap;background:var(--surface);border:1px solid var(--rule);border-radius:8px;padding:.5rem .9rem;margin-bottom:1rem;font-size:.86rem}
.btoolbar .hint{color:var(--muted);font-size:.8rem;margin-left:auto}
.bgroup{margin:0 0 1.2rem}
.bgroup h3{font-size:.95rem;font-weight:600;margin:0 0 .45rem;display:flex;gap:.5rem;align-items:baseline}
.bgroup h3 b{font-family:var(--mono);font-weight:500;color:var(--muted);font-size:.85rem}
.btable td{vertical-align:middle}
.btable td.ck{width:1.6rem}
.btable td.why{max-width:28rem;font-size:.84rem}
.btable td.dates{white-space:normal;font-size:.78rem;color:var(--muted)}
.btable td.acts{white-space:nowrap;text-align:right}
.btable tr.done td{opacity:.55}
.stripe.inl{display:inline-block;width:4px;height:1.2rem;vertical-align:middle}
.bdetail td{background:var(--sunken)}
.bdet{display:grid;grid-template-columns:1fr 1fr;gap:1rem 1.5rem;padding:.4rem .2rem}
@media (max-width:860px){.bdet{grid-template-columns:1fr}.btable td.why{max-width:none}}
