/* ==========================================================================
   批次 5 · 照搬旧站 CSS（不改写、不优化）—— admin/leads 视觉对齐
   来源：app.py <style> 块 verbatim。
   段1：admin 桌面 CSS（1264-1387，.card/table/.btn/.tag/.pbar/.row/.phone…）
   段2：ADMIN_CSS（1520-1556，admin 侧边栏/顶栏布局）
   后续按端继续追加旧站对应 CSS 块。禁止手改，改回源后重拷。
   ========================================================================== */
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,"Segoe UI","Microsoft YaHei",sans-serif;background:#f5f6f8;color:#1f2329;font-size:14px;line-height:1.6}
a{color:#185fa5;text-decoration:none}
.wrap{max-width:1280px;margin:0 auto;padding:20px}
.topbar{background:#fff;border-bottom:1px solid #e5e6eb;padding:0 20px;display:flex;align-items:center;height:56px;gap:24px;position:sticky;top:0;z-index:50}
.brand{font-weight:600;font-size:16px;color:#1f2329}
.topbar nav{display:flex;gap:4px}
.topbar nav a{padding:6px 14px;border-radius:6px;color:#4e5969;font-size:14px}
.topbar nav a:hover{background:#f2f3f5}
.topbar nav a.on{background:#e8f1fb;color:#185fa5;font-weight:500}
.card{background:#fff;border:1px solid #e5e6eb;border-radius:10px;padding:18px 20px;margin-bottom:16px}
.card h2{font-size:15px;font-weight:600;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.card h2 .sub{font-size:12px;color:#86909c;font-weight:400}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;padding:9px 10px;color:#86909c;font-weight:500;border-bottom:1px solid #e5e6eb;white-space:nowrap;font-size:12px}
td{padding:10px;border-bottom:1px solid #f2f3f5;vertical-align:top}
tr:hover td{background:#fafbfc}
input,select,textarea{font-family:inherit;font-size:13px;padding:7px 10px;border:1px solid #d9d9d9;border-radius:6px;background:#fff;color:#1f2329;outline:none;width:100%}
input:focus,select:focus,textarea:focus{border-color:#185fa5}
textarea{resize:vertical;line-height:1.7}
.btn{display:inline-block;padding:7px 16px;border-radius:6px;border:1px solid #d9d9d9;background:#fff;cursor:pointer;font-size:13px;color:#1f2329;font-family:inherit}
.btn:hover{border-color:#185fa5;color:#185fa5}
.btn.p{background:#185fa5;border-color:#185fa5;color:#fff}
.btn.p:hover{background:#124a85;color:#fff}
.btn.g{background:#2ba471;border-color:#2ba471;color:#fff}
.btn.g:hover{background:#22895c;color:#fff}
.btn.sm{padding:4px 10px;font-size:12px}
.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px}
.metric{background:#fff;border:1px solid #e5e6eb;border-radius:10px;padding:14px 16px}
.metric .lb{font-size:12px;color:#86909c;margin-bottom:4px}
.metric .nm{font-size:22px;font-weight:600;color:#1f2329}
.metric .nm.red{color:#d13c3c}
.metric .nm.green{color:#2ba471}
.metric .nm.blue{color:#185fa5}
.tag{display:inline-block;padding:1px 8px;border-radius:4px;font-size:12px;background:#f2f3f5;color:#4e5969}
.tag.green{background:#e8f8f0;color:#1d7a4f}
.tag.blue{background:#e8f1fb;color:#185fa5}
.tag.orange{background:#fff4e6;color:#c1680a}
.tag.red{background:#fdecec;color:#c0392b}
.row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}
.row>div{flex:1;min-width:130px}
.row .lbl{font-size:12px;color:#86909c;margin-bottom:4px;display:block}
.muted{color:#86909c;font-size:12px}
.empty{text-align:center;padding:40px;color:#86909c;font-size:13px}
.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%);background:#1f2329;color:#fff;padding:10px 22px;border-radius:8px;font-size:13px;z-index:9999;opacity:0;transition:.3s;pointer-events:none}
.toast.show{opacity:1}
.chip{display:inline-block;padding:5px 12px;border:1px solid #d9d9d9;border-radius:16px;font-size:13px;cursor:pointer;background:#fff;color:#4e5969;user-select:none}
.chip.on{background:#e8f1fb;border-color:#185fa5;color:#185fa5;font-weight:500}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.phone{font-family:ui-monospace,Consolas,monospace;font-weight:600;color:#185fa5}
.phone.mask{color:#c1680a}
.tag.purple{background:#f3e8ff;color:#7c3aed}
.badge{display:inline-block;min-width:32px;text-align:center;background:#eef1f5;color:#4e5969;
  border-radius:10px;padding:1px 8px;font-size:12px;font-weight:600}
.pbar{height:4px;background:#eef1f5;border-radius:2px;margin-top:6px;overflow:hidden;max-width:120px}
.pbar>i{display:block;height:100%;background:#185fa5;border-radius:2px}
.mini{font-size:12px;color:#86909c;line-height:1.7}
.kv{display:grid;grid-template-columns:96px 1fr;gap:8px 12px;font-size:13px}
.kv .k{color:#86909c}
.empty{padding:26px;text-align:center;color:#86909c}

/* ============ 手机自适应（后台在窄屏也要能用）============ */
@media (max-width:640px){
  .wrap{padding:10px}
  .topbar{height:auto;padding:8px 12px;flex-direction:column;align-items:stretch;gap:8px}
  .card h2{font-size:14px;flex-wrap:wrap;gap:6px}
  .card h2 .sub{font-size:12px}
  table:not(.m-cards){display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap}
  th,td{padding:8px}
  table.m-cards{display:block;white-space:normal}
  table.m-cards thead{display:none}
  table.m-cards tbody{display:block}
  table.m-cards tr{display:block;background:#fff;border:1px solid #e5e6eb;border-radius:10px;
    padding:10px 12px;margin-bottom:10px}
  table.m-cards tr:hover td{background:transparent}
  table.m-cards td{display:flex;justify-content:space-between;gap:12px;align-items:baseline;
    border:none;padding:5px 0;white-space:normal;text-align:right}
  table.m-cards td::before{content:attr(data-label);color:#86909c;font-size:12px;
    flex:0 0 auto;text-align:left;padding-right:8px}
  table.m-cards td[colspan]{justify-content:center;text-align:center}
  table.m-cards td[colspan]::before{content:none}
  .empty{padding:22px}
  .row{flex-direction:column;align-items:stretch;gap:10px}
  .row>div{min-width:0;width:100%;flex:none}
  .metrics{grid-template-columns:1fr 1fr;gap:10px}
  .metric .nm{font-size:19px}
  .kv{grid-template-columns:84px 1fr;gap:6px 10px}
  .btn{padding:9px 16px}
  .btn.sm{padding:7px 12px}
  .chip{padding:7px 14px}
  .card>div[style*="overflow-x:auto"]{margin:0 -14px;padding:0 14px}
  .row>div .btn{width:100%;text-align:center}
  table.m-cards.leads td.c-id{display:none}
  table.m-cards.leads td.c-title{display:block;text-align:left;font-weight:600;font-size:15px;
    color:#1f2329;padding:0 0 8px;margin-bottom:4px;border-bottom:1px solid #f2f3f5}
  table.m-cards.leads td.c-title::before{content:none}
  table.m-cards.leads td.c-title .muted{font-weight:400;font-size:12px;margin-top:3px}
  table.m-cards.leads td.c-ops{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;padding:10px 0 0;
    border-top:1px solid #f2f3f5}
  table.m-cards.leads td.c-ops::before{content:none}
  table.m-cards.leads td.c-ops .btn{flex:1 1 0;min-width:84px;text-align:center;padding:9px 8px}
  table.m-cards.leads td.c-ops .c-push{flex:1 1 100%}
  table.kvtable{display:block;overflow:visible;white-space:normal}
  table.kvtable tr{display:flex;gap:10px;padding:7px 0;border-bottom:1px solid #f2f3f5}
  table.kvtable tr:last-child{border-bottom:none}
  table.kvtable th{flex:0 0 92px;white-space:nowrap;padding:0;border:none;color:#86909c;
    font-weight:400;font-size:13px}
  table.kvtable td{flex:1;padding:0;border:none;white-space:normal;word-break:break-word;font-size:13px}
}

/* ============ ADMIN_CSS（1520-1556）：admin 布局 ============ */
.admin-layout{display:flex;min-height:100vh}
.admin-sidebar{width:220px;background:#1f2329;color:#fff;position:fixed;left:0;top:0;bottom:0;overflow-y:auto;z-index:200;display:flex;flex-direction:column}
.admin-logo{padding:18px 16px;border-bottom:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:10px}
.admin-logo-icon{width:32px;height:32px;border-radius:8px;background:#00b578;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:700}
.admin-logo-text{font-weight:600;font-size:15px;color:#fff}
.admin-menu{flex:1;padding:12px 0}
.admin-menu-group{margin:4px 10px}
.admin-menu-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;color:#cfd4dc;font-size:14px;cursor:pointer;transition:.2s;background:none;border:none;width:100%;text-align:left;text-decoration:none}
.admin-menu-item:hover{background:rgba(255,255,255,.06);color:#fff}
.admin-menu-item.active{background:rgba(0,181,120,.18);color:#00b578}
.admin-menu-icon{width:18px;text-align:center;font-size:15px}
.admin-menu-arrow{margin-left:auto;font-size:11px;transition:.2s}
.admin-menu-group.open .admin-menu-arrow{transform:rotate(90deg)}
.admin-menu-badge{margin-left:auto;background:#c0392b;color:#fff;font-size:11px;padding:1px 7px;border-radius:10px}
.admin-submenu{display:none;padding:4px 0 4px 28px}
.admin-menu-group.open .admin-submenu{display:block}
.admin-submenu-item{display:block;padding:8px 12px;border-radius:6px;color:#adb5bd;font-size:13px;margin:2px 0;text-decoration:none}
.admin-submenu-item:hover{background:rgba(255,255,255,.06);color:#fff}
.admin-submenu-item.active{background:rgba(0,181,120,.15);color:#00b578}
.admin-sidebar-footer{padding:12px 16px;border-top:1px solid rgba(255,255,255,.08)}
.admin-sidebar-footer a{color:#86909c;font-size:13px;text-decoration:none}
.admin-body{flex:1;margin-left:220px;display:flex;flex-direction:column;min-height:100vh}
.admin-header{height:56px;background:#fff;border-bottom:1px solid #e5e6eb;display:flex;align-items:center;padding:0 20px;gap:16px;position:sticky;top:0;z-index:100}
.admin-menu-toggle{display:none;background:none;border:none;font-size:18px;color:#4e5969;cursor:pointer;padding:4px}
.admin-breadcrumb{font-weight:600;font-size:15px;color:#1f2329}
.admin-main{flex:1;padding:20px;background:#f5f6f8}
.admin-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:150}
.admin-overlay.show{display:block}
@media (max-width:768px){
  .admin-sidebar{transform:translateX(-100%);transition:transform .25s ease}
  body.sidebar-open .admin-sidebar{transform:translateX(0)}
  .admin-body{margin-left:0}
  .admin-menu-toggle{display:block}
  .admin-logo-text{display:none}
  .admin-sidebar{width:200px}
}

/* ============ BUY_MODAL_CSS（app.py:4196-4215，旧站原样） ============ */
.bm-mask{position:fixed;inset:0;background:rgba(17,24,29,.45);z-index:300;display:none;align-items:center;justify-content:center;padding:0 26px}
.bm-mask.show{display:flex}
.bm-box{background:#fff;border-radius:16px;width:100%;max-width:330px;overflow:hidden;box-shadow:0 14px 40px rgba(0,0,0,.18);animation:bmIn .18s ease-out}
@keyframes bmIn{from{transform:translateY(10px) scale(.97);opacity:.5}to{transform:none;opacity:1}}
.bm-top{padding:22px 20px 4px;text-align:center}
.bm-ico{width:52px;height:52px;margin:0 auto 10px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff;background:linear-gradient(135deg,#00b578,#009d68);box-shadow:0 6px 16px rgba(0,181,120,.32)}
.bm-t{font-size:17px;font-weight:700;color:#1f2329}
.bm-d{padding:8px 22px 0;font-size:13px;color:#6b7280;line-height:1.8;text-align:center}
.bm-price{margin:14px 20px 0;background:#f6fdf9;border:1px solid #d7f0e3;border-radius:10px;padding:10px 14px;display:flex;justify-content:space-between;align-items:center}
.bm-price span{font-size:12px;color:#86909c}
.bm-price b{font-size:21px;color:#c0392b;font-weight:700}
.bm-note{margin:10px 22px 0;font-size:12px;color:#86909c;line-height:1.7;text-align:center}
.bm-btns{display:flex;gap:10px;padding:18px 20px 20px}
.bm-btns button{flex:1;border:none;border-radius:24px;padding:12px 0;font-size:15px;font-weight:600;font-family:inherit;cursor:pointer;transition:transform .12s ease,opacity .12s ease}
.bm-btns button:active{transform:translateY(1px);opacity:.9}
.bm-cancel{background:#f2f3f5;color:#4e5969}
.bm-ok{background:linear-gradient(135deg,#00b578,#009d68);color:#fff;box-shadow:0 6px 14px rgba(0,181,120,.3)}
.bm-ok:disabled{opacity:.65}

/* ============ ADMIN_COMPLAINT_CSS（app.py:4257-4301，旧站原样） ============ */
.rc-box{max-width:412px;padding:0}
.rc-head{display:flex;align-items:center;gap:11px;padding:20px 22px 0}
.rc-hico{width:40px;height:40px;flex:0 0 auto;border-radius:12px;display:flex;align-items:center;justify-content:center;
  font-size:18px;font-weight:800;color:#fff;background:linear-gradient(135deg,#5b8def,#3f6fd8);
  box-shadow:0 6px 14px rgba(63,111,216,.3)}
.rc-h-t{font-size:17px;font-weight:700;color:#1f2329;line-height:1.3}
.rc-h-s{font-size:12px;color:#86909c;margin-top:2px}
.rc-tip{margin:14px 22px 0;font-size:12.5px;line-height:1.75;color:#86909c}
.rc-fields{margin:14px 22px 0;background:#f7f8fa;border:1px solid #eef0f3;border-radius:12px;padding:2px 14px}
.rc-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid #eef0f3;font-size:13.5px}
.rc-row:last-child{border-bottom:none}
.rc-row>.k{color:#86909c;flex:0 0 auto}
.rc-row>.v{color:#1f2329;font-weight:600;text-align:right;word-break:break-all}
.rc-amt-box{margin:14px 22px 0}
.rc-amt-box .lbl{font-size:12.5px;color:#86909c}
.rc-amt-box input{width:100%;margin-top:6px;padding:11px 13px;border:1px solid #dcdfe6;border-radius:10px;
  font-size:16px;font-weight:600;color:#c0392b;font-family:inherit;outline:none;background:#fff;
  transition:border-color .15s ease,box-shadow .15s ease}
.rc-amt-box input:focus{border-color:#00b578;box-shadow:0 0 0 3px rgba(0,181,120,.12)}
.rc-btns{display:flex;gap:10px;padding:18px 22px 20px}
.rc-btns button{flex:1;border:none;border-radius:24px;padding:12px 0;font-size:15px;font-weight:600;
  font-family:inherit;cursor:pointer;transition:transform .12s ease,opacity .12s ease}
.rc-btns button:active{transform:translateY(1px);opacity:.92}
.rc-btns button:disabled{opacity:.6}
.rc-seg{display:flex;background:#f2f3f5;border-radius:10px;padding:3px;margin-top:7px}
.rc-seg button{flex:1;border:none;background:none;font-family:inherit;font-size:13px;color:#4e5969;
  padding:8px 0;border-radius:8px;cursor:pointer;transition:.15s ease;white-space:nowrap}
.rc-seg button.on{background:#fff;color:#00b578;font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.08)}
.rc-gray{background:#f2f3f5;color:#4e5969}
.rc-green{background:linear-gradient(135deg,#00b578,#009d68);color:#fff;box-shadow:0 6px 14px rgba(0,181,120,.3)}
.rc-orange{background:linear-gradient(135deg,#ff9f43,#ef6c00);color:#fff;box-shadow:0 6px 14px rgba(239,108,0,.28)}
.rc2-top{padding:24px 24px 0;text-align:center}
.rc2-ico{width:56px;height:56px;margin:0 auto 13px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:27px;font-weight:800;color:#fff;background:linear-gradient(135deg,#00b578,#009d68);
  box-shadow:0 10px 22px rgba(0,181,120,.3)}
.rc2-ico.warn{background:linear-gradient(135deg,#ffb020,#f58300);box-shadow:0 10px 22px rgba(245,131,0,.3)}
.rc2-t{font-size:18px;font-weight:700;color:#1f2329}
.rc2-d{margin-top:8px;font-size:13px;color:#6b7280;line-height:1.75}
.rc2-d b{color:#c0392b}
@keyframes rc2Pop{0%{transform:scale(.5);opacity:.35}70%{transform:scale(1.08)}100%{transform:scale(1);opacity:1}}
.rc2-ico{animation:rc2Pop .32s cubic-bezier(.2,1.4,.5,1)}

/* ============ CUSTOMER_LIST_CSS（app.py:4304-4343，旧站原样） ============ */
.cs-stats{display:flex;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.cs-stat{flex:1 1 150px;background:#fff;border:1px solid #e5e6eb;border-radius:12px;padding:13px 16px}
.cs-stat .k{font-size:12px;color:#86909c}
.cs-stat .v{font-size:19px;font-weight:700;margin-top:5px;color:#1f2329;white-space:nowrap}
.cs-stat .v.green{color:#00b578}
.cs-stat .v.red{color:#c0392b}
.cs-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.cs-head h2{margin:0}
.cs-filter{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.cs-filter .f-kw{flex:1 1 240px;min-width:200px}
.cs-filter .f-sid{flex:0 0 170px}
.cs-tip{font-size:12px;color:#86909c;margin-bottom:12px;line-height:1.7}
.cs-wrap{overflow-x:auto;border:1px solid #eef0f3;border-radius:10px}
.cs-table{width:100%;border-collapse:separate;border-spacing:0;min-width:1020px}
.cs-table th{background:#f7f8fa;color:#4e5969;font-size:12.5px;font-weight:600;text-align:left;
  padding:10px 12px;border-bottom:1px solid #eef0f3;white-space:nowrap}
.cs-table td{padding:11px 12px;border-bottom:1px solid #f2f3f5;vertical-align:middle;font-size:13.5px}
.cs-table tbody tr:last-child td{border-bottom:none}
.cs-table tbody tr:hover td{background:#fafbfc}
.cs-table .c-id{color:#b6bcc6;width:52px}
.cs-who{min-width:150px}
.cs-name{font-weight:600;color:#1f2329}
.cs-sub{font-size:12px;margin-top:3px;color:#86909c}
.cs-cats{display:inline-block;background:#eef6ff;color:#3f6fd8;border-radius:6px;padding:2px 9px;font-size:12px;font-weight:500}
.cs-num{text-align:right;white-space:nowrap;min-width:104px}
.cs-num b{font-size:15px;color:#c0392b}
.cs-num.muted{color:#86909c}
.cs-flags{display:flex;gap:4px;flex-wrap:wrap;margin-top:5px}
.cs-flags .tag{font-size:11px;padding:1px 7px}
.cs-ops{white-space:nowrap;text-align:right;min-width:158px}
.cs-ops .btn{margin-left:5px;padding:5px 11px;font-size:12.5px}
.cs-quick{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.cs-quick button{border:1px solid #d7f0e3;background:#f6fdf9;color:#00875a;border-radius:20px;
  padding:6px 14px;font-size:13px;font-family:inherit;cursor:pointer;transition:.15s}
.cs-quick button:hover{background:#e6f9f1}
.cs-quick button.on{background:#00b578;border-color:#00b578;color:#fff}
.cs-bonus{margin-top:9px;font-size:12.5px;color:#86909c;line-height:1.7;min-height:18px}
.cs-bonus b{color:#e16c3d;font-size:14px}

/* ============ rank_css（app.py:3778-3779）—— 旧站为「死规则」，此处亦不定义 ============
   旧站 rank_css 自带 <style> 包裹，却被 html_page 注入到页面自身的 <style> 内部
   （app.py:1388 __EXTRA__ 位于 </style> 之前），CSS 解析器把「<style>.rank-badge」
   当非法选择器整条丢弃 → 旧站 .rank-badge 从未生效，排名徽章退化为
   普通 inline span（仅行内 background，深色数字，7×17px）。
   golden 即该形态；故此处刻意不写 .rank-badge 规则以复现旧站实效。 */