:root{
  --bg:#f6f8fc;
  --panel:#ffffff;
  --ink:#0f1b2d;
  --ink2:#475569;
  --ink3:#8494ab;
  --line:#e6ebf3;
  --blue:#2563eb;
  --blue-dark:#1f5cd8;
  --blue-soft:#eef4ff;
  --green:#0f9d76;
  --green-soft:#e7f7f1;
  --amber:#c2740b;
  --amber-soft:#fdf3e3;
  --red:#c62828;
  --red-soft:#fdeaea;
  --radius:16px;
  --shadow-sm:0 1px 2px rgba(15,27,45,.05),0 1px 3px rgba(15,27,45,.04);
  --shadow-md:0 16px 40px -22px rgba(15,27,45,.28),0 2px 8px rgba(15,27,45,.05);
  --shadow-lg:0 30px 70px -35px rgba(15,27,45,.45);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:
    radial-gradient(1100px 520px at 88% -12%, #e6efff 0%, rgba(230,239,255,0) 62%),
    radial-gradient(820px 420px at -5% 0%, #eaf8f2 0%, rgba(234,248,242,0) 58%),
    var(--bg);
  color:var(--ink);
  font-size:14px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
}
h1,h2,h3,h4,p,ul,li{margin:0;padding:0}
ul{list-style:none}
button{font-family:inherit}
input,select,textarea{font-family:inherit;font-size:13.5px;color:var(--ink)}
.hidden{display:none!important}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#d6dfec;border-radius:8px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:#c3cfe0;background-clip:padding-box}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 启动 ---------- */
.boot{
  position:fixed;inset:0;z-index:200;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:14px;
  background:linear-gradient(160deg,#0f1b2d,#16294a 55%,#1e3a66);
  color:#dbe7ff;
}
.boot-mark{
  width:52px;height:52px;border-radius:15px;
  background:linear-gradient(145deg,#3b82f6,#1d4ed8);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 16px 30px -14px rgba(59,130,246,.9);
}
.boot p{font-size:12.5px;color:#9fb3d1;letter-spacing:.04em}
.spinner{
  width:22px;height:22px;border-radius:50%;
  border:2px solid rgba(255,255,255,.16);border-top-color:#7fb0ff;
  animation:spin .8s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- 登录 / 加入 ---------- */
.auth{
  min-height:100vh;display:grid;grid-template-columns:minmax(420px,1fr) minmax(430px,540px);
}
.auth-brand{
  position:relative;overflow:hidden;
  background:linear-gradient(155deg,#0d1830 0%,#152a4d 52%,#1d3f6f 100%);
  color:#fff;padding:38px 46px;display:flex;flex-direction:column;
}
.auth-brand::after{
  content:"";position:absolute;right:-160px;bottom:-200px;width:520px;height:520px;
  border-radius:50%;background:radial-gradient(circle at 35% 35%,rgba(59,130,246,.5),rgba(59,130,246,0) 68%);
}
.auth-brand::before{
  content:"";position:absolute;left:-120px;top:-160px;width:420px;height:420px;
  border-radius:50%;background:radial-gradient(circle at 50% 50%,rgba(16,185,129,.28),rgba(16,185,129,0) 70%);
}
.ab-top{display:flex;align-items:center;gap:12px;position:relative;z-index:1}
.ab-logo{
  width:40px;height:40px;border-radius:12px;flex:none;
  background:linear-gradient(145deg,#3b82f6,#1d4ed8);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 12px 24px -12px rgba(59,130,246,.95);
}
.ab-name{font-size:15px;font-weight:700;letter-spacing:.02em}
.ab-name span{display:block;font-size:8.5px;letter-spacing:.2em;color:#8ea9cd;font-weight:600;margin-top:2px}
.ab-body{margin:auto 0;position:relative;z-index:1;max-width:460px}
.ab-body h1{font-size:32px;line-height:1.42;font-weight:700;letter-spacing:-.01em}
.ab-lead{font-size:13px;line-height:1.85;color:#a9bdd8;margin-top:18px;max-width:400px}
.ab-list{margin-top:30px;display:flex;flex-direction:column;gap:13px}
.ab-list li{display:flex;align-items:center;gap:11px;font-size:13px;color:#cfdcee}
.ab-list b{font-weight:600;color:#fff;min-width:52px}
.ab-list span{color:#93a9c7;font-size:12.5px}
.dt{width:7px;height:7px;border-radius:50%;flex:none;box-shadow:0 0 0 4px rgba(255,255,255,.06)}
.dt.blue{background:#5b9bff}
.dt.green{background:#34d399}
.dt.amber{background:#f5b544}
.ab-foot{
  position:relative;z-index:1;font-size:11px;color:#7d93b3;letter-spacing:.03em;
  border-top:1px solid rgba(255,255,255,.09);padding-top:14px;
}
.auth-panel{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:40px 34px;gap:18px;background:#fbfcff;
}
.auth-card{
  width:100%;max-width:396px;background:#fff;border:1px solid var(--line);
  border-radius:18px;padding:26px 28px 28px;box-shadow:var(--shadow-md);
}
.auth-copy{font-size:11px;color:#a7b3c6}
.auth-title{font-size:20px;font-weight:700;letter-spacing:-.01em}
.auth-sub{font-size:12.5px;color:var(--ink3);margin-top:6px;margin-bottom:16px;line-height:1.7}
.auth-tabs{display:flex;gap:4px;background:#f2f5fa;border-radius:11px;padding:4px;margin:2px 0 20px}
.auth-tabs button{
  flex:1;border:none;background:transparent;border-radius:8px;padding:8px 6px;
  font-size:12.5px;font-weight:600;color:#64748b;cursor:pointer;transition:.16s;
}
.auth-tabs button.on{background:#fff;color:var(--ink);box-shadow:0 2px 6px rgba(15,27,45,.08)}
.fld{display:block;margin-bottom:13px;font-size:11.5px;font-weight:600;color:var(--ink2)}
.fld input{
  display:block;width:100%;margin-top:6px;padding:10px 12px;
  border:1px solid var(--line);border-radius:10px;background:#fcfdff;outline:none;
  transition:.15s;font-weight:400;
}
.fld input:focus{border-color:#b8cdf3;background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.09)}
.fld .row2{display:flex;gap:8px;margin-top:6px}
.fld .row2 input{margin-top:0;flex:1}
.code-btn{
  flex:none;border:1px solid #dfe9ff;background:#eef4ff;color:#1f5cd8;
  border-radius:10px;padding:0 13px;font-size:12px;font-weight:600;cursor:pointer;
  white-space:nowrap;transition:.15s;
}
.code-btn:hover:not(:disabled){background:#e4edff}
.code-btn:disabled{opacity:.55;cursor:not-allowed}
.auth-actions{margin-top:6px;display:flex;flex-direction:column;gap:10px}
.auth-actions .btn{width:100%;padding:11px 16px;font-size:13.5px}
.auth-links{display:flex;justify-content:space-between;margin-top:16px;font-size:12px}
.auth-links a{color:#2563eb;cursor:pointer;text-decoration:none;font-weight:600}
.auth-links a:hover{text-decoration:underline}
.auth-links .muted{color:#a7b3c6;font-weight:400}
.auth-err{
  background:#fdf3f3;border:1px solid #f6d6d6;color:#c62828;border-radius:10px;
  padding:9px 12px;font-size:12px;line-height:1.6;margin-bottom:13px;
}
.auth-ok{
  background:#f1fbf6;border:1px solid #d5f0e3;color:#0b7f60;border-radius:10px;
  padding:9px 12px;font-size:12px;line-height:1.6;margin-bottom:13px;
}
.auth-tip{
  background:#f4f8ff;border:1px solid #e3ecfb;color:#3f5677;border-radius:10px;
  padding:10px 12px;font-size:11.5px;line-height:1.7;margin-bottom:14px;
}
.dept-pick{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:6px 0 14px}
.dept-opt{
  border:1px solid var(--line);background:#fcfdff;border-radius:12px;padding:12px;
  cursor:pointer;transition:.15s;text-align:left;
}
.dept-opt:hover{border-color:#cfdcee;background:#fff}
.dept-opt.on{border-color:#b8cdf3;background:#f5f9ff;box-shadow:0 0 0 3px rgba(37,99,235,.07)}
.dept-opt b{display:block;font-size:13px;font-weight:700;color:var(--ink)}
.dept-opt span{display:block;font-size:11px;color:var(--ink3);margin-top:3px;line-height:1.5}
.dept-opt i{width:7px;height:7px;border-radius:50%;display:block;margin-bottom:7px}
.dept-opt i.blue{background:#3b82f6}
.dept-opt i.green{background:#10b981}
.join-brand{background:linear-gradient(155deg,#0d1830 0%,#1a3155 55%,#1b4a63 100%)}

/* ---------- 顶栏 ---------- */
.topbar{
  position:sticky;top:0;z-index:50;
  display:flex;align-items:center;gap:22px;
  height:70px;padding:0 26px;
  background:rgba(255,255,255,.86);
  backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
}
.brand{display:flex;align-items:center;gap:12px;min-width:230px}
.mark{
  width:38px;height:38px;border-radius:11px;flex:none;
  background:linear-gradient(145deg,#3b82f6,#1d4ed8);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 8px 18px -10px rgba(37,99,235,.95);
}
.brand h1{font-size:15.5px;font-weight:700;letter-spacing:.01em}
.brand p{font-size:9.5px;letter-spacing:.16em;color:var(--ink3);font-weight:600;margin-top:1px}
.sync{
  display:flex;align-items:center;gap:7px;font-size:11.5px;color:#7b8ba3;
  background:#f4f7fc;border:1px solid #eaf0f8;border-radius:999px;padding:5px 11px;
}
.sync i{width:6px;height:6px;border-radius:50%;background:#12b886;display:block}
.sync.busy i{background:#f0a020;animation:pulse 1s ease-in-out infinite}
.sync.err i{background:#e03131}
@keyframes pulse{50%{opacity:.35}}
.topright{margin-left:auto;display:flex;align-items:center;gap:10px}
.me{display:flex;align-items:center;gap:9px;padding-left:12px;margin-left:2px;border-left:1px solid var(--line)}
.me .ava{
  width:33px;height:33px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:#eef4ff;color:#2159d6;font-weight:700;font-size:13px;border:1px solid #dbe7ff;
}
.me b{display:block;font-size:12.5px;font-weight:600;line-height:1.25}
.me span{display:block;font-size:11px;color:var(--ink3);line-height:1.25}
.iconbtn{
  width:28px;height:28px;border-radius:8px;border:1px solid transparent;background:transparent;
  color:#94a3b8;cursor:pointer;font-size:13px;display:flex;align-items:center;justify-content:center;transition:.15s;
}
.iconbtn:hover{background:#f1f5f9;color:#475569}
.iconbtn.lg{width:32px;height:32px;border-radius:9px}

/* ---------- 布局 ---------- */
.wrap{max-width:1320px;margin:0 auto;padding:22px 26px 40px}

/* ---------- 流程条 ---------- */
.pipeline{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:18px}
.stage{
  position:relative;background:var(--panel);border:1px solid var(--line);
  border-radius:14px;padding:15px 17px;cursor:pointer;
  transition:.18s;box-shadow:var(--shadow-sm);
}
.stage:hover{transform:translateY(-1px);box-shadow:var(--shadow-md);border-color:#d7e2f2}
.stage.on{border-color:#bcd3f7;box-shadow:0 0 0 3px rgba(37,99,235,.09),var(--shadow-sm)}
.stage:not(:last-child)::after{
  content:"";position:absolute;right:-11px;top:50%;width:8px;height:8px;
  border-right:1.6px solid #c4d0e2;border-bottom:1.6px solid #c4d0e2;
  transform:translateY(-50%) rotate(-45deg);z-index:2;
}
.stage-top{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.step-no{
  width:18px;height:18px;border-radius:6px;font-size:10.5px;font-weight:700;
  display:flex;align-items:center;justify-content:center;flex:none;
  background:#f1f5fb;color:#64748b;
}
.stage[data-tone="blue"] .step-no{background:#eaf1ff;color:#2159d6}
.stage[data-tone="green"] .step-no{background:#e7f7f1;color:#0b7f60}
.stage[data-tone="amber"] .step-no{background:#fdf3e3;color:#a86408}
.stage-label{font-size:12.5px;font-weight:600;color:var(--ink2)}
.stage-val{font-size:23px;font-weight:700;letter-spacing:-.02em;line-height:1.15;font-variant-numeric:tabular-nums}
.stage-val small{font-size:11.5px;font-weight:600;color:var(--ink3);margin-left:4px;letter-spacing:0}
.stage-sub{font-size:11.5px;color:var(--ink3);margin-top:3px}

/* ---------- 角色工作台 ---------- */
.wb{
  display:grid;grid-template-columns:296px 1fr;
  background:var(--panel);border:1px solid var(--line);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);
  overflow:hidden;margin-bottom:18px;
}
.wb-side{
  padding:20px 22px;border-right:1px solid var(--line);
  background:linear-gradient(160deg,#fbfdff 10%,#eff5ff 100%);
  display:flex;flex-direction:column;min-width:0;
}
.wb-side[data-tone="green"]{background:linear-gradient(160deg,#fbfffd 10%,#eef9f3 100%)}
.wb-side[data-tone="amber"]{background:linear-gradient(160deg,#fffdf8 10%,#fdf5e6 100%)}
.wb-tag{
  display:inline-flex;align-items:center;gap:6px;align-self:flex-start;
  font-size:11px;font-weight:700;letter-spacing:.03em;
  padding:4px 9px;border-radius:999px;background:#e6efff;color:#2159d6;
}
.wb-side[data-tone="green"] .wb-tag{background:#dff5ea;color:#0b7f60}
.wb-side[data-tone="amber"] .wb-tag{background:#fbeed2;color:#96600a}
.wb-side h3{font-size:15px;font-weight:700;margin:12px 0 4px}
.wb-metric{font-size:26px;font-weight:700;letter-spacing:-.02em;margin:10px 0 0;font-variant-numeric:tabular-nums}
.wb-metric small{font-size:12px;color:var(--ink3);font-weight:600;margin-left:5px}
.wb-metric-sub{font-size:11.5px;color:#6b7a91;margin-top:4px;font-weight:500}
.wb-desc{font-size:12px;color:var(--ink3);margin-top:6px;line-height:1.65}
.wb-actions{margin-top:auto;padding-top:16px;display:flex;flex-direction:column;gap:8px}
.wb-main{padding:18px 22px;min-height:180px;min-width:0}
.wb-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.wb-head h4{font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--ink3);text-transform:uppercase}
.wb-head a{font-size:12px;color:#2563eb;text-decoration:none;cursor:pointer;font-weight:600}
.wb-head a:hover{text-decoration:underline}
.qrow{display:flex;align-items:center;gap:14px;padding:11px 2px;border-bottom:1px dashed #eef2f8}
.qrow:last-child{border-bottom:none}
.qmain{min-width:0;flex:1}
.qno{font-size:13px;font-weight:700;letter-spacing:.01em;font-variant-numeric:tabular-nums}
.qsub{font-size:11.5px;color:var(--ink3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qamt{text-align:right;flex:none;min-width:110px}
.qamt b{display:block;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.qamt span{display:block;font-size:11px;color:var(--ink3);margin-top:1px}
.flag-ok{color:#0b7f60}
.flag-warn{color:#b45309}
.empty{padding:34px 10px;text-align:center;color:var(--ink3);font-size:12.5px}
.empty svg{display:block;margin:0 auto 10px;opacity:.5}

/* ---------- 台账 ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}
.ledger-top{display:flex;align-items:center;gap:16px;padding:16px 20px 12px;flex-wrap:wrap}
.lt-left{display:flex;align-items:baseline;gap:10px}
.lt-left h2{font-size:15px;font-weight:700}
.lt-left span{font-size:11.5px;color:var(--ink3)}
.lt-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.search{position:relative;display:flex;align-items:center}
.search svg{position:absolute;left:11px;opacity:.55}
.search input{width:264px;padding:8px 12px 8px 32px;border-radius:10px;border:1px solid var(--line);background:#fbfcff;outline:none;transition:.16s}
.search input:focus{border-color:#b8cdf3;background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.09)}
.chips{display:flex;gap:7px;padding:0 20px 12px;flex-wrap:wrap}
.chip{
  border:1px solid var(--line);background:#fff;border-radius:999px;
  padding:5px 12px;font-size:12px;font-weight:600;color:#64748b;cursor:pointer;transition:.15s;
  display:inline-flex;align-items:center;gap:6px;
}
.chip:hover{border-color:#cfdcee;color:var(--ink2)}
.chip.on{background:#0f1b2d;border-color:#0f1b2d;color:#fff}
.chip b{font-size:10.5px;font-weight:700;background:#f1f5f9;color:#64748b;padding:1px 5px;border-radius:999px}
.chip.on b{background:rgba(255,255,255,.18);color:#fff}
.tablewrap{overflow-x:auto}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
thead th{
  text-align:left;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;
  color:#8a99af;font-weight:700;padding:9px 16px;background:#fafbfe;
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);white-space:nowrap;
}
thead th.num{text-align:right}
tbody td{padding:12px 16px;border-bottom:1px solid #eff3f9;vertical-align:middle}
tbody td.num{text-align:right}
tbody tr{cursor:pointer;transition:background .13s}
tbody tr:hover{background:#f8faff}
tbody tr:last-child td{border-bottom:none}
.bl{font-weight:700;font-size:13px;letter-spacing:.015em;font-variant-numeric:tabular-nums}
.sub{font-size:11px;color:var(--ink3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:230px}
.cust{font-size:13px;font-weight:500}
.route{font-size:12.5px;font-weight:600;color:var(--ink2)}
.route em{font-style:normal;color:#b6c2d4;margin:0 4px}
.money{font-variant-numeric:tabular-nums;font-weight:700}
.money.weak{color:#94a3b8;font-weight:500}
.mini{width:86px;height:5px;border-radius:4px;background:#eef2f8;overflow:hidden;margin-left:auto}
.mini i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#5b9bff,#2563eb);transition:width .3s}
.mini.done i{background:linear-gradient(90deg,#34d399,#0f9d76)}
.pct{font-size:10.5px;color:var(--ink3);text-align:right;margin-top:3px;font-variant-numeric:tabular-nums}

/* ---------- 状态标签 ---------- */
.pill{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:999px;font-size:11.5px;font-weight:700;white-space:nowrap;line-height:1.25}
.pill i{width:5px;height:5px;border-radius:50%;background:currentColor;display:block;flex:none}
.p-gray{background:#f1f5f9;color:#64748b}
.p-blue{background:#eaf1ff;color:#2159d6}
.p-green{background:#e7f7f1;color:#0b7f60}
.p-amber{background:#fdf3e3;color:#a86408}
.p-red{background:#fdeaea;color:#c62828}

/* ---------- 按钮 ---------- */
.btn{
  appearance:none;border:1px solid transparent;border-radius:10px;
  padding:9px 16px;font-size:13px;font-weight:600;cursor:pointer;transition:.16s;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;
}
.btn.primary{background:linear-gradient(180deg,#2f74f0,#1f5cd8);color:#fff;box-shadow:0 8px 18px -12px rgba(37,99,235,.95)}
.btn.primary:hover{filter:brightness(1.06)}
.btn.ghost{background:#fff;border-color:var(--line);color:#334155}
.btn.ghost:hover{border-color:#c9d6e8;background:#f9fbff}
.btn.soft{background:#eef4ff;color:#1f5cd8;border-color:#dfe9ff}
.btn.soft:hover{background:#e4edff}
.btn.amber{background:linear-gradient(180deg,#e2920f,#c2740b);color:#fff;box-shadow:0 8px 18px -12px rgba(194,116,11,.9)}
.btn.danger{background:#fff;border-color:#f0c8c8;color:#c62828}
.btn.danger:hover{background:#fdf5f5;border-color:#e6a9a9}
.btn.sm{padding:6px 12px;font-size:12.5px;border-radius:9px}
.btn:disabled{opacity:.42;cursor:not-allowed;box-shadow:none;filter:none}

/* ---------- 抽屉 ---------- */
.scrim{position:fixed;inset:0;background:rgba(15,27,45,.34);opacity:0;pointer-events:none;transition:.22s;z-index:70}
.scrim.on{opacity:1;pointer-events:auto}
.drawer{
  position:fixed;top:0;right:0;height:100vh;width:560px;max-width:94vw;
  background:#fff;box-shadow:-30px 0 70px -35px rgba(15,27,45,.5);
  transform:translateX(103%);transition:transform .3s cubic-bezier(.22,1,.36,1);
  z-index:80;display:flex;flex-direction:column;
}
.drawer.open{transform:none}
.dhead{padding:20px 24px 16px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fbfdff,#fff)}
.dhead-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.dhead h3{font-size:19px;font-weight:700;letter-spacing:.01em;font-variant-numeric:tabular-nums}
.dhead .sub2{font-size:12px;color:var(--ink3);margin-top:5px}
.dbody{padding:18px 24px 28px;overflow-y:auto;flex:1}
.dfoot{padding:13px 24px;border-top:1px solid var(--line);background:#fbfcff;display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}
.dsec{margin-bottom:22px}
.dsec h4{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#8a99af;margin-bottom:10px;display:flex;align-items:center;gap:8px}
.dsec h4::after{content:"";flex:1;height:1px;background:#eff3f9}
.kv{display:grid;grid-template-columns:1fr 1fr;gap:12px 18px}
.kv .k{font-size:11px;color:var(--ink3);margin-bottom:2px}
.kv .v{font-size:13px;font-weight:600;color:var(--ink);word-break:break-word}
.kv .v.mono{font-variant-numeric:tabular-nums;letter-spacing:.01em}
.amt-box{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;background:#fafcff;border:1px solid #eaf0fa;border-radius:12px;padding:14px 16px}
.amt-box div span{display:block;font-size:11px;color:var(--ink3);margin-bottom:3px}
.amt-box div b{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
.amt-box .due b{color:#c2740b}
.amt-box .ok b{color:#0b7f60}
.bar{height:7px;border-radius:5px;background:#eef2f8;overflow:hidden;margin:12px 0 6px}
.bar i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#5b9bff,#2563eb);transition:width .35s}
.bar.done i{background:linear-gradient(90deg,#34d399,#0f9d76)}
.barlabel{display:flex;justify-content:space-between;font-size:11px;color:var(--ink3)}
.plist{border:1px solid var(--line);border-radius:11px;overflow:hidden}
.pitem{display:flex;align-items:center;gap:10px;padding:9px 13px;border-bottom:1px solid #f0f4fa;font-size:12.5px}
.pitem:last-child{border-bottom:none}
.pitem .pi-main{flex:1;min-width:0}
.pitem .pi-main b{font-weight:600}
.pitem .pi-main span{display:block;font-size:11px;color:var(--ink3);margin-top:1px}
.pitem .pi-amt{font-weight:700;font-variant-numeric:tabular-nums;color:#0b7f60}
.tl{position:relative;padding-left:20px}
.tl::before{content:"";position:absolute;left:5px;top:6px;bottom:8px;width:1px;background:#e6ebf3}
.tli{position:relative;padding-bottom:16px}
.tli:last-child{padding-bottom:0}
.tli::before{content:"";position:absolute;left:-19px;top:4px;width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid #b6c2d4}
.tli.blue::before{border-color:#3b82f6}
.tli.green::before{border-color:#0f9d76}
.tli.red::before{border-color:#dc2626}
.tli.amber::before{border-color:#e2920f}
.tli .tl-top{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.tli .tl-act{font-size:12.5px;font-weight:700}
.tli .tl-time{font-size:10.5px;color:var(--ink3);font-variant-numeric:tabular-nums}
.tli .tl-detail{font-size:11.5px;color:var(--ink2);margin-top:3px;line-height:1.6;word-break:break-word}
.tli .tl-by{font-size:10.5px;color:var(--ink3);margin-top:2px}

/* ---------- 弹窗 ---------- */
.mroot{position:fixed;inset:0;z-index:90;display:none;align-items:center;justify-content:center;padding:20px}
.mroot.on{display:flex}
.mroot.on .mback{animation:fade .18s ease}
.mroot.on .modal{animation:pop .22s cubic-bezier(.22,1,.36,1)}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
.mback{position:absolute;inset:0;background:rgba(15,27,45,.45);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:20px}
.modal{position:relative;background:#fff;border-radius:18px;width:640px;max-width:100%;max-height:88vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg)}
.mhead{padding:20px 24px 14px;border-bottom:1px solid var(--line);display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.mhead h3{font-size:16.5px;font-weight:700}
.mhead p{font-size:11.5px;color:var(--ink3);margin-top:3px}
.mbody{padding:18px 24px;overflow-y:auto;flex:1}
.mfoot{padding:13px 24px;border-top:1px solid var(--line);background:#fbfcff;display:flex;align-items:center;gap:10px}
.mfoot .err{color:#c62828;font-size:12px;margin-right:auto;font-weight:600}
.mfoot .btn:first-of-type{margin-left:auto}
.frow{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:13px}
label.fl{display:block;font-size:11.5px;font-weight:600;color:var(--ink2);line-height:1.6}
label.fl em{color:#dc2626;font-style:normal;margin-left:2px}
label.fl input,label.fl select,label.fl textarea{
  display:block;width:100%;margin-top:6px;padding:9px 12px;border:1px solid var(--line);border-radius:10px;
  background:#fcfdff;outline:none;transition:.15s;font-weight:400;color:var(--ink);
}
label.fl input:focus,label.fl select:focus,label.fl textarea:focus{border-color:#b8cdf3;background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.09)}
label.fl textarea{resize:vertical;min-height:58px}
.sectitle{display:flex;align-items:center;justify-content:space-between;font-size:11.5px;font-weight:700;color:var(--ink2);margin:18px 0 9px;padding-top:14px;border-top:1px dashed #e9eef7}
.sectitle span{font-weight:500;color:var(--ink3);font-size:11.5px}
.sectitle b{color:#1f5cd8;font-variant-numeric:tabular-nums;font-size:13px}
.itemrow{display:flex;gap:8px;margin-bottom:8px}
.itemrow input{padding:8px 11px;border:1px solid var(--line);border-radius:9px;background:#fcfdff;outline:none;transition:.15s;font-size:13px}
.itemrow input:focus{border-color:#b8cdf3;background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.09)}
.itemrow .iname{flex:1}
.itemrow .iamt{width:132px;text-align:right;font-variant-numeric:tabular-nums}
.additem{width:100%;padding:8px;border:1px dashed #d6e0ee;border-radius:9px;background:#fbfdff;color:#2563eb;font-size:12px;font-weight:600;cursor:pointer;transition:.15s}
.additem:hover{background:#f4f9ff;border-color:#b8cdf3}
.hintbox{background:#f4f8ff;border:1px solid #e3ecfb;border-radius:11px;padding:11px 14px;font-size:11.5px;color:#3f5677;line-height:1.7;margin-bottom:14px}
.hintbox b{color:#1f5cd8}
.warnbox{background:#fff9ec;border:1px solid #f7e6c4;border-radius:11px;padding:11px 14px;font-size:11.5px;color:#8a5a06;line-height:1.7;margin-bottom:14px}
.okbox{background:#f1fbf6;border:1px solid #d5f0e3;border-radius:11px;padding:11px 14px;font-size:11.5px;color:#0b7f60;line-height:1.7;margin-bottom:14px}
.chkline{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink2);margin-bottom:12px}
.chkline .pill{margin-left:auto}

/* ---------- 成员管理 ---------- */
.member-row{display:flex;align-items:center;gap:12px;padding:11px 2px;border-bottom:1px dashed #eef2f8}
.member-row:last-child{border-bottom:none}
.member-ava{width:32px;height:32px;border-radius:9px;background:#eef4ff;color:#2159d6;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12.5px;flex:none;border:1px solid #dbe7ff}
.member-name{flex:1;min-width:0}
.member-name b{display:block;font-size:13px;font-weight:600}
.member-name span{display:block;font-size:11px;color:var(--ink3);margin-top:1px}
.member-row select{padding:6px 9px;border:1px solid var(--line);border-radius:8px;background:#fcfdff;font-size:12px;outline:none}
.invite-box{display:flex;align-items:center;gap:10px;background:#f4f8ff;border:1px dashed #cddff8;border-radius:11px;padding:12px 14px}
.invite-code{font-size:19px;font-weight:700;letter-spacing:.22em;color:#1f5cd8;font-variant-numeric:tabular-nums}

/* ---------- Toast ---------- */
.toasts{position:fixed;right:22px;bottom:22px;z-index:120;display:flex;flex-direction:column;gap:9px;align-items:flex-end}
.toast{
  display:flex;align-items:center;gap:9px;background:#0f1b2d;color:#fff;
  padding:11px 16px;border-radius:11px;font-size:12.5px;font-weight:500;
  box-shadow:0 16px 34px -16px rgba(15,27,45,.8);animation:tin .25s cubic-bezier(.22,1,.36,1);
  max-width:380px;
}
.toast .dot{width:7px;height:7px;border-radius:50%;background:#34d399;flex:none}
.toast.warn .dot{background:#f0a020}
.toast.err .dot{background:#f87171}
@keyframes tin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- 页脚 ---------- */
.foot{margin-top:16px;padding:14px 18px;border-radius:12px;background:rgba(255,255,255,.6);border:1px dashed #dbe4f1;font-size:11.5px;color:#7b8ba3;line-height:1.8}
.foot b{color:#475569}


/* ---------- 附件 ---------- */
.att-group{border:1px solid var(--line);border-radius:11px;margin-bottom:10px;overflow:hidden}
.att-head{display:flex;align-items:center;justify-content:space-between;padding:7px 12px;background:#fafbfe;border-bottom:1px solid #f0f4fa;font-size:11.5px;font-weight:700;color:var(--ink2)}
.att-head .btn{padding:3px 10px;font-size:11.5px;border-radius:7px}
.att-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid #f4f7fb}
.att-row:last-child{border-bottom:none}
.att-ico{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:8.5px;font-weight:800;letter-spacing:.03em;flex:none}
.att-ico.img{background:#eef4ff;color:#2159d6}
.att-ico.pdf{background:#fdf3e3;color:#a86408}
.att-main{flex:1;min-width:0}
.att-main b{display:block;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.att-main span{display:block;font-size:11px;color:var(--ink3);margin-top:1px}
.att-empty{padding:12px;font-size:11.5px;color:var(--ink3)}
.att-img{display:block;max-width:100%;margin:0 auto;border-radius:8px;box-shadow:0 14px 40px -26px rgba(15,27,45,.55)}
.att-pdf{width:100%;height:58vh;border:none;border-radius:8px;background:#f4f7fb}
a.btn{text-decoration:none}

/* ---------- 打印 ---------- */
.voucher{background:#fff}
.v-head{text-align:center;border-bottom:2px solid #0f1b2d;padding-bottom:14px;margin-bottom:18px}
.v-head h2{font-size:21px;letter-spacing:.22em;font-weight:700}
.v-head p{font-size:9.5px;letter-spacing:.3em;color:#8494ab;margin-top:5px}
.v-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:12px;margin-top:6px}
.v-table th,.v-table td{border:1px solid #dde5f0;padding:7px 10px;text-align:left}
.v-table th{background:#f7f9fd;font-size:11px;color:#5b6b83;font-weight:600}
.v-table td.r,.v-table th.r{text-align:right;font-variant-numeric:tabular-nums}
.v-total td{font-weight:700;background:#fbfcff}
.v-sign{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:34px;font-size:11.5px;color:#5b6b83}
.v-sign div{border-top:1px solid #c9d4e3;padding-top:7px;text-align:center}

@media print{
  body{background:#fff!important}
  body > *{display:none!important}
  #printArea{display:block!important;position:absolute;left:0;top:0;width:100%;padding:0}
  .mroot,.toasts,.drawer,.scrim{display:none!important}
}

/* ---------- 响应式 ---------- */
@media (max-width:1180px){
  .auth{grid-template-columns:1fr}
  .auth-brand{display:none}
  .auth-panel{min-height:100vh;background:linear-gradient(160deg,#0d1830,#1a3155)}
  .auth-card{box-shadow:0 30px 70px -30px rgba(0,0,0,.6)}
  .auth-copy{color:#8ea9cd}
}
@media (max-width:1120px){
  .pipeline{grid-template-columns:repeat(2,1fr)}
  .stage:nth-child(2)::after{display:none}
  .wb{grid-template-columns:1fr}
  .wb-side{border-right:none;border-bottom:1px solid var(--line)}
  .wb-side .btn{margin-top:14px}
}
@media (max-width:860px){
  .topbar{height:auto;padding:12px 16px;flex-wrap:wrap;gap:10px}
  .brand{min-width:0}
  .sync{margin-left:auto}
  .topright{margin-left:0;width:100%;justify-content:flex-end}
  .topright .btn{display:none}
  .me{border-left:none;padding-left:0;margin-right:auto}
  .wrap{padding:16px}
  .pipeline{grid-template-columns:repeat(2,1fr);gap:10px}
  .stage{padding:12px 14px}
  .stage-val{font-size:20px}
  .stage::after{display:none!important}
  .lt-right{width:100%}
  .search{width:100%}
  .search input{width:100%}
  .kv{grid-template-columns:1fr}
  .amt-box{grid-template-columns:1fr;gap:10px}
  .frow{grid-template-columns:1fr}
  .drawer{width:100%}
  .auth-panel{padding:26px 18px}
  .auth-card{padding:22px 20px 24px}
}
