/* ===== 国际快递管理系统 样式表 ===== */
:root{
  --primary:#1f6feb; --primary-dark:#1659c0; --primary-soft:#e7f0ff;
  --ok:#17a673; --ok-soft:#e4f7f0; --warn:#d9822b; --warn-soft:#fdf1e3;
  --danger:#d64545; --danger-soft:#fdeaea;
  --info:#5b8def; --info-soft:#eaf1fd;
  --ink:#1f2733; --ink-2:#5a6472; --ink-3:#8a93a0;
  --line:#e4e8ee; --bg:#f3f5f9; --card:#ffffff; --side:#131c2b;
  --shadow:0 1px 3px rgba(16,24,40,.08),0 1px 2px rgba(16,24,40,.04);
  --radius:10px; --radius-s:6px;
  --mono:'Consolas','Courier New',monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:"Segoe UI","Microsoft YaHei","PingFang SC",system-ui,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55}
a{color:var(--primary);text-decoration:none}
button{font-family:inherit}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#c6cdd6;border-radius:8px}
::-webkit-scrollbar-track{background:transparent}

#app{display:flex;height:100vh;overflow:hidden}
/* 侧边栏 */
#sidebar{width:232px;min-width:232px;background:var(--side);color:#cdd6e4;display:flex;flex-direction:column}
.brand{display:flex;align-items:center;gap:10px;padding:18px 16px;border-bottom:1px solid rgba(255,255,255,.08)}
.brand-logo{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#2f88ff,#1f5fd0);display:flex;align-items:center;justify-content:center;font-size:20px;color:#fff}
.brand-name{color:#fff;font-weight:700;font-size:15px}
.brand-sub{font-size:11px;color:#7f8aa0;letter-spacing:.5px}
#nav{flex:1;overflow-y:auto;padding:12px 8px}
.nav-item{display:flex;align-items:center;gap:10px;padding:10px 14px;margin:2px 0;border-radius:8px;color:#b9c3d4;cursor:pointer;font-size:14px;transition:.15s;user-select:none}
.nav-item:hover{background:rgba(255,255,255,.07);color:#fff}
.nav-item.active{background:var(--primary);color:#fff;font-weight:600}
.nav-ico{width:20px;text-align:center;font-size:16px}
.side-foot{padding:12px;border-top:1px solid rgba(255,255,255,.08)}
.user-chip{display:flex;gap:10px;align-items:center;padding:8px;border-radius:8px;background:rgba(255,255,255,.05);margin-bottom:10px}
.avatar{width:34px;height:34px;border-radius:50%;background:#2f88ff;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;flex-shrink:0}
.user-chip .muted{font-size:11px;color:#7f8aa0}
.btn-ghost{background:transparent;color:#aab6c9;border:1px solid rgba(255,255,255,.18)}
.btn-ghost:hover{color:#fff;border-color:#fff}

/* 主区 */
#main{flex:1;display:flex;flex-direction:column;min-width:0}
#topbar{height:56px;min-height:56px;background:var(--card);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 20px}
.page-title{font-size:18px;font-weight:700}
.topbar-right{display:flex;align-items:center;gap:10px}
.top-date{color:var(--ink-3);font-size:13px}
#page{flex:1;overflow-y:auto;padding:20px}

/* 卡片/区块 */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.card-pad{padding:18px}
.card + .card{margin-top:16px}
.card-h{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap;gap:8px}
.card-h h3{font-size:15px;font-weight:700}
.card-h .sub{font-size:12px;color:var(--ink-3);font-weight:400;margin-left:6px}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:12px 18px;border-bottom:1px solid var(--line);background:#fbfcfe}
.toolbar .grow{flex:1}
.chip-row{display:flex;gap:8px;flex-wrap:wrap;padding:0 18px 12px;align-items:center}
.chip-row .chip{white-space:nowrap}

/* 网格 */
.grid{display:grid;gap:16px}
.grid-2{grid-template-columns:repeat(2,1fr)}
.grid-3{grid-template-columns:repeat(3,1fr)}
.grid-4{grid-template-columns:repeat(4,1fr)}
.grid-5{grid-template-columns:repeat(5,1fr)}
@media(max-width:1200px){.grid-4,.grid-5{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.grid-2,.grid-3,.grid-4,.grid-5{grid-template-columns:1fr}}

/* 统计卡 */
.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:4px}
.stat .lab{font-size:13px;color:var(--ink-3)}
.stat .val{font-size:24px;font-weight:800;font-family:var(--mono)}
.stat .delta{font-size:12px;color:var(--ink-3)}
.stat .ico{font-size:20px}
.stat-row{display:flex;justify-content:space-between;align-items:flex-start}

/* 表格 */
.tbl-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{background:#f6f8fb;color:var(--ink-2);text-align:left;padding:9px 10px;font-weight:600;white-space:nowrap;border-bottom:1px solid var(--line);position:sticky;top:0}
.tbl td{padding:8px 10px;border-bottom:1px solid #eef1f5;vertical-align:middle}
.tbl tbody tr:hover{background:#f7faff}
.tbl tbody tr.cur{background:var(--primary-soft)}
.tbl .num{text-align:right;font-family:var(--mono)}
.tbl .ctr{text-align:center}
.tbl-actions{display:flex;gap:4px;flex-wrap:nowrap}
.row-empty{padding:40px;text-align:center;color:var(--ink-3)}

/* 徽章 */
.badge{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;line-height:1.7;white-space:nowrap;font-weight:600}
.b-st0{background:#edf0f4;color:#5a6472}      /* 预录 */
.b-st1{background:#eaf1fd;color:#2f6fd6}      /* 已收货 */
.b-st2{background:#e7f0ff;color:#1f6feb}      /* 已出库 */
.b-st3{background:#fdf1e3;color:#c7771e}      /* 运输中 */
.b-st4{background:#fef3d0;color:#a97b0c}      /* 清关 */
.b-st5{background:#e4f7f0;color:#11855c}      /* 已签收 */
.b-st6{background:#fdeaea;color:#c0392b}      /* 异常 */
.b-st7{background:#eee7f9;color:#7a4fc4}      /* 已退回 */
.b-gray{background:#edf0f4;color:#5a6472}
.b-ok{background:var(--ok-soft);color:var(--ok)}
.b-warn{background:var(--warn-soft);color:var(--warn)}
.b-danger{background:var(--danger-soft);color:var(--danger)}
.b-info{background:var(--info-soft);color:#3b6fd6}

/* 按钮 */
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--radius-s);border:1px solid var(--line);background:#fff;color:var(--ink);font-size:13px;cursor:pointer;transition:.15s;white-space:nowrap;line-height:1.4}
.btn:hover{border-color:#b9c6d8;background:#f5f8fc}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-dark)}
.btn-ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn-ok:hover{background:#128a5f}
.btn-danger{background:#fff;border-color:#ecc8c8;color:var(--danger)}
.btn-danger:hover{background:var(--danger);color:#fff;border-color:var(--danger)}
.btn-warn{background:#fff;border-color:#ecd9b8;color:var(--warn)}
.btn-warn:hover{background:var(--warn);color:#fff;border-color:var(--warn)}
.btn-sm{padding:4px 9px;font-size:12px;border-radius:5px}
.btn-block{display:flex;width:100%;justify-content:center}
.icon-btn{padding:3px 7px;font-size:12px;border-radius:5px;border:1px solid var(--line);background:#fff;color:var(--ink-2);cursor:pointer}
.icon-btn:hover{border-color:var(--primary);color:var(--primary)}
a.link-btn{font-size:12px}

/* 表单 */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}
.form-grid .full{grid-column:1/-1}
.form-grid .third{grid-column:auto}
@media(max-width:900px){.form-grid{grid-template-columns:1fr}}
.f-group{display:flex;flex-direction:column;gap:5px}
.f-group label{font-size:12.5px;color:var(--ink-2);font-weight:600}
.f-group label .req{color:var(--danger)}
.f-group .hint{font-size:11.5px;color:var(--ink-3)}
input,select,textarea{font:inherit;padding:7px 10px;border:1px solid #cfd6e0;border-radius:6px;background:#fff;color:var(--ink);width:100%;outline:none;transition:.15s}
input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(31,111,235,.12)}
textarea{resize:vertical;min-height:64px}
input[readonly],select[readonly]{background:#f4f6f9;color:var(--ink-3)}
.input-sm{padding:4px 8px;font-size:12.5px}
.chk{display:flex;align-items:center;gap:8px;width:auto}
.chk input{width:auto}
.form-sec{grid-column:1/-1;font-size:13px;font-weight:700;color:var(--primary);border-bottom:1px dashed var(--line);padding-bottom:5px;margin-top:6px}
.search-box{display:flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--line);border-radius:20px;padding:4px 12px;min-width:220px}
.search-box input{border:none;box-shadow:none;padding:4px 0;width:180px}
.search-box input:focus{box-shadow:none}

/* 弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}
.modal{background:#fff;border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.25);width:100%;max-width:720px;margin:auto}
.modal-lg{max-width:1000px}
.modal-sm{max-width:460px}
.modal-h{display:flex;justify-content:space-between;align-items:center;padding:15px 20px;border-bottom:1px solid var(--line)}
.modal-h h3{font-size:16px}
.modal-x{cursor:pointer;border:none;background:none;font-size:18px;color:var(--ink-3);padding:4px}
.modal-b{padding:18px 20px;max-height:calc(100vh - 220px);overflow-y:auto}
.modal-f{display:flex;justify-content:flex-end;gap:8px;padding:13px 20px;border-top:1px solid var(--line);background:#fafbfd;border-radius:0 0 12px 12px}

/* toast */
#toast-root{position:fixed;top:18px;right:18px;z-index:200;display:flex;flex-direction:column;gap:8px}
.toast{background:#1f2733;color:#fff;padding:10px 16px;border-radius:8px;font-size:13px;box-shadow:0 6px 18px rgba(0,0,0,.2);display:flex;gap:8px;align-items:center;animation:tin .2s ease}
.toast.ok{background:#118a5f}.toast.err{background:#c0392b}.toast.warn{background:#c7771e}
@keyframes tin{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

/* 时间线 */
.timeline{position:relative;padding-left:22px}
.timeline::before{content:"";position:absolute;left:7px;top:4px;bottom:8px;width:2px;background:#e2e7ef}
.tl-item{position:relative;padding-bottom:16px}
.tl-item:last-child{padding-bottom:0}
.tl-item::before{content:"";position:absolute;left:-21px;top:5px;width:10px;height:10px;border-radius:50%;background:#cbd4df;border:2px solid #fff;box-shadow:0 0 0 2px #cbd4df}
.tl-item.done::before{background:var(--ok);box-shadow:0 0 0 2px var(--ok-soft)}
.tl-item.now::before{background:var(--primary);box-shadow:0 0 0 4px var(--primary-soft)}
.tl-t{font-weight:600;font-size:13.5px}
.tl-d{font-size:12px;color:var(--ink-3)}
.tl-n{font-size:12.5px;color:var(--ink-2);margin-top:2px}

/* tabs */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 14px;background:#fff}
.tab{padding:11px 16px;font-size:13.5px;color:var(--ink-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;font-weight:600}
.tab:hover{color:var(--primary)}
.tab.active{color:var(--primary);border-bottom-color:var(--primary)}
.tab-body{padding:16px}

/* 报价网格 */
.rate-grid table{border-collapse:collapse;width:100%;font-size:13px}
.rate-grid th,.rate-grid td{border:1px solid var(--line);padding:5px 7px;text-align:right;white-space:nowrap}
.rate-grid th{background:#f6f8fb;text-align:center;font-weight:600}
.rate-grid td input{width:86px;text-align:right;padding:4px 6px}
.rate-grid td input.small{width:62px}
.rate-grid td.zn{text-align:left;font-weight:600;white-space:nowrap}
.rate-grid .rowlab{text-align:left;background:#fbfcfe;font-weight:600}

/* 简易条形图 */
.bars{display:flex;align-items:flex-end;gap:14px;height:190px;padding:10px 6px 0;border-bottom:1px solid var(--line)}
.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;justify-content:flex-end;gap:6px;min-width:30px}
.bar{width:70%;max-width:52px;background:linear-gradient(180deg,#3b82f6,#1f6feb);border-radius:4px 4px 0 0;min-height:2px;transition:.3s}
.bar.alt{background:linear-gradient(180deg,#34c48e,#12976b)}
.bar-x{font-size:12px;color:var(--ink-3);margin-top:4px;text-align:center}
.bar-v{font-size:11.5px;color:var(--ink-2);font-family:var(--mono)}

/* 明细行/描述 */
.kv{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 22px}
.kv .item{display:flex;justify-content:space-between;gap:12px;border-bottom:1px dashed #edf0f5;padding:6px 0;font-size:13px}
.kv .k{color:var(--ink-3)}
.kv .v{font-weight:600;text-align:right;word-break:break-all}
.desc-list{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}
@media(max-width:900px){.desc-list{grid-template-columns:1fr}}
.muted{color:var(--ink-3)}
.small{font-size:12px}
.mono{font-family:var(--mono)}
.big-num{font-family:var(--mono);font-weight:800;font-size:20px}
.amount{color:#c0392b;font-weight:700}
.profit{color:var(--ok);font-weight:700}
.tag{display:inline-block;background:#eef1f5;border-radius:4px;padding:1px 7px;font-size:12px;color:var(--ink-2)}
.status-flow{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.step{font-size:12px;padding:3px 10px;border-radius:16px;background:#eef1f5;color:var(--ink-3)}
.step.on{background:var(--primary);color:#fff;font-weight:600}
.step.done{background:var(--ok-soft);color:var(--ok)}

/* 打印区 */
.print-area{display:none}
@media print{
  body *{visibility:hidden}
  #print-area,#print-area *{visibility:visible}
  #print-area{display:block;position:absolute;left:0;top:0;width:100%;background:#fff}
  .no-print{display:none!important}
}
.label{font-family:var(--mono);padding:14px;background:#fff}
.label .l-head{display:flex;justify-content:space-between;align-items:center;border-bottom:3px double #000;padding-bottom:6px;margin-bottom:8px}
.label h2{margin:0;font-size:20px;letter-spacing:1px}
.label table{width:100%;border-collapse:collapse;font-size:12px}
.label table td{border:1px solid #333;padding:4px 6px}
.label .bc{display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px}
.bc-bars{display:flex;align-items:flex-end;height:44px}
.bc-bars i{display:inline-block;width:2px;background:#000}
.bc-txt{font-size:12px;letter-spacing:2px}

/* 其它 */
.flex{display:flex;gap:10px;align-items:center}
.flex-between{display:flex;justify-content:space-between;align-items:center;gap:10px}
.wrap{flex-wrap:wrap}
.grow{flex:1;min-width:0}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt24{margin-top:24px}
.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}
.nowrap{white-space:nowrap}
.text-right{text-align:right}
.text-danger{color:var(--danger)}
.text-warn{color:var(--warn,#d9822b)}
.text-ok{color:var(--ok)}
.dim{opacity:.45;pointer-events:none}
.empty{text-align:center;color:var(--ink-3);padding:48px 10px}
.empty .e-ico{font-size:42px;display:block;margin-bottom:8px}
.filter-chips{display:flex;gap:6px;flex-wrap:wrap;padding:10px 18px;border-bottom:1px solid var(--line)}
.chip{padding:4px 12px;border-radius:16px;background:#fff;border:1px solid var(--line);font-size:12.5px;cursor:pointer;color:var(--ink-2)}
.chip.on{background:var(--primary);border-color:var(--primary);color:#fff}
hr.sep{border:none;border-top:1px solid var(--line);margin:14px 0}
.summary-line{display:flex;gap:18px;flex-wrap:wrap;padding:10px 18px;background:#fbfcfe;border-bottom:1px solid var(--line);font-size:12.5px;color:var(--ink-2)}
.summary-line b{font-family:var(--mono)}

/* ===== 登录页 ===== */
#login-screen{position:fixed;inset:0;z-index:500;background:linear-gradient(135deg,#0f1f3d 0%,#163a6b 55%,#1f6feb 130%);display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{background:#fff;border-radius:16px;box-shadow:0 24px 80px rgba(0,0,0,.35);width:100%;max-width:400px;padding:34px 34px 26px;text-align:center}
.login-logo{width:62px;height:62px;border-radius:18px;background:linear-gradient(135deg,#2f88ff,#1f5fd0);color:#fff;font-size:32px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px}
.login-card h1{font-size:21px;margin:0 0 2px}
.login-sub{font-size:13px;margin-bottom:20px}
.login-form{text-align:left}
.login-err{background:var(--danger-soft);color:#c0392b;border-radius:6px;padding:8px 12px;font-size:13px;margin-top:10px}
.login-hint{font-size:11.5px;color:#8a93a0;margin-top:18px;line-height:1.7;background:#f6f8fb;border-radius:8px;padding:8px 10px}

/* ===== 客户开发系统主题 ===== */
:root{
  --primary:#1769e0; --primary-dark:#0f54ba; --primary-soft:#eaf2ff;
  --accent:#00a884; --accent-soft:#e2f7f2;
  --violet:#7157d9; --violet-soft:#f0edff;
  --orange:#ef7c31; --orange-soft:#fff0e5;
  --side:#0c1730; --side-2:#12274b;
  --shadow:0 4px 16px rgba(15,34,67,.06),0 1px 3px rgba(15,34,67,.04);
}
body{background:#f4f7fb}
#sidebar{width:246px;min-width:246px;background:linear-gradient(180deg,var(--side) 0%,#101f3d 100%)}
.brand{padding:20px 18px 15px;border-bottom:none}
.brand-logo{width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,#2a83ef,#00b897);box-shadow:0 8px 20px rgba(0,151,123,.25);font-size:23px}
.brand-name{font-size:16px}.brand-sub{font-size:9.5px;letter-spacing:1.15px;color:#7286a8}
.side-kicker{margin:2px 18px 10px;padding:8px 10px;border-radius:8px;background:rgba(255,255,255,.045);color:#8193b1;font-size:11px;letter-spacing:1.4px}
#nav{padding:8px 10px}
.nav-item{padding:10px 13px;border-radius:8px;margin:3px 0}
.nav-item.active{background:linear-gradient(90deg,#1769e0,#1478e8);box-shadow:0 6px 16px rgba(23,105,224,.28)}
.nav-badge{margin-left:auto;background:#ef5350;color:#fff;border-radius:10px;padding:0 7px;font-size:11px;line-height:18px;font-weight:700}
.data-health{display:flex;align-items:center;gap:7px;color:#8ea0be;font-size:12px;margin-bottom:6px}
.data-health i{width:7px;height:7px;border-radius:50%;background:#18c58e;box-shadow:0 0 0 3px rgba(24,197,142,.12)}
.data-health.bad i{background:#ef5350;box-shadow:0 0 0 3px rgba(239,83,80,.12)}
#topbar{height:68px;min-height:68px;padding:0 24px;box-shadow:0 1px 0 rgba(20,48,87,.02)}
.page-title{font-size:19px}.page-subtitle{font-size:11.5px;color:var(--ink-3);margin-top:1px}
#page{padding:22px 24px 38px}
.card{border-color:#e3eaf3;box-shadow:var(--shadow)}
.card-h,.toolbar{padding-left:18px;padding-right:18px}
.toolbar{background:#fbfdff}
.stat{position:relative;overflow:hidden;padding:17px 18px}
.stat::after{content:"";position:absolute;width:66px;height:66px;border-radius:50%;right:-22px;top:-27px;background:var(--primary-soft);opacity:.7}
.stat .val{font-size:26px;letter-spacing:-.7px}
.stat .ico{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary);font-size:16px}
.stat.alt-green .ico{background:var(--accent-soft);color:var(--accent)}.stat.alt-green::after{background:var(--accent-soft)}
.stat.alt-orange .ico{background:var(--orange-soft);color:var(--orange)}.stat.alt-orange::after{background:var(--orange-soft)}
.stat.alt-violet .ico{background:var(--violet-soft);color:var(--violet)}.stat.alt-violet::after{background:var(--violet-soft)}
.stat .delta.up{color:var(--accent)}.stat .delta.down{color:var(--danger)}
.hero{display:grid;grid-template-columns:1.65fr .95fr;gap:16px}
.hero-main{background:linear-gradient(125deg,#0f56bd 0%,#1769e0 55%,#268ce8 100%);color:#fff;border:none;position:relative;overflow:hidden}
.hero-main::before,.hero-main::after{content:"";position:absolute;border-radius:50%;border:1px solid rgba(255,255,255,.15)}
.hero-main::before{width:260px;height:260px;right:-80px;top:-130px}
.hero-main::after{width:170px;height:170px;right:60px;bottom:-120px}
.hero-main .card-pad{position:relative;z-index:1;padding:24px}
.hero-title{font-size:22px;font-weight:800;letter-spacing:.2px}
.hero-desc{color:rgba(255,255,255,.76);font-size:13px;margin-top:8px;max-width:620px;line-height:1.75}
.hero-stats{display:flex;gap:30px;margin-top:22px}
.hero-stats b{font-family:var(--mono);font-size:21px;display:block}.hero-stats span{color:rgba(255,255,255,.65);font-size:11px}
.quick-list{display:flex;flex-direction:column;gap:10px}
.quick-item{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:9px;background:#f7f9fc;border:1px solid #edf1f6}
.quick-ico{width:34px;height:34px;border-radius:9px;background:#fff;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:16px}
.quick-item b{display:block;font-size:13px}.quick-item span{font-size:11px;color:var(--ink-3)}
.bar-track{height:7px;border-radius:8px;background:#e9eef5;overflow:hidden}
.bar-fill{height:100%;border-radius:8px;background:linear-gradient(90deg,#1769e0,#43a0f1)}
.bar-fill.green{background:linear-gradient(90deg,#00a884,#45cda9)}
.funnel{display:flex;flex-direction:column;gap:9px}
.funnel-row{display:grid;grid-template-columns:78px 1fr 54px;gap:10px;align-items:center;font-size:12.5px}
.funnel-row .flabel{color:var(--ink-2);font-weight:600}.funnel-row .fval{text-align:right;font-family:var(--mono);font-weight:700}
.funnel-bar{height:27px;border-radius:6px;background:linear-gradient(90deg,#1769e0,#4b96ed);min-width:4px;transition:.3s}
.funnel-row:nth-child(2) .funnel-bar{background:linear-gradient(90deg,#3c86df,#70acee)}
.funnel-row:nth-child(3) .funnel-bar{background:linear-gradient(90deg,#7157d9,#9a89e7)}
.funnel-row:nth-child(4) .funnel-bar{background:linear-gradient(90deg,#ef7c31,#f5a66d)}
.funnel-row:nth-child(5) .funnel-bar{background:linear-gradient(90deg,#00a884,#50cfad)}
.score{display:inline-flex;align-items:center;justify-content:center;width:39px;height:25px;border-radius:7px;font-family:var(--mono);font-weight:800;font-size:12.5px}
.score-hot{background:#fff0e5;color:#dc650f}.score-warm{background:#fff8dc;color:#a87405}.score-cold{background:#eef1f5;color:#687386}
.company-cell{display:flex;align-items:center;gap:9px;min-width:200px}
.company-logo{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#e9f2ff,#f2f8ff);color:var(--primary);font-weight:800;flex-shrink:0}
.company-name{font-weight:650;color:var(--ink);max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.company-meta{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
.contact-stack{font-size:12.5px}.contact-stack .sub{color:var(--ink-3);font-size:11.5px}
.link-ext{color:var(--primary);cursor:pointer}.link-ext:hover{text-decoration:underline}
.src-card{padding:16px;position:relative}
.src-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.src-logo{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;background:var(--primary-soft);color:var(--primary)}
.src-logo.rss{background:var(--orange-soft);color:var(--orange)}.src-logo.web{background:var(--violet-soft);color:var(--violet)}.src-logo.manual{background:#edf0f4;color:#697689}
.src-info{display:flex;gap:11px;align-items:center}.src-info b{display:block}.src-info span{font-size:11.5px;color:var(--ink-3)}
.src-state{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-3)}
.src-state i{width:7px;height:7px;border-radius:50%;background:#bac3cf}.src-state.ok i{background:var(--accent)}.src-state.err i{background:var(--danger)}
.src-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0;padding:10px;background:#f8fafc;border-radius:8px}
.src-meta div{text-align:center}.src-meta b{display:block;font-family:var(--mono);font-size:15px}.src-meta span{font-size:10.5px;color:var(--ink-3)}
.source-preset{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.preset{border:1px solid var(--line);border-radius:9px;padding:12px;background:#fff;cursor:pointer;text-align:left}
.preset:hover{border-color:var(--primary);background:var(--primary-soft)}
.preset b{display:block;font-size:13px}.preset span{font-size:11px;color:var(--ink-3);line-height:1.5}
.task-item{display:flex;gap:12px;align-items:flex-start;padding:13px 16px;border-bottom:1px solid #edf1f5}
.task-item:last-child{border-bottom:none}.task-check{width:19px;height:19px;border:1.5px solid #c6cfda;border-radius:50%;cursor:pointer;flex-shrink:0;margin-top:2px}
.task-check:hover{border-color:var(--primary);background:var(--primary-soft)}
.task-main{flex:1;min-width:0}.task-main b{font-size:13px}.task-main p{font-size:12px;color:var(--ink-2);margin-top:3px}.task-time{font-size:11.5px;color:var(--ink-3);white-space:nowrap}
.task-time.over{color:var(--danger);font-weight:700}
.donut-wrap{display:flex;align-items:center;gap:22px;padding:8px 2px}
.donut{width:126px;height:126px;border-radius:50%;position:relative;flex-shrink:0}
.donut::after{content:"";position:absolute;inset:25px;background:#fff;border-radius:50%}
.donut-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1}
.donut-center b{font-family:var(--mono);font-size:19px}.donut-center span{font-size:10.5px;color:var(--ink-3)}
.legend{display:flex;flex-direction:column;gap:8px;flex:1}.legend-row{display:flex;align-items:center;gap:8px;font-size:12.5px}.legend-dot{width:9px;height:9px;border-radius:3px}.legend-row b{margin-left:auto;font-family:var(--mono)}
.tag-list{display:flex;gap:5px;flex-wrap:wrap}.soft-tag{padding:2px 7px;border-radius:5px;background:#f0f3f7;color:var(--ink-2);font-size:11px}
.score-ring{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-weight:800;background:conic-gradient(#1769e0 var(--score),#e9eef5 0);position:relative}
.score-ring::after{content:"";position:absolute;inset:6px;background:#fff;border-radius:50%}.score-ring span{z-index:1}
.info-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 18px}
.info-item{border-bottom:1px dashed #e7ecf2;padding:7px 0}.info-item label{display:block;color:var(--ink-3);font-size:11.5px}.info-item div{font-size:13px;margin-top:2px;word-break:break-all}
.timeline{position:relative;padding-left:22px}.timeline::before{content:"";position:absolute;left:7px;top:5px;bottom:8px;width:1px;background:#dfe5ee}
.tl-item{position:relative;padding:0 0 17px 4px}.tl-item::before{content:"";position:absolute;left:-19px;top:5px;width:9px;height:9px;border-radius:50%;background:#b9c5d3;box-shadow:0 0 0 3px #edf1f6}.tl-item.now::before{background:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.tl-t{font-size:12.5px;font-weight:650}.tl-d{font-size:11px;color:var(--ink-3);margin-top:2px}.tl-n{font-size:12px;color:var(--ink-2);margin-top:4px}
.report-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:16px}
.mini-table td{padding:7px 8px}.mini-table th{padding:7px 8px}
.filter-group{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-3)}
.filter-group select,.filter-group input{padding:6px 9px}
.upload-zone{border:2px dashed #cbd7e7;border-radius:12px;background:#f8fbff;padding:30px 18px;text-align:center;cursor:pointer;transition:.15s}
.upload-zone:hover{border-color:var(--primary);background:var(--primary-soft)}.upload-zone .u-ico{font-size:36px;display:block;margin-bottom:7px;color:var(--primary)}
.code-box{font-family:var(--mono);font-size:11.5px;background:#111b2d;color:#c9d7eb;border-radius:8px;padding:12px;white-space:pre-wrap;word-break:break-all}
@media(max-width:1180px){.hero,.report-grid{grid-template-columns:1fr}.source-preset{grid-template-columns:repeat(2,1fr)}}
@media(max-width:850px){#sidebar{width:72px;min-width:72px}.brand-text,.side-kicker,.nav-item:not(.active)::after,.nav-item span:not(.nav-ico),.nav-badge,.side-foot{display:none}.nav-item{justify-content:center}.brand{justify-content:center;padding:16px}.page-subtitle{display:none}.top-date{display:none}#page{padding:16px}.grid-4,.grid-5{grid-template-columns:repeat(2,1fr)}.hero-stats{gap:16px}.info-grid{grid-template-columns:1fr}}
@media(max-width:620px){#topbar{padding:0 12px}.topbar-right .btn:first-of-type{display:none}.grid-2,.grid-3,.grid-4,.grid-5{grid-template-columns:1fr}.source-preset{grid-template-columns:1fr}.hero-stats{flex-wrap:wrap}}

.login-mask { position: fixed; inset: 0; background: rgba(17,24,39,.55); display: flex; align-items: center; justify-content: center; z-index: 999; backdrop-filter: blur(2px); }
.login-card { width: 360px; max-width: calc(100vw - 40px); background: #fff; border-radius: 16px; padding: 34px 32px; box-shadow: 0 24px 70px rgba(0,0,0,.25); text-align: center; }
.login-card h2 { margin: 10px 0 4px; font-size: 20px; color: var(--ink, #182235); }
.login-logo { width: 52px; height: 52px; border-radius: 14px; background: var(--brand, #1769e0); color: #fff; font-size: 26px; line-height: 52px; margin: 0 auto; }
.login-card .f-group { text-align: left; margin-bottom: 12px; }
.login-card input { width: 100%; }
.btn-block { width: 100%; }
.top-user { font-weight: 500; }

/* keyword search highlight */
.mark-hint{color:#94a3b8;font-weight:400}
mark{background:#fff2a8;color:inherit;border-radius:3px;padding:0 2px;box-shadow:0 0 0 1px #f0d97a inset}
