/* ============================================================
   名品堂 · 礼品卡兑换商城 · 网页后台管理系统（8 模块 + 接口配置）
   方向：现代轻奢 —— 亮 · 干净 · 贵（完全继承设计稿 admin.css）
   变化仅两处：删除"设计稿展示页"专用样式；.app 改为全屏自适应。
   组件样式（导航/表格/标签/表单/KPI）与设计稿逐字一致。
   ============================================================ */
:root{
  --white:#FFFFFF;
  --warm:#F7F7F5;
  --warm-2:#F4F3F0;
  --ink:#0F0F0F;
  --ink2:#1A1A1A;
  --t2:#6E6E6E;
  --t3:#9A9A9A;
  --gold:#C6A15B;
  --gold-dp:#A8823C;
  --gold-line:rgba(198,161,91,.42);
  --gold-bg:#FCFAF4;
  --line:#EAEAE7;
  --line-2:#F1F1EE;
  --wx:#07C160;
  --r-card:10px;
  --r-btn:8px;
  --r-tag:4px;
  --gap:20px;
  --font:-apple-system,BlinkMacSystemFont,"PingFang SC","Source Han Sans SC","Noto Sans SC","Microsoft YaHei",system-ui,sans-serif;
  --mono:ui-monospace,Menlo,Consolas,monospace;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-font-smoothing:antialiased}
body{font-family:var(--font);color:var(--ink);background:#F2F2F0;overflow:hidden}
svg{display:block}

/* ---------- 应用壳（全屏） ---------- */
.app{width:100vw;height:100vh;overflow:hidden;display:flex;background:#fff}

/* ---------- 左侧导航（固定） ---------- */
.side{width:220px;flex:0 0 220px;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column}
.brand{height:60px;flex:0 0 60px;display:flex;align-items:center;gap:10px;padding:0 18px;border-bottom:1px solid var(--line)}
.brand .mk{width:27px;height:27px;border-radius:7px;border:1px solid var(--gold-line);background:var(--gold-bg);display:flex;align-items:center;justify-content:center;color:var(--gold-dp);flex:0 0 auto}
.brand .mk svg{width:15px;height:15px}
.brand .nm{font-size:15px;font-weight:700;letter-spacing:.03em;color:var(--ink);line-height:1.1}
.brand .nm s{display:block;font-size:9.5px;font-weight:500;letter-spacing:.12em;color:var(--t3);text-decoration:none;margin-top:2px}
.snavwrap{flex:1;overflow-y:auto;padding:10px 0}
.sgrp{font-size:10.5px;font-weight:700;letter-spacing:.18em;color:var(--t3);padding:14px 18px 7px;text-transform:uppercase}
.snav{display:flex;align-items:center;gap:11px;height:42px;padding:0 18px;font-size:13.5px;color:var(--t2);position:relative;white-space:nowrap;cursor:pointer;user-select:none}
.snav svg{width:17px;height:17px;flex:0 0 auto}
.snav:hover{color:var(--ink)}
.snav.on{background:var(--gold-bg);color:var(--ink);font-weight:700}
.snav.on::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:0 3px 3px 0;background:var(--gold)}
.snav .cnt{margin-left:auto;font-size:10.5px;font-weight:700;color:var(--gold-dp);background:var(--gold-bg);border:1px solid var(--gold-line);border-radius:999px;padding:1px 7px}
.sidefoot{flex:0 0 auto;border-top:1px solid var(--line);padding:12px 16px;display:flex;align-items:center;gap:10px}
.sidefoot .av{width:30px;height:30px;border-radius:50%;background:var(--warm);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:var(--ink);flex:0 0 auto}
.sidefoot .who{flex:1;min-width:0}
.sidefoot .who .n{font-size:12.5px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sidefoot .who .r{font-size:10.5px;color:var(--t3);margin-top:1px}
.sidefoot .out{color:var(--t3);cursor:pointer}
.sidefoot .out:hover{color:var(--ink)}
.sidefoot .out svg{width:16px;height:16px}

/* ---------- 主区 ---------- */
.main{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--warm)}
.topbar{height:60px;flex:0 0 60px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 24px;gap:14px}
.topbar h1{font-size:17px;font-weight:700;letter-spacing:.01em;color:var(--ink);white-space:nowrap}
.topbar .crumb{font-size:12px;color:var(--t3);white-space:nowrap}
.topbar .sp{flex:1}
.tb-ico{width:34px;height:34px;border-radius:8px;border:1px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:center;color:var(--t2);position:relative;flex:0 0 auto}
.tb-ico svg{width:17px;height:17px}
.tb-ico .bdg{position:absolute;top:-4px;right:-4px;min-width:15px;height:15px;border-radius:999px;background:var(--gold-dp);color:#fff;font-size:9.5px;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 3px;border:1.5px solid #fff}
.content{flex:1;min-height:0;overflow:auto;padding:20px 24px;display:flex;flex-direction:column;gap:16px}

/* ---------- 通用组件 ---------- */
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r-card);display:flex;flex-direction:column;min-height:0}
.card>.chd{flex:0 0 auto;display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line)}
.card>.chd h3{font-size:14px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px}
.card>.chd h3::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--gold)}
.card>.chd .sp{flex:1}
.card>.chd .mut{font-size:12px;color:var(--t3)}

