/* ============================================================
   华夏心灵 EAP 工作台 · 设计系统
   VI：科技蓝 #1E40AF 主色 · 深蓝侧栏 · logo红仅作点缀 · 宋体标题
   ============================================================ */
:root{
  /* 主色 · 科技蓝（压深） */
  --brand:#1E40AF;--brand-d:#1E3A8A;--brand-dd:#0B1E3F;--brand-l:#E8EEFB;--brand-mid:#B9C9EE;
  /* 点缀 · 红（仅用于告警/突出） */
  --red:#C8102E;--red-d:#8B0016;--red-l:#FDF0F0;--red-mid:#E7C8CD;
  --gold:#C9A961;--gold-d:#A88744;
  /* 中性 */
  --ink:#1F2A37;--muted:#6B7785;--line:#E7E5E4;--bg:#F7F5F3;--card:#fff;
  /* 语义（降饱和以显沉稳） */
  --ok:#2E7D53;--ok-l:#EAF3EE;
  --warn:#B8761F;--warn-l:#FBF1E1;
  --risk:#A02020;--risk-l:#FAEAEA;
  --crisis:#6B0F1A;--crisis-l:#F5E0E3;
  /* 字体 */
  --serif:"Source Han Serif SC","Noto Serif SC","Songti SC","SimSun",serif;
  --sans:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",-apple-system,"Segoe UI",sans-serif;
  --mono:"JetBrains Mono","SFMono-Regular",Consolas,"Liberation Mono",monospace;
  /* 形状 */
  --r:6px;--r-lg:8px;
  --shadow:0 1px 2px rgba(31,42,55,.05),0 1px 3px rgba(31,42,55,.07);
  --shadow-l:0 10px 34px rgba(31,42,55,.14);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--sans);background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
a{color:inherit;text-decoration:none}
h1,h2,h3,.serif{font-family:var(--serif)}
svg.ic{width:1em;height:1em;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none;vertical-align:-.12em}

/* ---------- 布局 ---------- */
.app{display:grid;grid-template-columns:238px 1fr;min-height:100vh}
.deco{height:3px;background:linear-gradient(90deg,var(--brand) 0 62%,var(--red) 62% 84%,var(--gold) 84% 100%)}

