/* =========================================================
   农资SaaS平台后台 - Pro 深蓝商务风 v3.0
   蓝黑金高端配色 · shadcn-luxury · 圆角12px · 微阴影 · 呼吸动效
   ========================================================= */
*{box-sizing:border-box;margin:0;padding:0;}
html,body{height:100%;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-size:14px;color:#0f172a;background:#f1f5f9;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  letter-spacing:.01em;
}
a{color:inherit;text-decoration:none;transition:all .18s ease;}
button{font:inherit;cursor:pointer;border:none;background:none;}
input,select,textarea{font:inherit;color:inherit;outline:none;}
ul,ol{list-style:none;}
img{max-width:100%;display:block;}
table{border-collapse:collapse;width:100%;}

:root{
  --brand:#0f3460;          /* 主深蓝 */
  --brand-2:#16537e;        /* 中蓝 */
  --brand-3:#1e6091;        /* 亮蓝 */
  --accent:#c9a96e;         /* 香槟金 */
  --accent-2:#d4b984;
  --gold:#e5b84a;
  --primary:#1e40af;
  --primary-dark:#1e3a8a;
  --primary-light:#dbeafe;
  --primary-50:#eff6ff;
  --success:#059669;
  --success-light:#d1fae5;
  --danger:#dc2626;
  --danger-light:#fee2e2;
  --warning:#d97706;
  --warning-light:#fef3c7;
  --info:#0891b2;
  --info-light:#cffafe;
  --purple:#7c3aed;
  --purple-light:#ede9fe;
  --border:#e2e8f0;
  --border-light:#f1f5f9;
  --border-dark:#cbd5e1;
  --muted:#64748b;
  --muted-2:#94a3b8;
  --muted-3:#cbd5e1;
  --bg:#f1f5f9;
  --card:#ffffff;
  --text:#0f172a;
  --text-2:#334155;
  --text-3:#64748b;
  --sidebar-w:248px;
  --sidebar-collapsed:68px;
  --header-h:60px;
  --r:10px;
  --r-lg:14px;
  --r-xl:18px;
  --shadow-sm:0 1px 2px rgba(15,23,42,.04);
  --shadow:0 1px 3px rgba(15,23,42,.06),0 1px 2px rgba(15,23,42,.04);
  --shadow-md:0 4px 12px rgba(15,23,42,.07);
  --shadow-lg:0 10px 30px rgba(15,23,42,.10),0 4px 8px rgba(15,23,42,.05);
  --shadow-gold:0 4px 16px rgba(201,169,110,.25);
  --grad-brand:linear-gradient(135deg,#0f3460 0%,#1e6091 100%);
  --grad-gold:linear-gradient(135deg,#c9a96e 0%,#e5b84a 100%);
  --grad-card:linear-gradient(135deg,#ffffff 0%,#fafbff 100%);
}

/* ============ Layout ============ */
.admin-shell{display:flex;min-height:100vh;}

/* ============ Sidebar: 深蓝金高端风 ============ */
.sidebar{
  width:var(--sidebar-w);
  background:linear-gradient(180deg,#0a1f3d 0%,#0f3460 45%,#16537e 100%);
  display:flex;flex-direction:column;
  position:fixed;top:0;left:0;bottom:0;z-index:50;
  transition:width .25s cubic-bezier(.4,0,.2,1);
  box-shadow:4px 0 24px rgba(10,31,61,.18);
  overflow:hidden;
}
.sidebar::before{
  content:'';position:absolute;top:0;right:0;width:1px;height:100%;
  background:linear-gradient(180deg,transparent,rgba(201,169,110,.35) 30%,rgba(201,169,110,.35) 70%,transparent);
}
.sidebar.collapsed{width:var(--sidebar-collapsed);}
.sidebar-logo{
  height:var(--header-h);display:flex;align-items:center;
  padding:0 20px;gap:12px;
  border-bottom:1px solid rgba(201,169,110,.18);
  background:linear-gradient(90deg,rgba(201,169,110,.08),transparent);
  flex-shrink:0;position:relative;z-index:1;
}
.sidebar-logo .logo-ic{
  width:40px;height:40px;border-radius:12px;
  background:#fff;
  display:flex;align-items:center;justify-content:center;
  flex-shrink:0;overflow:hidden;
  box-shadow:0 4px 14px rgba(201,169,110,.4),inset 0 1px 0 rgba(255,255,255,.4);
  position:relative;
}
.sidebar-logo .logo-ic img{width:100%;height:100%;object-fit:contain;display:block;}
.sidebar-logo .logo-ic::after{
  content:'';position:absolute;inset:-2px;border-radius:14px;
  border:1.5px solid rgba(201,169,110,.45);pointer-events:none;
}
.sidebar-logo .logo-txt{
  font-size:16px;font-weight:700;color:#fff;white-space:nowrap;
  letter-spacing:.08em;
  display:flex;flex-direction:column;line-height:1.15;
}
.sidebar-logo .logo-txt small{
  font-size:10px;color:rgba(201,169,110,.85);font-weight:500;letter-spacing:.2em;margin-top:2px;
}
.sidebar.collapsed .logo-txt{display:none;}

.sidebar-scroll{flex:1;overflow-y:auto;padding:16px 12px;position:relative;z-index:1;}
.sidebar-scroll::-webkit-scrollbar{width:4px;}
.sidebar-scroll::-webkit-scrollbar-thumb{background:rgba(201,169,110,.25);border-radius:2px;}
.sidebar-scroll::-webkit-scrollbar-thumb:hover{background:rgba(201,169,110,.5);}

.side-group-label{
  font-size:10.5px;color:rgba(201,169,110,.65);
  font-weight:600;text-transform:uppercase;letter-spacing:.18em;
  padding:16px 14px 8px;
}
.side-item{
  display:flex;align-items:center;gap:12px;
  padding:10px 14px;border-radius:10px;
  font-size:13.5px;color:rgba(255,255,255,.78);
  margin-bottom:3px;cursor:pointer;font-weight:500;
  transition:all .2s cubic-bezier(.4,0,.2,1);
  position:relative;white-space:nowrap;overflow:hidden;
}
.side-item:hover{
  background:rgba(255,255,255,.08);color:#fff;
  transform:translateX(3px);
}
.side-item.active{
  background:linear-gradient(135deg,rgba(201,169,110,.18),rgba(201,169,110,.08));
  color:#fff;font-weight:600;
  box-shadow:inset 3px 0 0 #c9a96e,0 2px 10px rgba(0,0,0,.15);
  transform:translateX(0);
}
.side-item.active .si-ic{
  color:#e5b84a;filter:drop-shadow(0 1px 3px rgba(229,184,74,.4));
}
.side-item .si-ic{
  width:22px;height:22px;font-size:17px;
  display:flex;align-items:center;justify-content:center;
  border-radius:6px;flex-shrink:0;
  transition:transform .2s;
}
.side-item:hover .si-ic{transform:scale(1.08);}
.side-item .si-txt{flex:1;}
.side-sub .side-item{
  font-size:13px;padding:8px 14px 8px 44px;border-radius:8px;
  color:rgba(255,255,255,.7);margin-bottom:2px;
}
.side-sub .side-item::before{
  content:'';position:absolute;left:28px;top:50%;width:5px;height:5px;border-radius:50%;
  background:rgba(201,169,110,.4);transform:translateY(-50%);
  transition:all .2s;
}
.side-sub .side-item:hover::before{background:#e5b84a;transform:translateY(-50%) scale(1.3);box-shadow:0 0 8px rgba(229,184,74,.5);}
.side-sub .side-item.active::before{background:#e5b84a;box-shadow:0 0 0 3px rgba(229,184,74,.2);}
.side-sub .side-item .si-ic{font-size:14px;width:18px;height:18px;}
.side-dot{
  background:linear-gradient(135deg,#dc2626,#ef4444);color:#fff;
  font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:10px;
  margin-left:auto;box-shadow:0 2px 6px rgba(220,38,38,.4);
  min-width:18px;text-align:center;
}
.side-item.active .side-dot{background:#e5b84a;color:#0a1f3d;}
.sidebar.collapsed .side-item{justify-content:center;padding:10px;border-radius:10px;}
.sidebar.collapsed .si-txt,.sidebar.collapsed .side-dot{display:none;}
.sidebar.collapsed .side-group-label{opacity:0;height:0;padding:0;margin:0;overflow:hidden;}
.sidebar.collapsed .side-sub .side-item{padding:10px;}
.sidebar.collapsed .side-sub .side-item::before{display:none;}

/* 底部文档下载 */
.sidebar .doc-btn-wrap{
  padding:12px 12px 16px;border-top:1px solid rgba(201,169,110,.15);margin-top:6px;
  background:linear-gradient(180deg,transparent,rgba(0,0,0,.12));
}
.sidebar.collapsed .doc-btn-wrap .doc-btn span.txt{display:none;}

/* ============ Main Wrap ============ */
.main-wrap{
  margin-left:var(--sidebar-w);flex:1;min-height:100vh;
  display:flex;flex-direction:column;
  transition:margin-left .25s cubic-bezier(.4,0,.2,1);
  background:var(--bg);
  min-width:0;
}
.admin-shell.collapsed .main-wrap{margin-left:var(--sidebar-collapsed);}

/* ============ Topbar ============ */
.topbar{
  height:var(--header-h);background:#fff;
  border-bottom:1px solid var(--border);
  padding:0 24px;display:flex;align-items:center;gap:16px;
  position:sticky;top:0;z-index:40;
  box-shadow:0 1px 0 rgba(15,23,42,.03),0 2px 8px rgba(15,23,42,.04);
  backdrop-filter:blur(12px);background:rgba(255,255,255,.92);
}
.topbar-toggle{
  width:36px;height:36px;border-radius:8px;
  color:var(--text-2);font-size:18px;display:flex;align-items:center;justify-content:center;
  transition:all .15s;
}
.topbar-toggle:hover{background:var(--border-light);color:var(--brand);}
.topbar-search{
  display:flex;align-items:center;gap:8px;
  background:var(--bg);border-radius:10px;padding:0 14px;
  height:38px;flex:1;max-width:440px;
  border:1px solid transparent;transition:all .18s;
}
.topbar-search:focus-within{
  background:#fff;border-color:var(--brand-3);
  box-shadow:0 0 0 3px rgba(30,96,145,.1);
}
.ts-ic{color:var(--muted-2);font-size:15px;}
.topbar-search input{
  flex:1;border:none;background:transparent;height:100%;font-size:13.5px;color:var(--text);
}
.topbar-search input::placeholder{color:var(--muted-2);}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:8px;}
.topbar-ic{
  width:38px;height:38px;border-radius:10px;
  display:flex;align-items:center;justify-content:center;
  font-size:17px;color:var(--text-2);position:relative;
  transition:all .15s;
}
.topbar-ic:hover{background:var(--border-light);color:var(--brand);}
.topbar-ic .dot{
  position:absolute;top:6px;right:8px;min-width:16px;height:16px;
  background:linear-gradient(135deg,#dc2626,#ef4444);color:#fff;
  font-size:10px;font-weight:700;border-radius:8px;
  padding:0 4px;display:flex;align-items:center;justify-content:center;
  box-shadow:0 2px 4px rgba(220,38,38,.3);
}

/* 字体控件 */
.font-ctrl{position:relative;display:flex;align-items:center;gap:2px;
  background:var(--bg);border-radius:20px;padding:3px;border:1px solid var(--border);}
.font-ctrl button{border:0;background:transparent;color:var(--muted);font-size:13px;
  padding:4px 10px;border-radius:16px;cursor:pointer;line-height:1;transition:all .15s;
  display:flex;align-items:center;gap:2px;}
.font-ctrl button:hover{color:var(--brand);}
.font-ctrl button.on{background:#fff;color:var(--brand);font-weight:700;
  box-shadow:0 2px 6px rgba(15,52,96,.12);}
.font-ctrl .fc-a{font-size:11px;}
.font-ctrl .fc-b{font-size:13px;}
.font-ctrl .fc-c{font-size:15px;font-weight:600;}
.font-ctrl .fc-d{font-size:17px;font-weight:700;}
.font-ctrl .fc-tag{font-size:10px;color:var(--muted-2);margin-left:1px;}
.font-ctrl button.on .fc-tag{color:var(--brand-3);}

/* 用户菜单 */
.user-menu{
  display:flex;align-items:center;gap:10px;padding:4px 12px 4px 4px;
  border-radius:22px;cursor:pointer;transition:all .15s;position:relative;
  background:linear-gradient(135deg,#f8fafc,#f1f5f9);border:1px solid var(--border);
}
.user-menu:hover{background:#fff;border-color:var(--accent);box-shadow:var(--shadow);}
.user-avatar{
  width:32px;height:32px;border-radius:50%;
  background:var(--grad-brand);color:#fff;
  display:flex;align-items:center;justify-content:center;
  font-size:14px;font-weight:600;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 2px 6px rgba(15,52,96,.25);
}
.user-name{font-size:13px;font-weight:600;color:var(--text);}
.user-caret{font-size:10px;color:var(--muted-2);transition:transform .2s;}
.user-menu.open .user-caret{transform:rotate(180deg);}
.dropdown{
  position:absolute;top:calc(100% + 8px);right:0;min-width:200px;
  background:#fff;border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);border:1px solid var(--border);
  padding:6px;opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:all .2s;z-index:60;
}
.dropdown.show{opacity:1;visibility:visible;transform:translateY(0);}
.dropdown-item{
  display:flex;align-items:center;gap:10px;
  padding:9px 12px;border-radius:8px;font-size:13px;color:var(--text-2);
  transition:all .12s;
}
.dropdown-item:hover{background:var(--primary-50);color:var(--brand);}
.dropdown-item.danger{color:var(--danger);}
.dropdown-item.danger:hover{background:var(--danger-light);color:var(--danger);}
.dropdown-divider{height:1px;background:var(--border);margin:4px 6px;}

/* ============ Content Area ============ */
.content{
  padding:22px 26px 36px;flex:1;min-width:0;
}
.breadcrumb-bar{
  display:flex;align-items:center;gap:6px;
  font-size:12.5px;color:var(--muted);
  margin-bottom:16px;padding:0 2px;
}
.breadcrumb-bar a{color:var(--muted);}
.breadcrumb-bar a:hover{color:var(--brand);}
.breadcrumb-sep{color:var(--muted-3);}
.breadcrumb-cur{color:var(--text);font-weight:600;}

/* 方案子Tab */
.plan-sub-tabs{
  background:var(--card);border-radius:var(--r-lg);padding:14px 18px;
  margin-bottom:18px;display:flex;align-items:center;gap:16px;
  box-shadow:var(--shadow);border:1px solid var(--border);
}
.pst-label{
  display:flex;align-items:center;gap:6px;
  font-size:13px;font-weight:700;color:var(--text);
  padding-right:16px;border-right:1px solid var(--border);
}
.pst-list{display:flex;gap:8px;flex-wrap:wrap;flex:1;}
.pst-item{
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 14px;border-radius:20px;
  font-size:12.5px;color:var(--text-2);font-weight:500;
  background:var(--bg);border:1px solid transparent;transition:all .18s;
}
.pst-item:hover{background:#fff;border-color:var(--border-dark);}
.pst-item.active{
  color:var(--pc,var(--brand));background:#fff;font-weight:600;
  border-color:var(--pc,var(--brand));
  box-shadow:0 2px 8px rgba(15,52,96,.1);
}
.pst-ic{font-size:15px;}

/* Flash */
.flash{
  display:flex;align-items:center;gap:10px;
  padding:12px 16px;border-radius:var(--r);margin-bottom:16px;
  font-size:13.5px;font-weight:500;
  animation:slideDown .35s ease;
}
@keyframes slideDown{from{opacity:0;transform:translateY(-8px);}to{opacity:1;transform:translateY(0);}}
.flash-success{background:linear-gradient(135deg,#ecfdf5,#d1fae5);color:#065f46;border:1px solid #a7f3d0;}
.flash-error{background:linear-gradient(135deg,#fef2f2,#fee2e2);color:#991b1b;border:1px solid #fecaca;}

/* ============ Page Title (通用) ============ */
.page-header{
  display:flex;justify-content:space-between;align-items:flex-end;
  margin-bottom:20px;gap:16px;flex-wrap:wrap;
}
.page-title{
  font-size:22px;font-weight:800;color:var(--text);
  letter-spacing:-.01em;display:flex;align-items:center;gap:10px;
}
.page-title::before{
  content:'';width:4px;height:22px;border-radius:2px;
  background:var(--grad-gold);
}
.page-desc{font-size:13px;color:var(--muted);margin-top:6px;}
.page-actions{display:flex;gap:8px;flex-wrap:wrap;}

/* ============ Cards 高端卡片 ============ */
.card,.panel,.box,section.card,section.panel{
  background:var(--grad-card);border-radius:var(--r-lg);
  padding:20px;box-shadow:var(--shadow);
  margin-bottom:18px;border:1px solid var(--border);
  position:relative;overflow:hidden;
}
.card::before,.panel::before{
  content:'';position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--brand),var(--accent));
  opacity:0;transition:opacity .2s;
}
.card:hover::before,.panel:hover::before{opacity:1;}
.card-accent::before{opacity:1 !important;}
.card h3,.panel h3,.card-title{
  font-size:15px;font-weight:700;color:var(--text);
  margin:0 0 16px;display:flex;align-items:center;gap:8px;
  padding-bottom:12px;border-bottom:1px solid var(--border-light);
}
.card-header{
  display:flex;justify-content:space-between;align-items:center;
  margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border-light);
}
.card-header h3{margin:0;padding:0;border:none;}
.card-footer{
  margin-top:16px;padding-top:14px;border-top:1px solid var(--border-light);
  display:flex;justify-content:flex-end;gap:8px;
}

/* ============ KPI 统计卡（高端渐变） ============ */
.kpi-grid,.stat-cards,.stats-row,.top-stats,.dashboard-stats{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:22px;
}
.kpi,.stat-card,.stat-item,.stat-box{
  background:#fff;border-radius:var(--r-lg);padding:20px;
  box-shadow:var(--shadow);border:1px solid var(--border);
  position:relative;overflow:hidden;transition:all .25s;
}
.kpi:hover,.stat-card:hover{
  transform:translateY(-3px);box-shadow:var(--shadow-lg);
  border-color:var(--accent);
}
.kpi::after,.stat-card::after{
  content:'';position:absolute;top:-30px;right:-30px;width:90px;height:90px;
  border-radius:50%;background:radial-gradient(circle,var(--accent-op,rgba(30,64,175,.08)),transparent 70%);
}
.kpi .k-label,.stat-label{
  font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px;
  font-weight:500;letter-spacing:.02em;
}
.kpi .k-val,.stat-value,.stat-num{
  font-size:26px;font-weight:800;color:var(--text);margin-top:8px;
  font-variant-numeric:tabular-nums;
  background:linear-gradient(135deg,var(--brand),var(--brand-3));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.kpi.brand{--accent-op:rgba(15,52,96,.15);}
.kpi.brand .k-val{background:linear-gradient(135deg,#0f3460,#1e6091);-webkit-background-clip:text;-webkit-text-fill-color:transparent;}
.kpi.success{--accent-op:rgba(5,150,105,.15);}
.kpi.success .k-val{background:linear-gradient(135deg,#047857,#059669);-webkit-background-clip:text;-webkit-text-fill-color:transparent;}
.kpi.warning{--accent-op:rgba(217,119,6,.15);}
.kpi.warning .k-val{background:linear-gradient(135deg,#b45309,#d97706);-webkit-background-clip:text;-webkit-text-fill-color:transparent;}
.kpi.danger{--accent-op:rgba(220,38,38,.15);}
.kpi.danger .k-val{background:linear-gradient(135deg,#b91c1c,#dc2626);-webkit-background-clip:text;-webkit-text-fill-color:transparent;}
.kpi.gold{--accent-op:rgba(201,169,110,.2);}
.kpi.gold .k-val{background:var(--grad-gold);-webkit-background-clip:text;-webkit-text-fill-color:transparent;}
.kpi.purple{--accent-op:rgba(124,58,237,.15);}
.kpi.purple .k-val{background:linear-gradient(135deg,#6d28d9,#7c3aed);-webkit-background-clip:text;-webkit-text-fill-color:transparent;}
.kpi .k-sub,.stat-sub{
  font-size:12px;color:var(--muted-2);margin-top:6px;
  display:flex;align-items:center;gap:6px;
}
.kpi .k-sub .up{color:var(--success);font-weight:600;}
.kpi .k-sub .down{color:var(--danger);font-weight:600;}
.kpi .k-ic{
  position:absolute;top:16px;right:16px;font-size:28px;opacity:.15;
}

/* ============ Buttons 高端按钮 ============ */
.btn,button.btn,a.btn,input[type=button].btn,input[type=submit].btn{
  display:inline-flex;align-items:center;gap:6px;
  padding:8px 16px;border-radius:var(--r);
  font-size:13px;font-weight:600;cursor:pointer;
  transition:all .18s cubic-bezier(.4,0,.2,1);
  border:1px solid transparent;white-space:nowrap;
  font-family:inherit;line-height:1.4;
}
.btn:hover{transform:translateY(-1px);}
.btn:active{transform:translateY(0);}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none !important;}
.btn-primary,.btn-success,.btn-blue{
  background:var(--grad-brand);color:#fff;
  box-shadow:0 2px 8px rgba(15,52,96,.25),inset 0 1px 0 rgba(255,255,255,.15);
}
.btn-primary:hover,.btn-success:hover,.btn-blue:hover{
  background:linear-gradient(135deg,#16537e,#1e6091);
  box-shadow:0 4px 14px rgba(15,52,96,.35);
}
.btn-gold{
  background:var(--grad-gold);color:#0a1f3d;
  box-shadow:var(--shadow-gold),inset 0 1px 0 rgba(255,255,255,.4);
}
.btn-gold:hover{box-shadow:0 6px 20px rgba(201,169,110,.4);}
.btn-danger{background:linear-gradient(135deg,#dc2626,#ef4444);color:#fff;box-shadow:0 2px 8px rgba(220,38,38,.25);}
.btn-danger:hover{background:linear-gradient(135deg,#b91c1c,#dc2626);}
.btn-default,.btn-white,.btn-secondary{background:#fff;color:var(--text-2);border-color:var(--border);}
.btn-default:hover,.btn-white:hover{background:var(--bg);border-color:var(--brand-3);color:var(--brand);}
.btn-outline{background:transparent;color:var(--brand);border-color:var(--brand-3);}
.btn-outline:hover{background:var(--primary-50);}
.btn-ghost{background:transparent;color:var(--text-2);}
.btn-ghost:hover{background:var(--bg);}
.btn-sm{padding:5px 10px;font-size:12px;border-radius:7px;}
.btn-lg{padding:11px 22px;font-size:14px;border-radius:12px;}
.btn-icon{width:34px;height:34px;padding:0;justify-content:center;}
.btn-group{display:inline-flex;gap:0;}
.btn-group .btn{border-radius:0;margin-left:-1px;}
.btn-group .btn:first-child{border-radius:var(--r) 0 0 var(--r);margin-left:0;}
.btn-group .btn:last-child{border-radius:0 var(--r) var(--r) 0;}

/* ============ Tables 高端表格 ============ */
table.data-table,table.list-table,table.tbl,table.table,
.card table,.panel table{
  width:100%;border-collapse:separate;border-spacing:0;
  font-size:13px;
}
table.data-table th,table.list-table th,.tbl th,.table th,
.card table th,.panel table th{
  background:linear-gradient(180deg,#f8fafc,#f1f5f9);color:var(--text-2);
  font-weight:700;text-align:left;padding:12px 14px;
  font-size:12.5px;border-bottom:2px solid var(--border);
  text-transform:none;letter-spacing:.02em;white-space:nowrap;
}
table.data-table th:first-child,table.list-table th:first-child{border-radius:var(--r) 0 0 0;}
table.data-table th:last-child,table.list-table th:last-child{border-radius:0 var(--r) 0 0;}
table.data-table td,table.list-table td,.tbl td,.table td,
.card table td,.panel table td{
  padding:12px 14px;border-bottom:1px solid var(--border-light);
  color:var(--text-2);vertical-align:middle;
}
table.data-table tr:hover td,table.list-table tbody tr:hover td{
  background:linear-gradient(90deg,rgba(30,96,145,.04),transparent);
}
table.data-table tr:last-child td,table.list-table tr:last-child td{border-bottom:none;}
table tr.selected td{background:var(--primary-50) !important;}
table td img,.tbl td img{border-radius:6px;vertical-align:middle;}
table .td-actions,.tbl .td-actions{
  display:flex;gap:6px;justify-content:flex-end;white-space:nowrap;
}
table .td-actions a,table .td-actions button{
  padding:4px 10px;font-size:12px;border-radius:6px;color:var(--brand);
  background:var(--primary-50);font-weight:500;
}
table .td-actions a:hover,table .td-actions button:hover{background:var(--brand);color:#fff;}
table .td-actions .del{color:var(--danger);background:var(--danger-light);}
table .td-actions .del:hover{background:var(--danger);color:#fff;}
/* 空行 */
.empty-row td,.nodata td{
  padding:50px 20px;text-align:center;color:var(--muted-2);font-size:13px;
}

/* ============ Pagination ============ */
.pagination,.pager,.page-list{
  display:flex;gap:4px;justify-content:flex-end;align-items:center;
  margin-top:16px;padding-top:14px;border-top:1px solid var(--border-light);
}
.pagination a,.pager a,.pagination span,.pager span{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:32px;height:32px;padding:0 10px;border-radius:8px;
  font-size:12.5px;font-weight:500;color:var(--text-2);
  border:1px solid var(--border);background:#fff;
}
.pagination a:hover{border-color:var(--brand);color:var(--brand);background:var(--primary-50);}
.pagination .active,.pager .active,.pagination .current{
  background:var(--grad-brand);color:#fff;border-color:var(--brand);
  box-shadow:0 2px 6px rgba(15,52,96,.25);
}
.pagination .disabled{opacity:.4;cursor:not-allowed;}

/* ============ Forms 高端表单 ============ */
.form-group,.form-item{margin-bottom:16px;}
.form-row{display:flex;gap:16px;margin-bottom:0;flex-wrap:wrap;}
.form-row .form-item,.form-row .form-group{flex:1;min-width:200px;}
.form-item label,.form-group label,.form-label{
  display:block;font-size:12.5px;font-weight:600;color:var(--text-2);
  margin-bottom:6px;letter-spacing:.01em;
}
.form-item label .req,.form-group label .req{color:var(--danger);margin-left:2px;}
.form-item input[type=text],.form-item input[type=number],.form-item input[type=password],
.form-item input[type=email],.form-item input[type=date],.form-item input[type=datetime-local],
.form-item input[type=tel],.form-item input[type=url],
.form-item select,.form-item textarea,
input[type=text],input[type=number],input[type=password],input[type=email],
select,textarea{
  width:100%;padding:9px 14px;
  border:1px solid var(--border);border-radius:var(--r);
  font-size:13.5px;background:#fff;color:var(--text);
  transition:all .18s;line-height:1.5;
}
.form-item input:focus,.form-item select:focus,.form-item textarea:focus,
input:focus,select:focus,textarea:focus{
  border-color:var(--brand-3);box-shadow:0 0 0 3px rgba(30,96,145,.12);
  background:#fff;
}
.form-item textarea{min-height:80px;resize:vertical;}
.form-help{font-size:12px;color:var(--muted-2);margin-top:4px;}
.form-error{font-size:12px;color:var(--danger);margin-top:4px;}
.form-inline{display:flex;gap:8px;align-items:center;}
.search-bar,.filter-bar,.toolbar{
  display:flex;gap:10px;align-items:center;margin-bottom:16px;flex-wrap:wrap;
}
.search-bar input{width:240px;}
.toolbar{justify-content:space-between;}
/* switch */
.switch{
  position:relative;display:inline-block;width:44px;height:24px;
}
.switch input{display:none;}
.switch .slider{
  position:absolute;inset:0;background:var(--muted-3);
  border-radius:12px;cursor:pointer;transition:.2s;
}
.switch .slider::before{
  content:'';position:absolute;left:3px;top:3px;width:18px;height:18px;
  background:#fff;border-radius:50%;transition:.25s cubic-bezier(.4,0,.2,1);
  box-shadow:0 2px 4px rgba(0,0,0,.2);
}
.switch input:checked + .slider{background:var(--grad-brand);}
.switch input:checked + .slider::before{transform:translateX(20px);background:#fff;}

/* ============ Tags 标签 ============ */
.tag,.label,.badge{
  display:inline-flex;align-items:center;gap:4px;
  padding:3px 10px;border-radius:12px;font-size:11.5px;font-weight:600;
  line-height:1.5;letter-spacing:.02em;
}
.tag-success,.badge-success,.label-success,.tag.s,.tag.ok{background:var(--success-light);color:#065f46;}
.tag-danger,.badge-danger,.label-danger,.tag.d,.tag.del,.tag.reject{background:var(--danger-light);color:#991b1b;}
.tag-warning,.badge-warning,.label-warning,.tag.w,.tag.warn,.tag.pending{background:var(--warning-light);color:#92400e;}
.tag-info,.badge-info,.label-info,.tag.i{background:var(--info-light);color:#155e75;}
.tag-primary,.tag-blue,.tag.brand{background:var(--primary-50);color:#1e3a8a;}
.tag-gold{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#78350f;}
.tag-purple,.tag.p{background:var(--purple-light);color:#5b21b6;}
.tag-gray,.tag.muted,.tag-default{background:#f1f5f9;color:#475569;}

/* ============ Modal / Mask ============ */
.mask,.modal-mask,.overlay{
  position:fixed;inset:0;background:rgba(10,31,61,.55);
  backdrop-filter:blur(4px);z-index:200;
  display:none;align-items:center;justify-content:center;
  animation:fadeIn .2s ease;
}
.mask.show,.modal-mask.show{display:flex;}
@keyframes fadeIn{from{opacity:0;}to{opacity:1;}}
.modal,.dialog,.popup{
  background:#fff;border-radius:var(--r-xl);
  box-shadow:0 25px 60px rgba(0,0,0,.25);
  max-width:92vw;max-height:90vh;
  display:flex;flex-direction:column;overflow:hidden;
  min-width:480px;animation:popIn .3s cubic-bezier(.34,1.56,.64,1);
}
@keyframes popIn{from{opacity:0;transform:scale(.92) translateY(10px);}to{opacity:1;transform:scale(1) translateY(0);}}
.modal-header,.dialog-header{
  padding:18px 22px;border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;
  background:linear-gradient(135deg,#f8fafc,#fff);
}
.modal-header h3,.dialog-header h3{
  margin:0;font-size:16px;font-weight:700;color:var(--text);
  display:flex;align-items:center;gap:8px;
}
.modal-close,.dialog-close{
  width:32px;height:32px;border-radius:8px;font-size:18px;
  color:var(--muted);display:flex;align-items:center;justify-content:center;
  transition:all .15s;
}
.modal-close:hover,.dialog-close:hover{background:var(--danger-light);color:var(--danger);}
.modal-body,.dialog-body{
  padding:22px;overflow-y:auto;flex:1;
}
.modal-footer,.dialog-footer{
  padding:14px 22px;border-top:1px solid var(--border);
  display:flex;justify-content:flex-end;gap:10px;
  background:#fafbfc;
}
.modal-lg{width:900px;}
.modal-xl{width:1100px;}
.modal-sm{min-width:380px;}

/* ============ Tabs ============ */
.tabs,.ad-tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:2px solid var(--border);padding:0;}
.tab-item,.tab,.ad-tabs .t{
  padding:10px 18px;font-size:13.5px;font-weight:600;color:var(--muted);
  cursor:pointer;border-bottom:2px solid transparent;
  margin-bottom:-2px;transition:all .18s;border-radius:8px 8px 0 0;
}
.tab-item:hover,.tab:hover{color:var(--brand);background:var(--primary-50);}
.tab-item.active,.tab.active,.ad-tabs .t.act{
  color:var(--brand);border-bottom-color:var(--accent);
  background:linear-gradient(180deg,rgba(201,169,110,.08),transparent);
}

/* ============ Alert ============ */
.alert,.hint,.note{
  padding:12px 16px;border-radius:var(--r);margin-bottom:14px;
  font-size:13px;display:flex;align-items:flex-start;gap:10px;
  border:1px solid;border-left:4px solid;
}
.alert i,.hint i{font-size:16px;margin-top:1px;flex-shrink:0;}
.alert-info{background:#eff6ff;border-color:#bfdbfe;color:#1e40af;border-left-color:#3b82f6;}
.alert-success{background:#ecfdf5;border-color:#a7f3d0;color:#065f46;border-left-color:#10b981;}
.alert-warning{background:#fffbeb;border-color:#fde68a;color:#92400e;border-left-color:#f59e0b;}
.alert-danger{background:#fef2f2;border-color:#fecaca;color:#991b1b;border-left-color:#ef4444;}
.alert-gold{background:linear-gradient(135deg,#fef9ec,#fef3c7);border-color:#e5b84a;color:#78350f;border-left-color:#c9a96e;}

/* ============ 铃铛下拉 ============ */
.bell-dd{
  position:absolute;top:calc(100% + 8px);right:0;width:360px;max-height:460px;
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--shadow-lg);
  z-index:60;display:none;flex-direction:column;overflow:hidden;
  border:1px solid var(--border);
}
.bell-dd-hd{padding:14px 16px;border-bottom:1px solid var(--border);
  display:flex;justify-content:space-between;align-items:center;
  font-weight:700;font-size:14px;background:linear-gradient(135deg,#f8fafc,#fff);}
.bell-dd-hd a{font-size:12px;color:var(--brand);font-weight:600;}
.bell-dd-bd{overflow-y:auto;flex:1;}
.bell-dd-emp{padding:50px 20px;text-align:center;color:var(--muted-2);font-size:13px;}
.bell-dd-item{padding:12px 16px;border-bottom:1px solid var(--border-light);
  display:flex;gap:12px;cursor:pointer;align-items:flex-start;transition:background .15s;}
.bell-dd-item:hover{background:var(--primary-50);}
.bell-dd-item .ic{width:36px;height:36px;border-radius:10px;
  display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;}
.bell-dd-item .c{flex:1;min-width:0;}
.bell-dd-item .t{font-size:13px;font-weight:600;color:var(--text);display:flex;gap:6px;align-items:center;}
.bell-dd-item .d{font-size:12px;color:var(--muted);margin-top:3px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* ============ Avatar/Thumb ============ */
.thumb,.avatar-sm{width:44px;height:44px;object-fit:cover;border-radius:8px;border:1px solid var(--border);}
.avatar-lg{width:64px;height:64px;border-radius:12px;}

/* ============ Toast ============ */
.toast-global{
  position:fixed;top:80px;left:50%;transform:translateX(-50%) translateY(-12px);
  padding:12px 24px;border-radius:12px;color:#fff;z-index:9999;font-size:14px;
  box-shadow:0 12px 30px rgba(0,0,0,.25);
  font-weight:500;display:flex;align-items:center;gap:8px;
  opacity:0;transition:all .3s cubic-bezier(.4,0,.2,1);
  pointer-events:none;
}
.toast-global.show{opacity:1;transform:translateX(-50%) translateY(0);}
.toast-global.ok{background:linear-gradient(135deg,#059669,#10b981);}
.toast-global.err{background:linear-gradient(135deg,#dc2626,#ef4444);}

/* ============ 特殊：广告/营销主题覆盖色（保持主题色可用） ============ */
.theme-amber .card::before{background:linear-gradient(90deg,#d97706,#fbbf24);}
.theme-emerald .card::before{background:linear-gradient(90deg,#059669,#34d399);}
.theme-sky .card::before{background:linear-gradient(90deg,#0284c7,#38bdf8);}
.theme-rose .card::before{background:linear-gradient(90deg,#e11d48,#fb7185);}
.theme-violet .card::before{background:linear-gradient(90deg,#7c3aed,#a78bfa);}

/* ============ 商品/订单/列表缩略行 ============ */
.item-title{font-weight:600;color:var(--text);display:block;}
.item-sub{font-size:12px;color:var(--muted);margin-top:2px;}
.item-meta{font-size:12px;color:var(--muted-2);margin-top:4px;}
.price{color:#b91c1c;font-weight:700;font-variant-numeric:tabular-nums;}
.amount{color:var(--brand);font-weight:700;font-variant-numeric:tabular-nums;}
.num{font-variant-numeric:tabular-nums;}

/* ============ 上传/图片预览 ============ */
.upload-area{
  border:2px dashed var(--border-dark);border-radius:var(--r-lg);
  padding:30px;text-align:center;color:var(--muted);
  background:#fafbfc;cursor:pointer;transition:all .18s;
}
.upload-area:hover{border-color:var(--brand);background:var(--primary-50);color:var(--brand);}
.upload-preview{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px;margin-top:12px;
}
.upload-preview .up-item{
  position:relative;border-radius:var(--r);overflow:hidden;
  border:1px solid var(--border);aspect-ratio:1;
}
.upload-preview .up-item img{width:100%;height:100%;object-fit:cover;}
.upload-preview .up-del{
  position:absolute;top:4px;right:4px;width:22px;height:22px;
  background:rgba(0,0,0,.6);color:#fff;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:12px;
}

/* ============ 图表容器 ============ */
.chart-wrap{height:320px;padding:10px 0;}
.chart-card .kpi-grid{margin-bottom:0;}

/* ============ 滚动条 ============ */
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--muted-3);border-radius:4px;}
::-webkit-scrollbar-thumb:hover{background:var(--muted);}

/* ============ 响应式 ============ */
@media(max-width:1280px){
  .kpi-grid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));}
}
@media(max-width:900px){
  .sidebar{transform:translateX(-100%);}
  .main-wrap{margin-left:0 !important;}
  .content{padding:16px;}
  .topbar-search{display:none;}
}

/* ============ 加载骨架 ============ */
.skeleton{background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0 50%,#f1f5f9 75%);
  background-size:200% 100%;animation:sk 1.4s infinite;border-radius:6px;}
@keyframes sk{0%{background-position:200% 0;}100%{background-position:-200% 0;}}

/* ============ 分割线 ============ */
.divider{height:1px;background:var(--border);margin:16px 0;}

/* ============ 空态 ============ */
.empty-state{
  padding:60px 20px;text-align:center;color:var(--muted-2);
}
.empty-state .empty-ic{font-size:56px;opacity:.3;margin-bottom:12px;}
.empty-state .empty-t{font-size:15px;color:var(--text-2);font-weight:600;margin-bottom:6px;}
.empty-state .empty-d{font-size:13px;margin-bottom:16px;}
