/* ===== 支付网关后台样式 ===== */
:root{
  --brand:#4f46e5; --brand-2:#7c3aed; --brand-soft:#eef0ff;
  --bg:#f4f6fb; --card:#fff; --line:#e8ecf4;
  --text:#111827; --text-2:#4b5563; --text-3:#9aa3b2;
  --green:#0f9d58; --green-soft:#e8f7ef;
  --orange:#c2740a; --orange-soft:#fdf3e3;
  --red:#d93636; --red-soft:#fdeceb;
  --sidebar:#161b2c; --sidebar-2:#1f2537;
  --radius:14px; --radius-sm:9px;
  --shadow:0 1px 2px rgba(16,24,40,.04),0 6px 20px rgba(16,24,40,.06);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
code{background:#f1f4f9;padding:2px 6px;border-radius:5px;font-size:12.5px;
     font-family:ui-monospace,SFMono-Regular,Consolas,monospace}

/* ---------- 布局 ---------- */
.layout{display:flex;min-height:100vh}
.sidebar{width:228px;flex:none;background:var(--sidebar);color:#c7cddd;display:flex;flex-direction:column;
         position:sticky;top:0;height:100vh}
.sidebar .brand{display:flex;align-items:center;gap:10px;padding:20px 20px 18px;color:#fff;font-weight:700;font-size:15.5px;
                letter-spacing:.2px;border-bottom:1px solid rgba(255,255,255,.07)}
.sidebar .brand .logo{width:30px;height:30px;border-radius:9px;flex:none;
  background:linear-gradient(135deg,var(--brand),var(--brand-2));display:flex;align-items:center;justify-content:center;
  font-size:15px;color:#fff}
.sidebar nav{padding:12px 10px;flex:1;overflow:auto}
.sidebar nav .group{color:#5f6885;font-size:11.5px;padding:14px 12px 6px;letter-spacing:.6px;text-transform:uppercase}
.sidebar nav a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;color:#c7cddd;
               font-size:13.6px;margin-bottom:2px;transition:.15s}
.sidebar nav a svg{width:17px;height:17px;flex:none;opacity:.85}
.sidebar nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.sidebar nav a.on{background:linear-gradient(135deg,var(--brand),var(--brand-2));color:#fff;
                  box-shadow:0 6px 16px rgba(79,70,229,.35)}
.sidebar .foot{padding:14px 18px;border-top:1px solid rgba(255,255,255,.07);font-size:12px;color:#6b7590}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{height:62px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;
        justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:20}
.topbar .title{font-size:16.5px;font-weight:650}
.topbar .title small{display:block;font-weight:400;font-size:12.5px;color:var(--text-3);margin-top:1px}
.topbar .right{display:flex;align-items:center;gap:14px;font-size:13px;color:var(--text-2)}
.avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--brand),var(--brand-2));
        color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600}
.content{padding:22px 24px 60px;flex:1}

/* ---------- 通用 ---------- */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px 22px}
.card + .card{margin-top:18px}
.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px;flex-wrap:wrap}
.card-head h3{margin:0;font-size:15px;font-weight:650}
.card-head .desc{color:var(--text-3);font-size:12.5px;font-weight:400;margin-top:2px}
.muted{color:var(--text-3)}
.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12.5px}
.row-gap{display:flex;gap:12px;flex-wrap:wrap;align-items:center}

/* 统计卡 */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px;margin-bottom:18px}
.stat{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px;position:relative;overflow:hidden}
.stat .lbl{color:var(--text-3);font-size:12.5px;display:flex;align-items:center;gap:6px}
.stat .val{font-size:25px;font-weight:700;margin-top:6px;letter-spacing:-.4px}
.stat .sub{font-size:12px;color:var(--text-3);margin-top:3px}
.stat .ico{position:absolute;right:16px;top:16px;width:36px;height:36px;border-radius:11px;
           display:flex;align-items:center;justify-content:center}
.stat .ico svg{width:18px;height:18px}
.stat .ico.b{background:var(--brand-soft);color:var(--brand)}
.stat .ico.g{background:var(--green-soft);color:var(--green)}
.stat .ico.o{background:var(--orange-soft);color:var(--orange)}
.stat .ico.r{background:var(--red-soft);color:var(--red)}