/* ---------- 侧栏 ---------- */
.side{background:linear-gradient(180deg,var(--brand-dd) 0%,var(--brand-d) 100%);color:#e8eef7;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;border-right:1px solid rgba(0,0,0,.18)}
.brand{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:20px 18px 16px;border-bottom:1px solid rgba(255,255,255,.1)}
.brand .logoimg{height:36px;width:auto;display:block;object-fit:contain}
.brand .brandsub{font-size:11px;opacity:.75;letter-spacing:1.5px;font-family:var(--serif)}
.nav{padding:10px 10px;flex:1;overflow:auto}
.nav .grp{font-size:11px;opacity:.5;padding:14px 10px 6px;letter-spacing:2px}
.nav a{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:var(--r);margin:2px 0;color:#d7e2f5;font-weight:500;transition:.15s;font-size:13.5px}
.nav a .ic{width:17px;height:17px;opacity:.9}
.nav a:hover{background:rgba(255,255,255,.08)}
.nav a.on{background:rgba(255,255,255,.14);color:#fff;box-shadow:inset 3px 0 0 var(--gold)}
.nav a .badge{margin-left:auto;background:var(--red);color:#fff;font-size:11px;border-radius:4px;padding:1px 6px;font-weight:700;font-family:var(--mono)}
.side-foot{padding:14px 18px;font-size:11px;opacity:.65;border-top:1px solid rgba(255,255,255,.1);line-height:1.9}

/* ---------- 顶栏 ---------- */
.main{display:flex;flex-direction:column;min-width:0}
.top{background:#fff;border-bottom:1px solid var(--line);padding:0 24px;height:62px;display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:20}
.crumb{font-weight:700;font-size:16px;font-family:var(--serif);letter-spacing:.5px}
.crumb small{display:block;font-weight:400;font-size:11px;color:var(--muted);font-family:var(--sans);letter-spacing:0}
.bread{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}
.bread .ic{width:12px;height:12px}
.search{margin-left:8px;flex:1;max-width:300px;position:relative}
.search input{width:100%;padding:8px 12px 8px 34px;border:1px solid var(--line);border-radius:var(--r);background:#faf9f8;font-size:13px}
.search input:focus{outline:none;border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px var(--brand-l)}
.search .ic{position:absolute;left:11px;top:9px;width:15px;height:15px;color:var(--muted)}
.top-r{margin-left:auto;display:flex;align-items:center;gap:14px}
.clock{font-family:var(--mono);font-size:12px;color:var(--muted);text-align:right;line-height:1.35}
.clock b{display:block;color:var(--ink);font-weight:600;font-size:13px}
.who{display:flex;align-items:center;gap:9px;padding-left:14px;border-left:1px solid var(--line)}
.who .nm{font-size:13px;font-weight:600;line-height:1.2;text-align:right}
.who .rl{font-size:11px;color:var(--brand-d);font-weight:600}
.me{width:36px;height:36px;border-radius:var(--r);background:var(--brand);color:#fff;display:grid;place-items:center;font-weight:700;font-family:var(--serif);font-size:16px}
.iconbtn{width:36px;height:36px;border-radius:var(--r);display:grid;place-items:center;color:var(--muted);position:relative}
.iconbtn:hover{background:var(--brand-l);color:var(--brand)}
.iconbtn .ic{width:18px;height:18px}
.iconbtn .dot{position:absolute;top:7px;right:8px;width:7px;height:7px;background:var(--brand);border-radius:50%;border:2px solid #fff}

/* ---------- 内容区 ---------- */
.body{padding:22px 24px 0;overflow:auto;flex:1}
.page{display:none;animation:fade .25s ease}
.page.on{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.ph{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:16px;gap:12px;flex-wrap:wrap}
.ph h2{font-size:20px;letter-spacing:.5px}
.ph p{color:var(--muted);font-size:13px;margin-top:3px}
.ph .acts{display:flex;gap:8px;flex-wrap:wrap}

/* ---------- 按钮 ---------- */
.btn{padding:8px 14px;border-radius:var(--r);font-weight:600;font-size:13px;display:inline-flex;align-items:center;gap:7px;transition:.15s;border:1px solid transparent;position:relative}
.btn .ic{width:15px;height:15px}
.btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.btn-p{background:var(--brand);color:#fff;box-shadow:0 1px 2px rgba(139,0,22,.25)}
.btn-p:hover{background:var(--brand-d)}
.btn-p:active{transform:translateY(1px)}
.btn-o{background:#fff;border-color:var(--line);color:var(--ink)}
.btn-o:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-l)}
.btn-gold{background:transparent;border-color:var(--gold);color:var(--gold-d)}
.btn-gold:hover{background:var(--gold);color:#fff;border-color:var(--gold)}
.btn-red{background:var(--red);color:#fff;box-shadow:0 1px 2px rgba(139,0,22,.25)}
.btn-red:hover{background:var(--red-d)}
.btn-red:active{transform:translateY(1px)}
.btn-sm{padding:5px 10px;font-size:12px;border-radius:5px}
.btn[disabled]{opacity:.55;cursor:not-allowed;pointer-events:none}
.btn.loading{color:transparent!important;pointer-events:none}
.btn.loading::after{content:"";position:absolute;left:50%;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite}
.btn-o.loading::after,.btn-gold.loading::after{border-color:rgba(139,0,22,.25);border-top-color:var(--brand)}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- 卡片 ---------- */
.grid{display:grid;gap:14px}
.g-2{grid-template-columns:2fr 1fr}.g-2e{grid-template-columns:1fr 1fr}.g-3{grid-template-columns:repeat(3,1fr)}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:18px}
.card-title{display:flex;align-items:center;gap:9px;font-size:15px;margin-bottom:2px;letter-spacing:.3px;font-family:var(--serif);font-weight:700}
.card-title::before{content:"";width:3px;height:15px;background:var(--brand);border-radius:2px}
.card .sub{color:var(--muted);font-size:12px;margin-bottom:14px;padding-left:12px}
.chart-wrap{position:relative;height:250px}
.chart-wrap.sm{height:210px}

/* ---------- KPI ---------- */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:16px 18px;box-shadow:var(--shadow);border-top:3px solid var(--brand);position:relative}
.kpi.k-warn{border-top-color:var(--crisis)}
.kpi.k-ok{border-top-color:var(--ok)}
.kpi.k-info{border-top-color:var(--gold)}
.kpi .lab{color:var(--muted);font-size:12.5px;display:flex;align-items:center;gap:7px}
.kpi .lab .ic{width:15px;height:15px;color:var(--brand-d)}
.kpi .val{font-size:28px;font-weight:800;margin:8px 0 4px;letter-spacing:-.5px;font-family:var(--serif)}
.kpi .delta{font-size:12px;display:flex;align-items:center;gap:4px}
.kpi .delta .ic{width:12px;height:12px}
.delta.up{color:var(--ok)}.delta.down{color:var(--crisis)}.delta.flat{color:var(--muted)}

/* ---------- 表格 ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{text-align:left;color:#4a5568;font-weight:600;font-size:12px;padding:11px 12px;border-bottom:2px solid var(--brand-mid);white-space:nowrap;background:#faf7f6;letter-spacing:.3px}
.tbl td{padding:11px 12px;border-bottom:1px solid #f0edeb;vertical-align:middle}
.tbl tbody tr:nth-child(even){background:#fbfaf9}
.tbl tbody tr:hover td{background:var(--brand-l)}
.tbl tr.click{cursor:pointer}
.cid{font-weight:700;font-family:var(--mono);font-size:12.5px;letter-spacing:-.2px}
.muted{color:var(--muted);font-size:12px}
.num{font-family:var(--mono)}

/* ---------- 标签（克制矩形） ---------- */
.chip{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:600;white-space:nowrap;border:1px solid transparent}
.chip .d{width:6px;height:6px;border-radius:50%}
.s-low{background:var(--ok-l);color:var(--ok);border-color:#cfe3d6}
.s-mid{background:var(--warn-l);color:var(--warn);border-color:#eeddc0}
.s-high{background:var(--risk-l);color:var(--risk);border-color:#e6c9c9}
.s-crisis{background:var(--crisis-l);color:var(--crisis);border-color:#dcb3ba;font-weight:700}
.st-new{background:#eef2f7;color:#3b5a7a;border-color:#d5dde8}
.st-run{background:var(--brand-l);color:var(--brand-d);border-color:var(--brand-mid)}
.st-sup{background:#f4eef7;color:#6a3d8f;border-color:#ddd0e6}
.st-close{background:#f0efed;color:#6b7785;border-color:#ddd9d4}
.st-done{background:var(--ok-l);color:var(--ok);border-color:#cfe3d6}
.st-miss{background:var(--risk-l);color:var(--risk);border-color:#e6c9c9}

/* ---------- 筛选 ---------- */
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;align-items:center}
.filters select,.filters input{padding:7px 10px;border:1px solid var(--line);border-radius:var(--r);font-size:13px;background:#fff;font-family:inherit}
.filters select:focus,.filters input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-l)}
.seg{display:inline-flex;background:#f2efed;border-radius:var(--r);padding:3px;border:1px solid var(--line)}
.seg button{padding:6px 13px;border-radius:4px;font-size:12.5px;font-weight:600;color:var(--muted)}
.seg button.on{background:#fff;color:var(--brand-d);box-shadow:var(--shadow)}
.seg button:focus-visible{outline:2px solid var(--brand);outline-offset:1px}

/* ---------- 抽屉 ---------- */
.mask{position:fixed;inset:0;background:rgba(31,42,55,.5);opacity:0;pointer-events:none;transition:.2s;z-index:40;backdrop-filter:blur(2px)}
.mask.on{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;height:100vh;width:520px;max-width:94vw;background:#fff;box-shadow:var(--shadow-l);transform:translateX(100%);transition:.28s cubic-bezier(.4,0,.2,1);z-index:50;display:flex;flex-direction:column}
.drawer.on{transform:none}
.drawer .dh{padding:18px 22px 0;border-bottom:1px solid var(--line);background:linear-gradient(180deg,var(--brand-l),#fff)}
.drawer .dh .top-row{display:flex;justify-content:space-between;align-items:flex-start;padding-bottom:14px}
.drawer .dh h3{font-size:17px;letter-spacing:.5px}
.drawer .dh .muted{margin-top:3px;font-family:var(--mono);font-size:11.5px}
.x{width:32px;height:32px;border-radius:var(--r);color:var(--muted);display:grid;place-items:center}
.x:hover{background:#f2efed;color:var(--brand)}
.x .ic{width:18px;height:18px}
.tabs{display:flex;gap:2px}
.tabs button{padding:9px 14px;font-size:13px;font-weight:600;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs button:hover{color:var(--brand-d)}
.tabs button.on{color:var(--brand);border-bottom-color:var(--brand)}
.drawer .db{padding:18px 22px;overflow:auto;flex:1}
.tab-pane{display:none}.tab-pane.on{display:block}
.drawer .df{padding:14px 22px;border-top:1px solid var(--line);display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;background:#faf9f8}
.sec{margin-bottom:20px}
.sec .t{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:1px;margin-bottom:9px;text-transform:uppercase;display:flex;align-items:center;gap:8px}
.sec .t::after{content:"";flex:1;height:1px;background:var(--line)}
.kv{display:grid;grid-template-columns:88px 1fr;gap:8px 12px;font-size:13px}
.kv .k{color:var(--muted)}
.sess{border-left:2px solid var(--brand-mid);padding-left:14px;margin-left:4px;position:relative}
.sess .item{position:relative;padding-bottom:14px}
.sess .item::before{content:"";position:absolute;left:-20px;top:4px;width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid var(--brand)}
.sess .item .tm{font-size:11.5px;color:var(--muted);font-family:var(--mono)}
.note{background:#faf9f8;border:1px solid var(--line);border-radius:var(--r);padding:10px 12px;font-size:12.5px;margin-top:5px;color:#374250;line-height:1.6}
.priv{background:#fdf6e8;border:1px solid #ecdcb8;color:#7a5a1a;border-radius:var(--r);padding:10px 12px;font-size:12.5px;display:flex;gap:8px;align-items:flex-start;margin-bottom:16px;line-height:1.6}
.priv .ic{width:15px;height:15px;margin-top:1px;color:var(--gold-d)}
.priv.red{background:var(--risk-l);border-color:#e6c9c9;color:#7a1a1a}
.priv.red .ic{color:var(--risk)}
.priv.blue{background:#eef2f7;border-color:#d5dde8;color:#2a4f86}
.priv.blue .ic{color:#3b5a7a}

/* ---------- 状态机 ---------- */
.machine{display:flex;align-items:center;margin:6px 0 4px;padding:14px 4px 6px}
.machine .m{flex:1;text-align:center;font-size:11.5px;color:var(--muted);position:relative;font-weight:600}
.machine .m .nd{width:26px;height:26px;border-radius:50%;background:#f0efed;color:#9aa3ad;display:grid;place-items:center;margin:0 auto 6px;font-size:12px;font-weight:700;position:relative;z-index:2;border:2px solid #f0efed;font-family:var(--mono)}
.machine .m .nd .ic{width:13px;height:13px}
.machine .m::after{content:"";position:absolute;top:13px;left:50%;width:100%;height:2px;background:#e7e5e4;z-index:1}
.machine .m:last-child::after{display:none}
.machine .m.done .nd{background:var(--ok);color:#fff;border-color:var(--ok)}
.machine .m.done{color:var(--ok)}
.machine .m.done::after{background:var(--ok)}
.machine .m.act .nd{background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-l)}
.machine .m.act{color:var(--brand-d)}

/* ---------- 危机卡 ---------- */
.risk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:14px}
.risk-card{background:#fff;border:1px solid var(--line);border-left-width:4px;border-radius:var(--r-lg);padding:16px;box-shadow:var(--shadow)}
.risk-card.lv-crisis{border-left-color:var(--crisis)}
.risk-card.lv-high{border-left-color:var(--risk)}
.risk-card.lv-mid{border-left-color:var(--warn)}
.risk-card .rh{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.risk-card .rt{font-weight:700;font-size:14px;display:flex;align-items:center;gap:7px;font-family:var(--serif)}
.risk-card .rt .ic{width:16px;height:16px;color:var(--crisis)}
.sla{font-family:var(--mono);font-weight:700;font-size:13px;color:var(--crisis);letter-spacing:-.5px}
.sla.warn{color:var(--warn)}
.sla.critical{animation:pulse 1.1s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
.steps{display:flex;margin:12px 0 6px}
.steps .s{flex:1;text-align:center;font-size:10.5px;color:var(--muted);position:relative;font-weight:600}
.steps .s .nd{width:20px;height:20px;border-radius:50%;background:#f0efed;color:#9aa3ad;display:grid;place-items:center;margin:0 auto 4px;font-size:10px;font-weight:700;position:relative;z-index:2;font-family:var(--mono)}
.steps .s::after{content:"";position:absolute;top:10px;left:50%;width:100%;height:2px;background:#e7e5e4;z-index:1}
.steps .s:last-child::after{display:none}
.steps .s.done .nd{background:var(--ok);color:#fff}.steps .s.done{color:var(--ok)}.steps .s.done::after{background:var(--ok)}
.steps .s.act .nd{background:var(--crisis);color:#fff;box-shadow:0 0 0 3px var(--crisis-l)}.steps .s.act{color:var(--crisis)}

/* ---------- 排班 ---------- */
.cal{display:grid;grid-template-columns:66px repeat(5,1fr);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:#fff}
.cal .hh{background:#faf7f6;font-size:12px;font-weight:600;color:#4a5568;text-align:center;padding:10px 4px;border-bottom:1px solid var(--brand-mid)}
.cal .slot{min-height:64px;border-bottom:1px solid #f0edeb;border-right:1px solid #f0edeb;padding:5px}
.cal .time{font-size:11px;color:var(--muted);text-align:right;padding:8px 6px;border-bottom:1px solid #f0edeb;border-right:1px solid var(--line);height:64px;font-family:var(--mono)}
.appt{border-radius:5px;padding:5px 7px;font-size:11px;margin-bottom:4px;line-height:1.4;cursor:pointer;border-left:3px solid;background:#fff}
.appt .at{font-weight:700;font-family:var(--mono);font-size:10.5px}
.appt.video{background:#eef2f7;border-left-color:#3b5a7a}
.appt.face{background:var(--brand-l);border-left-color:var(--brand)}
.appt.phone{background:#f4eef7;border-left-color:#6a3d8f}
.appt.done{opacity:.55}
.load-row{display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:13px}.load-row .nm{width:64px;font-weight:600}
.bar{flex:1;height:8px;background:#f0efed;border-radius:4px;overflow:hidden;border:1px solid var(--line)}.bar>i{display:block;height:100%;background:var(--brand)}
.bar>i.mid{background:var(--warn)}.bar>i.hi{background:var(--crisis)}

/* ---------- Toast ---------- */
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(20px);background:#1F2A37;color:#fff;padding:11px 18px;border-radius:var(--r);font-size:13px;box-shadow:var(--shadow-l);opacity:0;pointer-events:none;transition:.25s;z-index:80;display:flex;align-items:center;gap:9px;max-width:80vw}
.toast .ic{width:16px;height:16px}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.ok{background:var(--ok)}.toast.warn{background:var(--warn)}.toast.err{background:var(--crisis)}

/* ---------- 其他 ---------- */
.pill-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.pill{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:7px 14px;font-size:12.5px;font-weight:600;color:var(--muted);display:flex;align-items:center;gap:6px}
.pill b{color:var(--brand-d);font-weight:800;font-family:var(--mono);font-size:13px}
.empty{text-align:center;color:var(--muted);padding:44px;font-size:13px}
.empty .ic{width:32px;height:32px;color:var(--brand-mid);margin-bottom:8px}
textarea.in{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);font-family:inherit;font-size:13px;resize:vertical;min-height:70px;background:#fff}
textarea.in:focus,input.in:focus,select.in:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-l)}
input.in,select.in{padding:9px 11px;border:1px solid var(--line);border-radius:var(--r);font-size:13px;width:100%;background:#fff;font-family:inherit}
.f2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.fld label{display:block;font-size:12px;font-weight:600;margin-bottom:5px;color:#4a5568}
.fld label .req{color:var(--brand);margin-left:2px}
.fld .hint{font-size:11px;color:var(--muted);margin-top:4px}
.fld .ferr{font-size:11.5px;color:var(--risk);margin-top:4px;display:none}
.fld.bad input.in,.fld.bad textarea.in,.fld.bad select.in{border-color:var(--risk);background:#fffafa}
.fld.bad .ferr{display:block}
.spin{position:fixed;inset:0;background:rgba(247,245,243,.7);display:grid;place-items:center;z-index:90;color:var(--brand-d);font-weight:600;font-family:var(--serif);letter-spacing:1px;grid-auto-flow:row;align-content:center;gap:12px;text-align:center}
.spin::after{content:"";width:26px;height:26px;border:3px solid var(--brand-mid);border-top-color:var(--brand);border-radius:50%;animation:spin .7s linear infinite;display:block;margin:0 auto}

/* ---------- 页脚 ---------- */
.foot{margin-top:26px;padding:18px 24px 22px;border-top:1px solid var(--line);background:#fff;color:var(--muted);font-size:12px;line-height:1.9}
.foot .fl{display:flex;gap:18px;flex-wrap:wrap;align-items:center}
.foot a{color:var(--muted);border-bottom:1px dotted transparent;padding-bottom:1px}
.foot a:hover{color:var(--brand-d);border-bottom-color:var(--brand-d)}
.foot .sep{width:1px;height:12px;background:var(--line)}
.foot .hot{color:var(--brand-d);font-weight:700;font-family:var(--mono)}
.foot .cp{margin-top:6px;font-size:11px;opacity:.85}

/* ---------- 服务漏斗 ---------- */
.funnel{display:flex;flex-direction:column;gap:8px;padding-top:4px}
.funnel .fr{display:flex;align-items:center;gap:12px}
.funnel .fr .fl-l{width:72px;font-size:12.5px;color:#4a5568;text-align:right;flex:none}
.funnel .fr .fl-b{height:30px;border-radius:5px;display:flex;align-items:center;padding:0 12px;color:#fff;font-weight:700;font-family:var(--mono);font-size:13px;white-space:nowrap;transition:width .5s ease}
.funnel .fr .fl-r{font-size:11.5px;color:var(--muted)}

/* ---------- 覆盖率条 ---------- */
.cov-row{display:flex;align-items:center;gap:12px;margin-bottom:12px;font-size:13px}
.cov-row:last-child{margin-bottom:0}
.cov-row .cn{width:150px;flex:none;color:#374250}
.cov-row .cb{flex:1;height:20px;background:#f0efed;border-radius:5px;overflow:hidden;border:1px solid var(--line);position:relative}
.cov-row .cb>i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),var(--brand-d));transition:width .5s ease}
.cov-row .cv{width:52px;text-align:right;font-family:var(--mono);font-weight:700;color:var(--brand-d)}

/* ---------- 三层干预卡 ---------- */
.tier{border:1px solid var(--line);border-radius:var(--r-lg);padding:16px 18px;background:linear-gradient(180deg,#fff,var(--brand-l));border-top:3px solid var(--brand)}
.tier .tier-h{font-size:13px;font-weight:700;font-family:var(--serif);letter-spacing:.5px}
.tier .tier-v{font-size:26px;font-weight:800;font-family:var(--serif);margin:6px 0 2px;color:var(--brand-d)}
.tier .tier-d{font-size:11.5px;color:var(--muted)}

/* ---------- 测评工具卡 ---------- */
.tools{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
.tool-card{border:1px solid var(--line);border-radius:var(--r-lg);padding:14px;background:#fff;transition:.15s;position:relative}
.tool-card:hover{border-color:var(--brand);box-shadow:var(--shadow)}
.tool-card .tn{font-weight:700;font-size:14px;font-family:var(--serif)}
.tool-card .tf{font-size:11.5px;color:var(--muted);margin:2px 0 8px}
.tool-card .td{font-size:12px;color:#4a5568;line-height:1.55;min-height:36px}
.tool-card .tmeta{display:flex;gap:8px;align-items:center;margin-top:10px;font-size:11px;color:var(--muted)}
.tool-card .ai-badge{position:absolute;top:12px;right:12px;background:var(--gold);color:#3a2a10;font-size:10px;font-weight:700;padding:2px 7px;border-radius:4px;letter-spacing:.5px}
.tool-card .cat{display:inline-block;font-size:10.5px;color:var(--brand-d);background:var(--brand-l);border:1px solid var(--brand-mid);border-radius:4px;padding:1px 7px;font-weight:600}

/* ---------- 得分趋势（抽屉） ---------- */
.trend{display:flex;align-items:flex-end;gap:10px;height:80px;padding:8px 0}
.trend .tb{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;height:100%;justify-content:flex-end}
.trend .tb .bar2{width:60%;background:linear-gradient(180deg,var(--brand),var(--brand-d));border-radius:4px 4px 0 0;min-height:4px}
.trend .tb .bv{font-size:11px;font-weight:700;font-family:var(--mono);color:var(--brand-d)}
.trend .tb .bl{font-size:10px;color:var(--muted)}

/* ---------- 危机干预记录卡 ---------- */
.crisis-rec{border:1px solid var(--line);border-left:3px solid var(--crisis);border-radius:var(--r);padding:12px 14px;margin-bottom:10px;background:#fffdfa}
.crisis-rec .cr-h{display:flex;align-items:center;gap:10px;margin-bottom:9px}
.crisis-rec .cr-by{font-weight:700;font-size:13px}
.crisis-rec .cr-tm{font-size:11.5px;color:var(--muted);margin-right:auto}
.crisis-rec .cr-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;font-size:12.5px;margin-bottom:8px}
.crisis-rec .cr-k{color:var(--muted);margin-right:6px}
.crisis-rec .cr-line{font-size:12.5px;line-height:1.6;color:#374250;padding-top:6px;border-top:1px dashed var(--line);margin-top:2px}
.crisis-rec .cr-line b{color:var(--crisis)}

/* ---------- 抽屉图表 ---------- */
.drawer-chart{position:relative;height:220px}

/* ---------- 强制改密弹层 ---------- */
.pwd-overlay{position:fixed;inset:0;background:rgba(31,42,55,.6);backdrop-filter:blur(3px);z-index:100;display:grid;place-items:center;padding:20px}
.pwd-box{background:#fff;border-radius:10px;padding:28px 26px;width:400px;max-width:94vw;box-shadow:var(--shadow-l);border-top:4px solid var(--brand)}

/* ---------- 我的今日待办 ---------- */
.today-card{border-left:3px solid var(--brand)}
.today-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.todo-row{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);margin-bottom:8px;background:#fff;transition:.15s}
.todo-row:hover{border-color:var(--brand-mid);background:var(--brand-l)}
.todo-row .todo-ic{width:32px;height:32px;border-radius:var(--r);background:var(--brand-l);display:grid;place-items:center;font-size:16px;flex:none}
.todo-row.warn .todo-ic{background:var(--warn-l)}
.todo-row.risk .todo-ic{background:var(--risk-l)}
.todo-row .todo-main{flex:1;min-width:0}
.todo-row .todo-main b{font-size:13.5px}
.todo-row .todo-main .muted{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---------- 通知中心 ---------- */
.bell-dot{position:absolute;top:5px;right:5px;min-width:15px;height:15px;background:var(--red);color:#fff;border-radius:8px;font-size:9.5px;font-weight:700;display:grid;place-items:center;border:2px solid #fff;padding:0 3px;line-height:1}
.notif{display:flex;gap:10px;align-items:flex-start;padding:12px 10px;border-bottom:1px solid #f0edeb;cursor:pointer;border-radius:var(--r)}
.notif:hover{background:var(--brand-l)}
.notif .n-dot{width:8px;height:8px;border-radius:50%;background:transparent;margin-top:6px;flex:none}
.notif.unread .n-dot{background:var(--red)}
.notif.unread .n-t{font-weight:700}
.notif .n-t{font-size:13.5px}
.notif .n-b{font-size:12.5px;color:#4a5568;margin-top:2px;line-height:1.5}
.notif .n-tm{font-size:11px;color:var(--muted);margin-top:4px}

/* ---------- 平板 ---------- */
@media(max-width:1080px){.kpis{grid-template-columns:1fr 1fr}.g-2,.g-2e,.g-3{grid-template-columns:1fr}.app{grid-template-columns:64px 1fr}.brand .brandsub{display:none}.nav a .txt,.nav .grp,.side-foot,.clock{display:none}.nav a{justify-content:center}.brand{align-items:center}}

/* ---------- 打印（仅报表） ---------- */
@media print{
  body *{visibility:hidden}
  .export-doc,.export-doc *{visibility:visible}
  .export-doc{position:absolute;left:0;top:0;width:100%;padding:0}
  .export-doc .ph .acts,.export-doc .priv{display:none!important}
  .export-doc .page{display:block!important}
  .tbl tbody tr:nth-child(even){background:#f6f5f4!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .card{box-shadow:none;border:1px solid #ddd;break-inside:avoid}
}

/* ---------- 手机端可用性 ---------- */
@media(max-width:720px){
  body{font-size:13.5px}
  .app{grid-template-columns:56px 1fr}
  .deco{height:2px}
  .top{flex-wrap:wrap;height:auto;padding:8px 12px;gap:8px}
  .search{order:3;max-width:none;flex-basis:100%;margin-left:0}
  .top-r{gap:8px;margin-left:auto}
  .clock{display:none}
  .btn .btn-txt{display:inline}
  .body{padding:14px 12px 0}
  .ph h2{font-size:17px}
  .kpis{grid-template-columns:1fr 1fr;gap:10px}
  .kpi{padding:12px 14px}.kpi .val{font-size:22px}
  .g-2,.g-2e,.g-3{grid-template-columns:1fr}
  /* 表格/日历横向滚动 */
  .card{overflow-x:auto}
  .tbl{min-width:640px}
  .cal{min-width:660px}
  .tools{grid-template-columns:1fr 1fr}
  .risk-grid{grid-template-columns:1fr}
  .funnel .fr .fl-l{width:58px;font-size:11.5px}
  /* 抽屉全屏 */
  .drawer{width:100vw;max-width:100vw}
  .drawer .db,.drawer .dh,.drawer .df{padding-left:16px;padding-right:16px}
  .tabs button{padding:9px 10px;font-size:12.5px}
  .todo-row .btn{display:none}
  .foot{padding:14px 12px 18px}
  .foot .fl{gap:10px}
  .toast{max-width:92vw;font-size:12.5px}
}