.btn{height:34px;padding:0 15px;border-radius:var(--r-btn);font-size:12.5px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:7px;white-space:nowrap;flex:0 0 auto;font-family:inherit;cursor:pointer;border:0;background:none}
.btn svg{width:15px;height:15px}
.btn.pri{background:#101010;color:#fff;position:relative}
.btn.pri::after{content:"";position:absolute;inset:0;border-radius:inherit;border:1px solid rgba(198,161,91,.55);pointer-events:none}
.btn.sec{background:#fff;color:var(--ink);border:1px solid var(--line)}
.btn.sec:hover{border-color:#D8D8D4}
.btn.gold{background:#fff;color:var(--gold-dp);border:1px solid var(--gold-line)}
.btn.goldfill{background:var(--gold-bg);color:var(--gold-dp);border:1px solid var(--gold-line)}
.btn.sm{height:28px;padding:0 11px;font-size:12px;border-radius:6px}
.btn.sm svg{width:13px;height:13px}
.btn.lg{height:42px;font-size:14px}

.ipt{height:34px;border:1px solid var(--line);border-radius:var(--r-btn);background:#fff;display:flex;align-items:center;gap:8px;padding:0 12px;font-size:12.5px;color:var(--t2);white-space:nowrap}
.ipt svg{width:14px;height:14px;color:var(--t3);flex:0 0 auto}
.ipt .ph{color:var(--t3)}
.ipt.srch{width:250px}
.ipt.sel .car{margin-left:auto}
.ipt.sel .car svg{width:12px;height:12px}
.fbar{flex:0 0 auto;display:flex;align-items:center;gap:10px;flex-wrap:nowrap;overflow:hidden}
.fbar .sp{flex:1}
.flabel{font-size:12px;color:var(--t3);white-space:nowrap}

.tabs{flex:0 0 auto;display:flex;align-items:flex-end;gap:26px;padding:0 2px;border-bottom:1px solid var(--line)}
.tab{font-size:13.5px;color:var(--t2);padding:0 2px 13px;position:relative;white-space:nowrap;cursor:pointer;user-select:none}
.tab .n{font-size:11px;color:var(--t3);margin-left:5px;font-variant-numeric:tabular-nums}
.tab:hover{color:var(--ink)}
.tab.on{color:var(--ink);font-weight:700}
.tab.on::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--gold)}

.pills{display:flex;gap:8px;flex-wrap:nowrap}
.pill{height:32px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:12.5px;color:var(--t2);display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.pill.on{background:#101010;color:#fff;border-color:#101010;font-weight:600;position:relative}
.pill.on::after{content:"";position:absolute;inset:0;border-radius:999px;border:1px solid rgba(198,161,91,.55);pointer-events:none}

/* 表格 */
.tblwrap{flex:1;min-height:0;overflow:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:12.5px;table-layout:fixed}
table.tbl th{background:var(--warm);color:var(--t2);font-weight:600;text-align:left;padding:0 14px;height:42px;font-size:12px;border-bottom:1px solid var(--line);white-space:nowrap;position:relative}
table.tbl th .srt{display:inline-flex;align-items:center;gap:4px}
table.tbl th .srt svg{width:11px;height:11px;color:var(--t3)}
table.tbl td{padding:0 14px;height:48px;border-bottom:1px solid var(--line-2);color:var(--ink);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.tbl tbody tr:last-child td{border-bottom:0}
table.tbl tbody tr:hover{background:#FAFAF8}
table.tbl .r{text-align:right;font-variant-numeric:tabular-nums}
table.tbl th.r{text-align:right}
table.tbl .mono{font-family:var(--mono);font-size:12px;letter-spacing:.01em}
table.tbl .mut{color:var(--t3)}
table.tbl .mut2{color:var(--t2)}
table.tbl .strong{font-weight:700;font-variant-numeric:tabular-nums}
table.tbl .gold{color:var(--gold-dp);font-weight:700;font-variant-numeric:tabular-nums}
table.tbl .th2{color:var(--t3);font-weight:400}
table.tbl tbody tr.hi{background:var(--gold-bg)}
table.tbl tbody tr.hi:hover{background:#FAF6EC}
table.tbl.compact td{height:44px}
table.tbl.compact th{height:38px}
.tbl td.order-pay-cell{white-space:normal;overflow:visible;text-overflow:clip;padding-top:6px;padding-bottom:6px}
.order-pay{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.order-pay .tag{max-width:100%;box-sizing:border-box}
.tblfoot{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:11px 18px;border-top:1px solid var(--line);font-size:12px;color:var(--t3)}
.tblfoot .sp{flex:1}
.pg{display:flex;gap:5px}
.pg i{min-width:26px;height:26px;border-radius:6px;border:1px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:center;font-size:11.5px;color:var(--t2);font-style:normal;padding:0 6px}
.pg i.on{background:#101010;color:#fff;border-color:#101010;font-weight:600}

/* 状态色块标签（仅用规范内颜色区分：金 / 墨 / 灰） */
.tag{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;border-radius:var(--r-tag);font-size:11.5px;font-weight:600;white-space:nowrap}
.tag i{width:5px;height:5px;border-radius:50%;background:currentColor}
.tag.gold{background:var(--gold-bg);border:1px solid var(--gold-line);color:var(--gold-dp)}
.tag.ink{background:#1A1A1A;color:#fff}
.tag.grey{background:#F1F1EE;border:1px solid var(--line);color:var(--t2)}
.tag.grey2{background:transparent;border:1px solid var(--line);color:var(--t3)}
.tag.wx{background:rgba(7,193,96,.07);border:1px solid rgba(7,193,96,.3);color:var(--wx)}

/* 复选框 / 开关 */
.ck{width:16px;height:16px;border-radius:4px;border:1.5px solid #CFCFCB;background:#fff;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;cursor:pointer}
.ck svg{width:11px;height:11px;color:#fff;opacity:0}
.ck.on{background:var(--gold-dp);border-color:var(--gold-dp)}
.ck.on svg{opacity:1}
.swt{width:36px;height:20px;border-radius:999px;background:var(--line);position:relative;flex:0 0 auto;cursor:pointer}
.swt::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:.2s}
.swt.on{background:var(--gold)}
.swt.on::after{left:18px}
.swt.sm{width:30px;height:17px}
.swt.sm::after{width:13px;height:13px}
.swt.sm.on::after{left:15px}

/* 文字链接操作 */
.lnk{color:var(--gold-dp);font-size:12.5px;font-weight:600;white-space:nowrap;cursor:pointer;user-select:none}
.lnk:hover{opacity:.8}
.lnk.ink{color:var(--ink)}
.lnk.mut{color:var(--t2);font-weight:500}
.divx{display:inline-block;width:1px;height:11px;background:var(--line);vertical-align:-1px;margin:0 9px}

/* ===== 统一分页器（参考有赞/微盟：边框方块按钮 + 当前页填充 + 每页条数下拉） ===== */
.pginfo{font-size:12.5px;color:var(--t3);margin-right:14px;white-space:nowrap}
.pgdrop{position:relative;display:inline-flex;margin-right:12px}
.pgcur{height:32px;padding:0 12px;border:1px solid var(--line);border-radius:6px;background:#fff;font-size:12.5px;color:var(--t2);display:inline-flex;align-items:center;cursor:pointer;user-select:none;white-space:nowrap;transition:border-color .15s}
.pgcur:hover{border-color:var(--gold);color:var(--gold-dp)}
.pgmenu{display:none;position:absolute;bottom:38px;right:0;min-width:104px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px rgba(20,16,8,.12);padding:4px;z-index:60;flex-direction:column}
.pgmenu.show{display:flex}
.pgmenu i{height:32px;padding:0 12px;border-radius:6px;font-size:12.5px;font-style:normal;color:var(--t2);display:flex;align-items:center;cursor:pointer;white-space:nowrap}
.pgmenu i:hover{background:var(--gold-bg,rgba(198,161,91,.1));color:var(--gold-dp)}
.pgmenu i.on{color:var(--gold-dp);font-weight:700;background:rgba(198,161,91,.12)}
.pg2{display:inline-flex;align-items:center;gap:6px}
.pg2 i{width:32px;height:32px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--t2);font-size:13px;font-style:normal;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;user-select:none;transition:all .15s;line-height:1}
.pg2 i:hover{border-color:var(--gold);color:var(--gold-dp)}
.pg2 i.on{background:var(--gold);border-color:var(--gold);color:#fff;font-weight:700;cursor:default}
.pg2 i.dis{opacity:.4;pointer-events:none;cursor:not-allowed}

/* KPI 卡 */
.kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;flex:0 0 auto}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--r-card);padding:14px 16px}
.kpi .k{font-size:11.5px;color:var(--t2);display:flex;align-items:center;gap:7px}
.kpi .k svg{width:14px;height:14px;color:var(--t3)}
.kpi .v{font-size:24px;font-weight:700;color:var(--ink);margin-top:7px;font-variant-numeric:tabular-nums;letter-spacing:.01em;display:flex;align-items:baseline;gap:3px}
.kpi .v s{font-size:13px;font-weight:600;text-decoration:none}
.kpi .v.gold{color:var(--gold-dp)}
.kpi .d{font-size:11.5px;color:var(--t3);margin-top:7px;padding-top:7px;border-top:1px solid var(--line-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi .d b{color:var(--gold-dp);font-weight:700}

/* 进度条 / 分布条 */
.dist{display:flex;flex-direction:column;gap:10px}
.dist .drow .dt{display:flex;align-items:baseline;justify-content:space-between;font-size:12.5px;color:var(--t2);margin-bottom:5px}
.dist .drow .dt b{color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}
.dist .bar{height:8px;border-radius:999px;background:var(--line-2);overflow:hidden}
.dist .bar i{display:block;height:100%;border-radius:999px;background:var(--gold)}
.dist .bar i.inkc{background:#1A1A1A}
.dist .bar i.greyc{background:#CFCFCB}

/* 说明条（金） */
.gtip{flex:0 0 auto;background:var(--gold-bg);border:1px solid var(--gold-line);border-radius:var(--r-btn);padding:11px 14px;display:flex;gap:10px}
.gtip svg{width:15px;height:15px;color:var(--gold-dp);flex:0 0 auto;margin-top:1px}
.gtip .tx{font-size:12px;color:var(--t2);line-height:1.6}
.gtip .tx b{color:var(--ink);font-weight:700}
.gtip .tx .gold{color:var(--gold-dp);font-weight:700}

/* 表单块 */
.frow{margin-bottom:15px}
.frow .lb{font-size:12.5px;font-weight:600;color:var(--ink);margin-bottom:7px;display:flex;align-items:center;gap:6px}
.frow .lb .req{color:var(--gold-dp)}
.frow .hint{font-size:11.5px;color:var(--t3);margin-top:6px;line-height:1.5}
.seg{display:flex;gap:8px}
.seg .s{flex:1;height:38px;border:1px solid var(--line);border-radius:var(--r-btn);background:#fff;display:flex;align-items:center;justify-content:center;gap:7px;font-size:13px;color:var(--t2);font-weight:600;cursor:pointer;user-select:none}
.seg .s.on{border-color:var(--gold-line);background:var(--gold-bg);color:var(--gold-dp);position:relative}
.seg .s.on::after{content:"";position:absolute;inset:0;border-radius:inherit;border:1px solid var(--gold-line);pointer-events:none}
.seg .s .ck{border-color:#CFCFCB}
.seg .s.on .ck{background:var(--gold-dp);border-color:var(--gold-dp)}
.seg .s.on .ck svg{opacity:1}
.fin{width:100%;height:38px;border:1px solid var(--line);border-radius:var(--r-btn);background:#fff;display:flex;align-items:center;padding:0 13px;font-size:13px;color:var(--ink);font-family:inherit}
input.fin,select.fin,textarea.fin{outline:none;appearance:auto}
input.fin:focus,select.fin:focus,textarea.fin:focus{border-color:var(--gold-line)}
.fin .unit{margin-left:auto;font-size:12px;color:var(--t3);white-space:nowrap}
textarea.fin{height:66px;padding:10px 13px;line-height:1.6;resize:none;display:block}
.amtpick{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.amtpick .a{height:40px;border:1px solid var(--line);border-radius:var(--r-btn);background:#fff;display:flex;align-items:center;justify-content:center;font-size:13.5px;font-weight:600;color:var(--t2);font-variant-numeric:tabular-nums;cursor:pointer;user-select:none}
.amtpick .a:hover{border-color:#D8D8D4}
.amtpick .a.on{border-color:var(--gold-line);background:var(--gold-bg);color:var(--gold-dp);position:relative}
.amtpick .a.on::after{content:"";position:absolute;inset:0;border-radius:inherit;border:1px solid var(--gold-line)}
.amtpick .a.off{color:#C4C4C0;background:var(--warm);border-style:dashed;cursor:not-allowed;pointer-events:none}

/* 制卡结果中显示可扫码的真实二维码 */
.qrsvg{width:64px;height:64px;display:block;image-rendering:pixelated}

/* ---------- 1 · 登录页 ---------- */
.login{display:flex;height:100%;width:100%}
.login .lp{width:56%;background:#fff;border-right:1px solid var(--line);padding:0 72px;display:flex;flex-direction:column;justify-content:center;position:relative}
.login .lp .bmark{display:flex;align-items:center;gap:12px}
.login .lp .bmark .mk{width:40px;height:40px;border-radius:10px;border:1px solid var(--gold-line);background:var(--gold-bg);display:flex;align-items:center;justify-content:center;color:var(--gold-dp)}
.login .lp .bmark .mk svg{width:22px;height:22px}
.login .lp .bmark .nm{font-size:20px;font-weight:700;letter-spacing:.04em}
.login .lp .bmark .nm s{display:block;font-size:11px;font-weight:500;letter-spacing:.16em;color:var(--t3);text-decoration:none;margin-top:3px}
.login .lp h2{font-size:32px;font-weight:600;line-height:1.35;letter-spacing:.01em;margin-top:44px}
.login .lp h2 em{font-style:normal;color:var(--gold-dp)}
.login .lp .rule{width:48px;height:1px;background:var(--gold-line);margin:26px 0}
.login .lp .feats{display:flex;flex-direction:column;gap:18px;margin-top:4px}
.login .lp .feats .f{display:flex;align-items:center;gap:13px}
.login .lp .feats .f .ic{width:34px;height:34px;border-radius:9px;background:var(--warm);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--gold-dp);flex:0 0 auto}
.login .lp .feats .f .ic svg{width:17px;height:17px}
.login .lp .feats .f .tx b{font-size:13.5px;font-weight:700;color:var(--ink);display:block}
.login .lp .feats .f .tx span{font-size:12px;color:var(--t2);display:block;margin-top:2px}
.login .lp .cr{position:absolute;left:72px;bottom:44px;font-size:11.5px;color:var(--t3)}
.login .rp{flex:1;background:var(--warm);display:flex;align-items:center;justify-content:center;padding:0 40px}
.lcard{width:392px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:38px 36px 34px}
.lcard .t{font-size:21px;font-weight:700;letter-spacing:.01em}
.lcard .s{font-size:12.5px;color:var(--t3);margin-top:7px}
.lcard .form{margin-top:28px}
.lcard .fg{margin-bottom:16px}
.lcard .fg .lb{font-size:12.5px;font-weight:600;color:var(--ink);margin-bottom:8px}
.lcard .fg .ipt2{height:46px;border:1px solid var(--line);border-radius:var(--r-btn);display:flex;align-items:center;gap:11px;padding:0 15px;background:#fff}
.lcard .fg .ipt2:focus-within{border-color:var(--gold-line)}
.lcard .fg .ipt2 svg{width:17px;height:17px;color:var(--t3);flex:0 0 auto}
.lcard .fg .ipt2 input{flex:1;min-width:0;border:0;outline:none;background:transparent;font-size:14px;color:var(--ink);font-family:inherit}
.lcard .fg .ipt2 .code{font-size:14px;color:var(--gold-dp);font-weight:600;letter-spacing:.04em;cursor:pointer;white-space:nowrap}
.lcard .fg .ipt2 .vline{width:1px;height:20px;background:var(--line)}
.lcard .fg .ipt2 .cap{height:36px;width:96px;flex:0 0 auto;border-radius:6px;cursor:pointer;border:1px solid var(--line);background:#f4f6f8;display:block}
.lcard .mid{display:flex;align-items:center;justify-content:space-between;margin:6px 0 22px;font-size:12.5px}
.lcard .mid .rm{display:flex;align-items:center;gap:8px;color:var(--t2);cursor:pointer}
.lcard .mid .fg2{color:var(--gold-dp);font-weight:600;cursor:pointer}
.lcard .go{width:100%;height:46px;font-size:14.5px}
.lcard .foot{font-size:11px;color:var(--t3);text-align:center;margin-top:20px;padding-top:16px;border-top:1px solid var(--line-2);line-height:1.6}
.lcard .err{font-size:12px;color:#A02020;margin-top:12px;display:none}
.lcard .err.show{display:block}

/* ---------- 3 · 卡密生成 ---------- */
.gen{display:flex;gap:16px;flex:1;min-height:0}
.gen .lcol{width:388px;flex:0 0 388px;display:flex;flex-direction:column;min-height:0}
.gen .lcol .card{flex:1;min-height:0;overflow:auto}
.gen .lcol .cbody{padding:18px}
.gen .rcol{flex:1;min-width:0;display:flex;flex-direction:column;gap:16px;min-height:0}
.gstat{display:grid;grid-template-columns:repeat(4,1fr);gap:0;background:#fff;border:1px solid var(--line);border-radius:var(--r-card);flex:0 0 auto;overflow:hidden}
.gstat .s{padding:14px 18px;border-right:1px solid var(--line-2);min-width:0}
.gstat .s:last-child{border-right:0}
.gstat .s .k{font-size:11.5px;color:var(--t2)}
.gstat .s .v{font-size:19px;font-weight:700;color:var(--ink);margin-top:6px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gstat .s .v.gold{color:var(--gold-dp)}
.gstat .s .v s{font-size:12px;text-decoration:none;font-weight:600}
.genform .btn.go{width:100%;height:44px;font-size:14px;margin-top:4px}

/* ---------- 5 · 商品管理 ---------- */
.prod{display:flex;gap:16px;flex:1;min-height:0}
/* ★ 上下排列布局：分类选择区在上（横向平铺），商品列表在下 */
.prodv{display:flex;flex-direction:column;gap:12px;flex:1;min-height:0}
.catbar{flex:0 0 auto;background:#fff;border:1px solid var(--line);border-radius:var(--r-card);padding:12px 16px;overflow-x:auto}
.catbar .cg{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0}
.catbar .cgl{font-size:10.5px;font-weight:700;letter-spacing:.14em;color:var(--t3);white-space:nowrap;flex:0 0 auto}
.catbar .cgd{width:1px;height:18px;background:var(--line);flex:0 0 auto;margin:0 4px}
.cnode{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 13px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:12.5px;color:var(--t2);white-space:nowrap;cursor:pointer;user-select:none;flex:0 0 auto}
.cnode .ic{width:14px;height:14px;color:var(--t3);flex:0 0 auto}
.cnode .n{font-size:10.5px;font-weight:700;color:var(--t3);font-variant-numeric:tabular-nums}
.cnode:hover{color:var(--ink);border-color:#D8D8D4}
.cnode.on{background:var(--gold-bg);border-color:var(--gold-line);color:var(--ink);font-weight:700}
.cnode.on .ic{color:var(--gold-dp)}
.cnode.on .n{color:var(--gold-dp)}
.tree{width:224px;flex:0 0 224px}
.tree .card{overflow:auto}
.tree .tgrp{font-size:10.5px;font-weight:700;letter-spacing:.16em;color:var(--t3);padding:14px 16px 8px}
.tnode{display:flex;align-items:center;gap:9px;height:38px;padding:0 16px;font-size:13px;color:var(--t2);position:relative;cursor:pointer;user-select:none}
.tnode .ic{width:15px;height:15px;color:var(--t3);flex:0 0 auto}
.tnode .n{margin-left:auto;font-size:11px;color:var(--t3);font-variant-numeric:tabular-nums}
.tnode:hover{color:var(--ink)}
.tnode.on{background:var(--gold-bg);color:var(--ink);font-weight:700}
.tnode.on::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--gold)}
.tnode.on .n{color:var(--gold-dp);font-weight:600}
.prod .rt{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}
.thumb{width:38px;height:38px;border-radius:7px;display:flex;align-items:center;justify-content:center;overflow:hidden;flex:0 0 auto}
.ph-a{background:#F4F2EE}.ph-b{background:#F4F1F0}.ph-c{background:#F2F3F0}.ph-d{background:#F5F3EE}
.thumb svg{width:56%;height:56%}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}

/* ---- 商品图片上传（编辑弹窗） ---- */
.upgrid{display:flex;flex-wrap:wrap;gap:10px}
.upitem{width:86px;height:86px;border-radius:9px;border:1px solid var(--line);overflow:hidden;position:relative;background:var(--warm)}
.upitem img{width:100%;height:100%;object-fit:cover;display:block}
.upitem.main{border-color:var(--gold-line);box-shadow:0 0 0 1px var(--gold-line)}
.upitem .mtag{position:absolute;left:0;bottom:0;right:0;background:rgba(15,15,15,.62);color:#fff;font-size:10px;text-align:center;padding:2px 0;letter-spacing:.06em}
.upitem .del{position:absolute;top:3px;right:3px;width:18px;height:18px;border-radius:50%;background:rgba(15,15,15,.62);color:#fff;font-size:12px;line-height:18px;text-align:center;cursor:pointer}
.upitem .del:hover{background:#A02020}
.upitem .setm{position:absolute;left:0;right:0;bottom:0;background:rgba(198,161,91,.88);color:#fff;font-size:10px;text-align:center;padding:2px 0;cursor:pointer;display:none}
.upitem:hover .setm{display:block}
.upadd{width:86px;height:86px;border-radius:9px;border:1.5px dashed var(--gold-line);background:var(--gold-bg);color:var(--gold-dp);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;font-size:11.5px;font-weight:600;cursor:pointer}
.upadd svg{width:18px;height:18px}
.upadd:hover{background:#FAF4E6}

/* ---------- 7 · 用户与余额 ---------- */
.subrow td{background:var(--gold-bg);border-bottom:1px solid var(--line);height:auto!important;padding:0!important;white-space:normal}
.subwrap{display:flex;gap:0;padding:16px 18px}
.subwrap .sb{flex:1.5;min-width:0;padding-right:20px}
.subwrap .sb2{width:392px;flex:0 0 392px;border-left:1px solid var(--gold-line);padding-left:20px}
.subh{font-size:12px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px;margin-bottom:11px}
.subh::before{content:"";width:3px;height:12px;border-radius:2px;background:var(--gold)}
.subh .mut{font-size:11.5px;color:var(--t3);font-weight:400}
table.tbl.mini{font-size:12px}
table.tbl.mini td{height:36px;border-bottom:1px solid var(--line-2);padding:0 12px}
table.tbl.mini th{height:32px;padding:0 12px;background:transparent;border-bottom:1px solid var(--line)}
table.tbl.mini tbody tr:nth-child(odd){background:#fff}
.flowlist{display:flex;flex-direction:column}
.flowlist .fr{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-2);font-size:12px}
.flowlist .fr:last-child{border-bottom:0}
.flowlist .fr .dt{color:var(--t3);font-size:11px;font-variant-numeric:tabular-nums;flex:0 0 auto}
.flowlist .fr .fx{flex:1;color:var(--t2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.flowlist .fr .fa{font-weight:700;font-variant-numeric:tabular-nums;flex:0 0 auto}
.flowlist .fr .fa.in{color:var(--gold-dp)}
.flowlist .fr .fa.out{color:var(--ink)}

/* ---------- 8 · 门店与设置 ---------- */
.store{display:flex;flex-direction:column;gap:16px;flex:1;min-height:0}
/* ★ 按列表内容自适应高度，不再固定窗口（内容少时不留大片空白） */
.store .card{flex:0 0 auto;min-height:0}
.store .card .tblwrap{flex:0 0 auto;overflow:visible}

/* ---------- 9 · 接口配置（新增，同一设计语言） ---------- */
.setgrid{display:grid;grid-template-columns:1fr 1fr;gap:0 28px}
.setfoot{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:12px 18px;border-top:1px solid var(--line);font-size:12px;color:var(--t3)}
.setfoot .sp{flex:1}

/* ---------- 弹窗 / 提示（运行时组件，继承同一设计语言） ---------- */
.mask{position:fixed;inset:0;background:rgba(15,15,15,.42);display:none;align-items:center;justify-content:center;z-index:60}
.mask.show{display:flex}
.modal{width:460px;max-width:92vw;background:#fff;border:1px solid var(--line);border-radius:12px;padding:22px 24px 20px;max-height:88vh;overflow:auto;position:relative}
.modal::after{content:"";position:absolute;inset:0;border-radius:12px;border:1px solid rgba(198,161,91,.35);pointer-events:none}
.modal.wide{width:560px}
.modal h4{font-size:15.5px;font-weight:700;display:flex;align-items:center;gap:8px;margin-bottom:4px}
.modal h4::before{content:"";width:3px;height:14px;border-radius:2px;background:var(--gold)}
.modal .msub{font-size:12.5px;color:var(--t3);margin:2px 0 16px;line-height:1.6}
.modal .hint{font-size:12.5px;color:var(--t3);margin:10px 0 0;line-height:1.6}
.modal .dl{display:flex;flex-direction:column;margin-bottom:14px}
.modal .dl .r{display:flex;align-items:baseline;gap:12px;padding:7px 0;border-bottom:1px solid var(--line-2);font-size:12.5px}
.modal .dl .r .k{color:var(--t3);flex:0 0 88px}
.modal .dl .r .v{color:var(--ink);font-weight:600;word-break:break-all;white-space:normal;line-height:1.5}
.modal .btns{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;position:relative;z-index:1}
.warn{background:var(--gold-bg);border:1px solid var(--gold-line);border-radius:var(--r-btn);padding:10px 12px;font-size:12px;color:var(--t2);line-height:1.65;margin:12px 0 4px}
.warn b{color:var(--gold-dp);font-weight:700}

.toast{position:fixed;left:50%;bottom:36px;transform:translateX(-50%) translateY(16px);background:#101010;color:#fff;font-size:13px;padding:11px 20px;border-radius:8px;opacity:0;pointer-events:none;transition:.25s;z-index:70;box-shadow:0 0 0 1px rgba(198,161,91,.55);max-width:80vw}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.loading{position:fixed;top:14px;right:16px;display:none;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:12px;color:var(--t2);z-index:65}
.loading.show{display:flex}
.loading .spin{width:13px;height:13px;border:2px solid var(--line);border-top-color:var(--gold);border-radius:50%;animation:sp .7s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}
.empty{padding:44px 0;text-align:center;font-size:12.5px;color:var(--t3)}

/* ---------- 10 · 总览图表栅格 / 设置双列（抽出内联样式，便于响应式覆盖） ---------- */
.dashgrid{display:grid;grid-template-columns:1.62fr 1fr;grid-template-rows:minmax(0,1fr);gap:16px;flex:0 0 auto;height:296px;min-height:0}
/* 右卡（状态分布+提示）在 296px 内完整放下：收紧行距与提示内边距 */
.dashgrid .dist{gap:7px}
.dashgrid .dist .drow .dt{margin-bottom:4px}
.dashgrid .gtip{padding:8px 12px;margin-top:6px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}

/* ---------- 11 · 手机端适配（★ 2026-10-07：≤900px 竖屏可用，侧栏变顶部横滑导航） ---------- */
@media (max-width:900px){
  /* 应用壳：左右布局 → 上下布局 */
  .app{flex-direction:column;height:100vh;height:100dvh}
  .main{min-height:0}
  .side{width:100%;flex:0 0 auto;flex-direction:row;align-items:stretch;border-right:0;border-bottom:1px solid var(--line)}
  .brand{height:46px;flex:0 0 auto;border-bottom:0;padding:0 6px 0 12px;gap:8px}
  .brand .nm{font-size:13px}
  .brand .nm s{display:none}
  .snavwrap{flex:1;min-width:0;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;padding:4px 2px;-webkit-overflow-scrolling:touch}
  .sgrp{display:none}
  .snav{flex:0 0 auto;height:38px;padding:0 11px;font-size:12.5px;gap:6px}
  .snav.on{background:none}
  .snav.on::before{left:8px;right:8px;top:auto;bottom:0;width:auto;height:3px;border-radius:3px 3px 0 0}
  .snav .cnt{display:none}
  .sidefoot{border-top:0;border-left:1px solid var(--line);padding:6px 10px}
  .sidefoot .who{display:none}
  /* 顶栏：允许折行、压缩字号 */
  .topbar{height:auto;min-height:52px;flex:0 0 auto;flex-wrap:wrap;padding:8px 12px;gap:8px 10px}
  .topbar h1{font-size:15px}
  .topbar .crumb{display:none}
  .topbar .flabel{font-size:11px;white-space:normal}
  .topbar .btn{height:30px;padding:0 11px;font-size:12px}
  .content{padding:12px;gap:12px;-webkit-overflow-scrolling:touch}
  /* KPI 两列 */
  .kpis{grid-template-columns:repeat(2,1fr);gap:10px}
  .kpi{padding:11px 12px}
  .kpi .v{font-size:18px;margin-top:5px}
  .kpi .d{white-space:normal}
  /* 总览 / 设置 / 制卡：改单列 */
  .dashgrid{grid-template-columns:1fr;grid-template-rows:none;flex:0 0 auto;height:auto}
  .dashgrid .card{min-height:220px}
  .g2{grid-template-columns:1fr}
  .setgrid{grid-template-columns:1fr}
  .gen{flex-direction:column;flex:0 0 auto;overflow:visible}
  .gen .lcol{width:100%;flex:0 0 auto}
  .gen .lcol .card{overflow:visible}
  /* 卡片头与 tabs 可换行/横滑 */
  .card>.chd{flex-wrap:wrap;gap:8px;padding:12px 14px}
  .tabs{overflow-x:auto;gap:20px;-webkit-overflow-scrolling:touch}
  /* 表格：按列宽展开，容器横向滚动；筛选栏换行 */
  .tblwrap{overflow:auto;-webkit-overflow-scrolling:touch}
  table.tbl{width:max-content;min-width:100%}
  .fbar{flex-wrap:wrap;overflow:visible}
  .fbar .sp{display:none}
  /* 弹窗全宽 */
  .modal,.modal.wide{width:94vw;padding:18px 16px}
  .modal .btns{flex-wrap:wrap}
  /* 登录页：双栏 → 上下 */
  .login{flex-direction:column;overflow:auto}
  .login .lp{width:100%;border-right:0;border-bottom:1px solid var(--line);padding:32px 24px}
  .login .lp h2{font-size:22px;margin-top:22px}
  .login .lp .rule{margin:16px 0}
  .login .lp .feats{display:none}
  .login .lp .cr{position:static;margin-top:22px}
  .login .rp{padding:26px 18px;align-items:flex-start}
  .login .rp>*{width:100%;max-width:420px}
}

/* ================= 商城装修（2026-10-15 新增） ================= */
.decov{display:flex;flex-direction:column;gap:var(--gap);min-height:0;overflow:auto;padding-bottom:10px}
.decov .card{flex:0 0 auto}
.decov .card .hint{padding:10px 18px 14px;font-size:11.5px;color:var(--t3)}
.decov .setgrid{padding:16px 18px 4px}
.decov .card .empty{padding:26px 18px;text-align:center;font-size:12.5px;color:var(--t3)}
.gift-user-picker{position:relative;z-index:5}
.gift-user-trigger{justify-content:space-between;gap:10px;text-align:left;cursor:pointer}
.gift-user-trigger:focus-visible{outline:2px solid var(--gold-line);outline-offset:2px}
.gift-user-trigger>svg{width:14px;height:14px;flex:0 0 auto;color:var(--t3)}
.gift-user-current,.gift-user-option{display:flex;align-items:center;gap:7px;min-width:0}
.gift-user-current{flex:1}
.gift-user-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gift-user-placeholder{color:var(--t3)}
.gift-user-badge{flex:0 0 auto;padding:2px 6px;border:1px solid var(--gold-line);border-radius:4px;background:var(--gold-bg);color:var(--gold-dp);font-size:11px;line-height:1.3;white-space:nowrap}
.gift-user-pop{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:0 12px 28px rgba(15,15,15,.12);overflow:hidden}
.gift-user-pop[hidden]{display:none}
.gift-user-search{height:44px;display:flex;align-items:center;gap:8px;padding:0 12px;border-bottom:1px solid var(--line)}
.gift-user-search svg{width:16px;height:16px;flex:0 0 auto;color:var(--t3)}
.gift-user-search input{width:100%;min-width:0;border:0;outline:0;background:transparent;font:13px var(--font);color:var(--ink)}
.gift-user-options{max-height:260px;overflow:auto;padding:4px}
.gift-user-option{width:100%;min-height:38px;padding:7px 10px;border:0;border-radius:5px;background:#fff;color:var(--ink);font:13px var(--font);text-align:left;cursor:pointer}
.gift-user-option .gift-user-name{flex:1}
.gift-user-option:hover,.gift-user-option:focus-visible,.gift-user-option.selected{background:var(--gold-bg);outline:0}
.gift-user-empty{padding:12px;color:var(--t3);font-size:12px;text-align:center}
.gift-user-pager{display:flex;align-items:center;gap:6px;min-height:42px;padding:5px 9px;border-top:1px solid var(--line);background:var(--warm);font-size:11.5px;color:var(--t2)}
.gift-user-pager span{flex:1;min-width:0}
.gift-user-pager button{height:28px;padding:0 9px;border:1px solid var(--line);border-radius:5px;background:#fff;color:var(--ink);font:12px var(--font);cursor:pointer;white-space:nowrap}
.gift-user-pager button:disabled{color:var(--t3);background:var(--warm);cursor:not-allowed}
.bnrow{display:flex;align-items:center;gap:14px;padding:12px 18px;border-bottom:1px solid var(--line-2)}
.bnrow:last-of-type{border-bottom:0}
.bnthumb{flex:0 0 132px;height:44px;border-radius:6px;overflow:hidden;background:var(--warm-2);border:1px solid var(--line)}
.bnthumb img{width:100%;height:100%;object-fit:cover;display:block}
.bninfo{flex:1;min-width:0}
.bninfo .t{font-size:13px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bninfo .s{font-size:11.5px;color:var(--t3);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bnops{flex:0 0 auto;display:flex;align-items:center;gap:10px;font-size:12px}
.bnops .swt{margin:0}
.scrow{display:flex;align-items:flex-start;gap:14px;padding:12px 18px;border-bottom:1px solid var(--line-2)}
.scrow:last-of-type{border-bottom:0}
.scname{flex:0 0 76px;font-size:13px;font-weight:700;color:var(--ink);padding-top:7px}
.scchips{flex:1;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.scchip{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:15px;background:var(--gold-bg);border:1px solid var(--gold-line);font-size:12px;color:var(--gold-dp);font-weight:600}
.scchip i{font-style:normal;cursor:pointer;font-size:14px;line-height:1;opacity:.6}
.scchip i:hover{opacity:1}
.scadd{display:inline-flex;align-items:center;gap:6px}
.scadd .fin{height:30px;width:132px;font-size:12px;padding:0 10px}
@media (max-width:900px){
  .bnrow{flex-wrap:wrap}
  .bnthumb{flex:0 0 108px}
  .scrow{flex-direction:column;gap:8px}
}

/* ---- 商城装修 LOGO 预览限宽 ---- */
.decov .upgrid .upitem.main{max-width:220px}

/* ================= 2026-10-15 第三轮 · 装修重排/快捷chip/模块权限 ================= */
.brandlay{display:flex;gap:22px;padding:16px 18px 4px;align-items:flex-start}
.brandlay .bleft{flex:0 0 240px}
.brandlay .bright{flex:1;min-width:0}
.lb2{font-size:12.5px;font-weight:600;color:var(--ink2);margin-bottom:8px}
.logo-prev{max-width:220px}
.cathead{display:flex;align-items:center;gap:12px;padding:9px 18px;font-size:11px;color:var(--t3);border-bottom:1px solid var(--line-2);background:var(--warm)}
.catrow{display:flex;align-items:center;gap:12px;padding:10px 18px;border-bottom:1px solid var(--line-2)}
.catrow:last-child{border-bottom:0}
.catrow .catic{width:36px;height:36px;flex:0 0 36px;display:flex;align-items:center;justify-content:center;overflow:hidden}
.catrow .catic img,.catrow .catic svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain}
.catrow .btn.sec.sm{flex:0 0 76px}
.catrow .fin.cn{flex:1.2;min-width:0}
.catrow .fin.ce{flex:1.2;min-width:0}
.catrow .fin.cs{flex:0 0 90px;width:90px}
.catrow .btn.gold.sm{flex:0 0 64px}
.subblks{display:flex;flex-direction:column}
.subblk{padding:12px 18px;border-bottom:1px solid var(--line-2)}
.subblk:last-child{border-bottom:0}
.subblk .sbh{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.subblk .sbh b{font-size:13px;color:var(--ink)}
.subblk .sbh .mut{font-size:11.5px;color:var(--t3)}
.subblk .sbh .sp{flex:1}
.sbrows{display:flex;flex-direction:column;gap:8px}
.scr-item{display:flex;align-items:center;gap:10px}
.scr-item .fin.sn{flex:0 0 220px}
.scr-item .fin.ss{flex:0 0 90px;width:90px}
.scr-item .lnk{font-size:12px}
.qchip{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 12px;border-radius:14px;border:1px solid var(--line);background:#fff;font-size:12px;color:var(--t2);cursor:pointer}
.qchip i{font-style:normal;font-size:11px;color:var(--t3)}
.qchip.on{border-color:var(--gold);background:var(--gold-bg);color:var(--gold-dp);font-weight:600}
.qchip.on i{color:var(--gold-dp)}
.qchip.gold.on{border-color:var(--gold-dp)}
.modchips{display:flex;flex-wrap:wrap;gap:8px}
.modchip{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:14px;border:1px solid var(--line);background:#fff;font-size:12px;color:var(--t2);cursor:pointer}
.modchip.on{border-color:var(--gold);background:var(--gold-bg);color:var(--gold-dp);font-weight:600}
.subh2{font-size:12.5px;font-weight:700;color:var(--ink);margin:14px 0 6px;padding-top:10px;border-top:1px dashed var(--line)}
@media (max-width:1100px){.brandlay{flex-direction:column}}

/* ---- 卡运营：H5 二维码宫格 ---- */
.qrgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;padding:16px 18px}
.qrcard{border:1px solid var(--line);border-radius:10px;padding:12px;display:flex;flex-direction:column;align-items:center;gap:6px;background:#fff}
.qrcard img{width:120px;height:120px;display:block}
.qrcard .qn{font-size:11px;color:var(--ink2);font-weight:600}
.qrcard .qc{font-size:10px;color:var(--t3)}
/* ---- 用户详情弹窗（卡片式） ---- */
.ud-head{display:flex;align-items:center;gap:12px;padding:4px 0 12px;border-bottom:1px solid var(--line)}
.ud-av{width:44px;height:44px;border-radius:50%;background:var(--gold-bg);border:1px solid var(--gold-line);color:var(--gold-dp);display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:700;flex:0 0 auto}
.ud-who{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.ud-who b{font-size:15px;color:var(--ink)}
.ud-who span{font-size:11.5px;color:var(--t3)}
.ud-chips{display:flex;gap:10px;margin:12px 0 2px}
.ud-chip{flex:1;background:var(--warm);border:1px solid var(--line-2);border-radius:10px;padding:9px 6px;text-align:center}
.ud-chip .v{font-size:14px;font-weight:700;color:var(--ink)}
.ud-chip .k{font-size:10.5px;color:var(--t3);margin-top:2px}
.ud-meta{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:11px;color:var(--t3);padding:8px 0 2px}
.ud-meta b{color:var(--t2);font-weight:600}
.ud-sec{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}
.ud-sech{font-size:12.5px;font-weight:700;color:var(--ink);margin-bottom:8px;display:flex;align-items:center;gap:7px}
.ud-sech::before{content:"";width:3px;height:12px;border-radius:2px;background:var(--gold)}
.ud-row{display:flex;align-items:flex-start;gap:10px;padding:7px 0;border-bottom:1px solid var(--line-2)}
.ud-row:last-child{border-bottom:0}
.ud-ic{flex:0 0 26px;width:26px;height:26px;border-radius:7px;background:var(--warm);display:flex;align-items:center;justify-content:center;color:var(--gold-dp)}
.ud-ic svg{width:14px;height:14px}
.ud-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ud-tx b{font-size:12.5px;color:var(--ink);font-weight:600}
.ud-tx span{font-size:11.5px;color:var(--t3);line-height:1.5}

/* ---- 营收趋势柱状图（纯CSS） ---- */
.trendbars{display:flex;align-items:flex-end;gap:6px;padding:16px 18px 10px;height:130px}
.tb{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:5px;height:100%}
.tb i{display:block;width:100%;max-width:34px;border-radius:4px 4px 0 0;background:linear-gradient(180deg,var(--gold),var(--gold-dp));transition:height .3s}
.tb span{font-size:9.5px;color:var(--t3);white-space:nowrap;transform:scale(.92)}

/* ---- 卡片详情弹窗：二维码 + 档案双栏 ---- */
.cardview{display:flex;gap:20px;align-items:flex-start}
.cardview .cv-l{flex:0 0 168px;display:flex;flex-direction:column;gap:10px}
.cardview .cv-qr{width:168px;height:168px;border:1px solid var(--line);border-radius:10px;display:block}
.cardview .cv-r{flex:1;min-width:0}
@media (max-width:640px){.cardview{flex-direction:column}}

/* ---- 数据总览 KPI 自适应防变形 ---- */
.kpis{grid-template-columns:repeat(auto-fit,minmax(215px,1fr))}