/* 按钮 */
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--radius-sm);
     border:1px solid var(--line);background:#fff;color:var(--text-2);font-size:13px;cursor:pointer;
     transition:.15s;white-space:nowrap;font-family:inherit}
.btn:hover{border-color:#cfd6e4;background:#fafbfe}
.btn svg{width:15px;height:15px}
.btn.primary{background:linear-gradient(135deg,var(--brand),var(--brand-2));border-color:transparent;color:#fff;
             box-shadow:0 4px 12px rgba(79,70,229,.28)}
.btn.primary:hover{filter:brightness(1.06)}
.btn.ok{background:var(--green);border-color:transparent;color:#fff}
.btn.danger{color:var(--red);border-color:#f3d2d1}
.btn.danger:hover{background:var(--red-soft)}
.btn.sm{padding:5px 10px;font-size:12.5px}
.btn:disabled{opacity:.55;cursor:not-allowed}

/* 表格 */
.tbl-wrap{overflow-x:auto;border-radius:var(--radius);background:#fff;box-shadow:var(--shadow)}
table.tbl{width:100%;border-collapse:collapse;min-width:900px}
table.tbl th{background:#fafbfe;color:var(--text-3);font-weight:600;font-size:12.5px;text-align:left;
             padding:12px 14px;border-bottom:1px solid var(--line);white-space:nowrap}
table.tbl td{padding:13px 14px;border-bottom:1px solid #f2f5fa;font-size:13.2px;vertical-align:middle}
table.tbl tr:last-child td{border-bottom:none}
table.tbl tbody tr:hover{background:#fafbff}
.empty{padding:52px 0;text-align:center;color:var(--text-3);font-size:13px}

/* 徽章 */
.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:20px;font-size:12.2px;font-weight:500}
.badge::before{content:'';width:5px;height:5px;border-radius:50%;background:currentColor}
.badge.green{background:var(--green-soft);color:var(--green)}
.badge.orange{background:var(--orange-soft);color:var(--orange)}
.badge.red{background:var(--red-soft);color:var(--red)}
.badge.gray{background:#f1f3f8;color:#6b7280}
.badge.blue{background:var(--brand-soft);color:var(--brand)}
.tag{display:inline-block;padding:2px 8px;border-radius:6px;background:#f1f4f9;color:var(--text-2);font-size:12px}

/* 表单 */
.field{margin-bottom:16px}
.field label{display:block;font-size:13px;color:var(--text-2);margin-bottom:6px;font-weight:500}
.field .hint{font-size:12.2px;color:var(--text-3);margin-top:5px;line-height:1.7}
input[type=text],input[type=password],input[type=number],select,textarea{
  width:100%;padding:9px 12px;border:1px solid #dde3ee;border-radius:var(--radius-sm);font-size:13.5px;
  font-family:inherit;background:#fff;transition:.15s;color:var(--text)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(79,70,229,.12)}
textarea{resize:vertical;font-family:ui-monospace,Consolas,monospace;font-size:12.8px;line-height:1.6}
.w-sm{max-width:240px}.w-md{max-width:420px}.w-lg{max-width:640px}
.switch{display:flex;align-items:center;gap:10px}
.switch input{width:auto}

/* 筛选栏 */
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.filters .seg{display:flex;background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);padding:3px;gap:2px}
.filters .seg a{padding:6px 13px;border-radius:7px;font-size:13px;color:var(--text-2)}
.filters .seg a.on{background:var(--brand);color:#fff}
.filters input,.filters select{width:auto;min-width:130px;padding:8px 11px}

/* 分页 */
.pager{display:flex;gap:6px;justify-content:flex-end;margin-top:16px;align-items:center}
.pager a,.pager span{min-width:34px;height:34px;display:flex;align-items:center;justify-content:center;
                     padding:0 10px;border-radius:9px;background:#fff;border:1px solid var(--line);
                     font-size:13px;color:var(--text-2)}
.pager a.on{background:var(--brand);border-color:var(--brand);color:#fff}
.pager .info{margin-right:auto;border:none;background:none;color:var(--text-3);font-size:12.5px}

/* 提示 */
.flash{background:var(--green-soft);color:var(--green);border:1px solid #cdeedd;padding:11px 16px;
       border-radius:var(--radius-sm);margin-bottom:16px;font-size:13.2px}
.flash.err{background:var(--red-soft);color:var(--red);border-color:#f6d5d3}
.alert{background:var(--orange-soft);color:var(--orange);padding:12px 16px;border-radius:var(--radius-sm);
       font-size:13px;margin-bottom:16px;line-height:1.7}

/* 登录页 */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;
  background:radial-gradient(circle at 15% 20%,#4f46e5 0%,transparent 45%),
             radial-gradient(circle at 85% 80%,#7c3aed 0%,transparent 45%),
             linear-gradient(135deg,#0f1222 0%,#1b1f3b 60%,#2a1f4d 100%)}
.login-card{width:100%;max-width:400px;background:rgba(255,255,255,.98);border-radius:20px;padding:38px 34px 30px;
            box-shadow:0 24px 64px rgba(0,0,0,.35)}
.login-logo{width:54px;height:54px;border-radius:16px;margin:0 auto 18px;
  background:linear-gradient(135deg,var(--brand),var(--brand-2));display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 26px rgba(79,70,229,.4)}
.login-logo svg{width:27px;height:27px;color:#fff}
.login-card h1{font-size:21px;text-align:center;margin:0 0 6px;font-weight:700}
.login-card .sub{text-align:center;color:var(--text-3);font-size:13px;margin-bottom:26px}
.login-card .field label{font-size:12.8px}
.login-card input{padding:11px 14px}
.login-btn{width:100%;padding:12px;border:none;border-radius:11px;color:#fff;font-size:14.5px;font-weight:600;
  cursor:pointer;font-family:inherit;margin-top:6px;
  background:linear-gradient(135deg,var(--brand),var(--brand-2));box-shadow:0 8px 20px rgba(79,70,229,.32);
  transition:.15s}
.login-btn:hover{filter:brightness(1.07)}
.login-foot{text-align:center;color:var(--text-3);font-size:12px;margin-top:22px;line-height:1.8}
.login-err{background:var(--red-soft);color:var(--red);padding:10px 14px;border-radius:9px;font-size:13px;
           margin-bottom:16px;text-align:center}

/* 收款码缩略图 */
.qr-card{display:flex;gap:18px;flex-wrap:wrap}
.qr-item{width:210px;border:1px solid var(--line);border-radius:var(--radius);padding:14px;text-align:center;background:#fafbfe}
.qr-item img{width:100%;height:170px;object-fit:contain;background:#fff;border-radius:9px;border:1px solid var(--line)}
.qr-item .ph{width:100%;height:170px;display:flex;align-items:center;justify-content:center;background:#fff;
             border:1.5px dashed #d6dce8;border-radius:9px;color:var(--text-3);font-size:12.5px}
.qr-item .nm{margin-top:10px;font-size:13px;font-weight:600}

/* 弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(15,18,34,.5);display:none;align-items:center;justify-content:center;
            z-index:100;padding:24px;backdrop-filter:blur(2px)}
.modal-mask.on{display:flex}
.modal{background:#fff;border-radius:16px;max-width:560px;width:100%;max-height:86vh;overflow:auto;
       box-shadow:0 24px 60px rgba(0,0,0,.3)}
.modal-head{padding:18px 22px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.modal-head h3{margin:0;font-size:15.5px}
.modal-head .x{cursor:pointer;color:var(--text-3);font-size:20px;line-height:1;padding:2px 6px;border-radius:7px}
.modal-head .x:hover{background:#f1f4f9}
.modal-body{padding:20px 22px}
.kv{display:grid;grid-template-columns:110px 1fr;gap:9px 14px;font-size:13.2px}
.kv .k{color:var(--text-3)}
.kv .v{word-break:break-all}

/* 趋势柱状图 */
.chart{display:flex;align-items:flex-end;gap:6px;height:150px;padding:12px 4px 0;border-bottom:1px solid var(--line)}
.chart .bar{flex:1;background:linear-gradient(180deg,var(--brand),var(--brand-2));border-radius:6px 6px 0 0;
            min-height:3px;position:relative;transition:.2s;opacity:.9}
.chart .bar:hover{opacity:1}
.chart .bar span{position:absolute;bottom:-24px;left:50%;transform:translateX(-50%);font-size:11px;color:var(--text-3);white-space:nowrap}
.chart-x{height:26px}

@media(max-width:900px){
  .sidebar{position:fixed;left:-240px;transition:.25s;z-index:60}
  .sidebar.open{left:0}
  .content{padding:16px}
  .topbar{padding:0 16px}
}
