/* ========================================================
   趣家教后台管理系统 — 专业级 Admin Dashboard 样式
   ======================================================== */

/* ===== 全局基础 ===== */
*,*::before,*::after { box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; -webkit-font-smoothing: antialiased; }
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-thumb { background: #c1c1c1; border-radius: 3px; }
::-webkit-scrollbar-track { background: transparent; }

/* ===== 页面入场动画 ===== */
@keyframes fadeSlideIn { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
.body-wrap { animation: fadeSlideIn .45s ease-out; }
.body-wrap > * { animation: fadeIn .5s ease .1s both; }

/* ===== 布局：侧边栏 ===== */
.layui-layout-admin .layui-side { background: linear-gradient(180deg, #191d31 0%, #1e2243 50%, #191d31 100%); }
.layui-side-scroll { scrollbar-width: thin; }
.layui-layout-admin .layui-side .layui-nav { background: transparent; }
.layui-nav-tree .layui-nav-item a { color: rgba(255,255,255,.6); padding-left: 28px; height: 44px; line-height: 44px; font-size: 13px; transition: all .25s; border-radius: 0 24px 24px 0; margin-right: 12px; }
.layui-nav-tree .layui-nav-item a:hover { color: #fff; background: rgba(255,255,255,.07); }
.layui-nav-tree .layui-nav-item a .layui-icon { margin-right: 10px; font-size: 16px; vertical-align: -1px; transition: transform .2s; }
.layui-nav-tree .layui-nav-item a:hover .layui-icon { transform: scale(1.15); }
.layui-nav-tree .layui-this>a,
.layui-nav-tree .layui-this>a:hover { color: #fff !important; background: linear-gradient(90deg, rgba(99,102,241,.25), rgba(99,102,241,.08)) !important; }
.layui-nav-tree .layui-this>a::before { content:''; position:absolute; left:0; top:8px; bottom:8px; width:3px; background: linear-gradient(180deg, #818cf8, #6366F1); border-radius:0 2px 2px 0; }
.layui-nav-tree .layui-nav-child { background: rgba(0,0,0,.15) !important; }
.layui-nav-tree .layui-nav-child dd a { padding-left: 52px; height: 40px; line-height: 40px; font-size: 13px; color: rgba(255,255,255,.5); }
.layui-nav-tree .layui-nav-child dd.layui-this a { color: #818cf8 !important; background: transparent !important; }
.layui-nav-tree .layui-nav-child dd a:hover { color: rgba(255,255,255,.9); }
.layui-nav-tree .layui-nav-itemed>.layui-nav-child { background: rgba(0,0,0,.1) !important; }
.layui-nav-tree .layui-nav-more { border-top-color: rgba(255,255,255,.3); }
.side-section-label { padding: 20px 28px 6px; font-size: 10px; color: rgba(255,255,255,.22); text-transform: uppercase; letter-spacing: 2px; font-weight: 700; }

/* 侧边栏用户卡片 */
.side-user-card {
  padding: 20px 20px 16px; margin: 8px 12px 4px;
  background: linear-gradient(135deg, rgba(99,102,241,.15), rgba(129,140,248,.08));
  border-radius: 12px; border: 1px solid rgba(99,102,241,.12);
}
.side-user-card .side-avatar {
  width: 42px; height: 42px; border-radius: 50%;
  background: linear-gradient(135deg, #6366F1, #818cf8); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 18px; font-weight: 800; margin-bottom: 10px;
  box-shadow: 0 4px 12px rgba(99,102,241,.3);
}
.side-user-card .side-uname { color: #fff; font-size: 14px; font-weight: 600; margin-bottom: 2px; }
.side-user-card .side-role { font-size: 11px; color: rgba(255,255,255,.4); display: flex; align-items: center; }
.side-user-card .side-role-dot { width: 6px; height: 6px; border-radius: 50%; background: #34d399; margin-right: 6px; animation: pulse 2s infinite; box-shadow: 0 0 6px rgba(52,211,153,.5); }
.side-user-card .side-tip { margin-top: 10px; font-size: 11px; line-height: 1.6; color: rgba(255,255,255,.42); }

/* 侧边栏底部 */
.side-footer {
  padding: 16px 20px; margin-top: auto;
  border-top: 1px solid rgba(255,255,255,.06);
  font-size: 11px; color: rgba(255,255,255,.18); text-align: center;
}
.side-footer-title { color: rgba(255,255,255,.35); font-size: 11px; margin-bottom: 4px; }
.side-footer-desc { color: rgba(255,255,255,.2); font-size: 10px; letter-spacing: .4px; }

/* Logo 区 */
.layui-layout-admin .layui-logo {
  background: #151829 !important; color: #fff !important;
  font-size: 17px; font-weight: 700; letter-spacing: 1px;
  height: 60px; line-height: 60px; border-bottom: 1px solid rgba(255,255,255,.06);
}
.layui-logo .logo-icon {
  display: inline-block; width: 34px; height: 34px; border-radius: 10px;
  background: linear-gradient(135deg, #6366F1 0%, #a78bfa 100%);
  color: #fff; text-align: center; line-height: 34px; font-size: 17px; font-weight: 800;
  margin-right: 10px; vertical-align: middle;
  box-shadow: 0 3px 10px rgba(99,102,241,.35);
  animation: logoPulse 3s ease-in-out infinite;
}
@keyframes logoPulse { 0%,100% { box-shadow: 0 3px 10px rgba(99,102,241,.35); } 50% { box-shadow: 0 3px 18px rgba(99,102,241,.55); } }
.layui-logo .logo-text { vertical-align: middle; }

/* ===== 布局：顶栏 ===== */
.layui-layout-admin .layui-header {
  background: rgba(255,255,255,.92) !important; height: 60px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 4px 12px rgba(0,0,0,.03);
  border-bottom: 1px solid rgba(0,0,0,.05);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
}
.layui-header .layui-layout-right { margin-right: 20px; }
.layui-header .layui-layout-right a { color: #555; font-size: 13px; }
.layui-header .layui-layout-right .layui-nav-item { line-height: 60px; }
.layui-header .layui-nav { background: transparent; }
.layui-header .layui-nav .layui-nav-item a { color: #555; }
.layui-header .layui-nav .layui-nav-item a:hover { color: #6366F1; }
.layui-header .layui-nav .layui-nav-bar { background: #6366F1; }
.header-info { display: flex; align-items: center; justify-content: space-between; height: 60px; padding-left: 20px; width: calc(100% - 420px); }
.header-main { display: flex; flex-direction: column; justify-content: center; min-width: 0; }
.header-breadcrumb { font-size: 14px; color: #666; }
.header-breadcrumb span { color: #999; margin: 0 6px; }
.header-breadcrumb b { color: #333; font-weight: 600; }
.header-subtitle { font-size: 12px; color: #a3a3a3; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.header-meta { display: flex; align-items: center; gap: 10px; margin-left: 18px; }
.header-chip {
  height: 28px; line-height: 28px; padding: 0 10px; border-radius: 999px;
  background: #f6f7fb; color: #6b7280; font-size: 12px; border: 1px solid #eceef5;
}
.header-chip-success { background: rgba(16,185,129,.08); color: #059669; border-color: rgba(16,185,129,.14); }
.header-chip-dot {
  display: inline-block; width: 6px; height: 6px; border-radius: 50%;
  background: #10b981; margin-right: 6px; vertical-align: 1px;
  box-shadow: 0 0 0 3px rgba(16,185,129,.12);
}
.header-clock { font-size: 12px; color: #aaa; margin-right: 24px; font-variant-numeric: tabular-nums; }

/* ===== 布局：主体 ===== */
.layui-layout-admin .layui-body {
  background: #f0f2f5; top: 60px;
  background-image:
    radial-gradient(ellipse 80% 50% at 50% -20%, rgba(99,102,241,.04), transparent),
    radial-gradient(ellipse 60% 40% at 90% 80%, rgba(16,185,129,.03), transparent);
}
.layui-layout-admin .layui-side { top: 0; }
.layui-layout-admin .layui-side-scroll { padding-top: 60px; display: flex; flex-direction: column; }
.layui-layout-admin .layui-side-scroll .layui-nav { flex: 1; }
.body-wrap { padding: 24px 28px 40px; min-height: calc(100vh - 60px); }

/* ===== 面包屑 & 页标题 ===== */
.page-header { margin-bottom: 24px; }
.page-title { font-size: 22px; font-weight: 800; color: #1a1a2e; margin: 0 0 6px; line-height: 1.3; letter-spacing: -.3px; }
.page-title small { font-size: 13px; color: #8c8c8c; font-weight: 400; margin-left: 12px; }
.page-desc { font-size: 13px; color: #9ca3af; margin: 0; }

/* ===== 数据看板 ===== */
.stat-row { display: flex; flex-wrap: wrap; margin: 0 -10px 20px; }
.stat-card {
  flex: 1; min-width: 220px; margin: 0 10px 20px;
  background: #fff; border-radius: 14px; padding: 24px 22px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.05);
  display: flex; align-items: flex-start; position: relative;
  overflow: hidden; transition: transform .25s, box-shadow .25s;
  border: 1px solid rgba(0,0,0,.04);
}
.stat-card:hover { transform: translateY(-4px); box-shadow: 0 8px 28px rgba(0,0,0,.1); border-color: transparent; }
.stat-card::before {
  content: ''; position: absolute; top: -40px; right: -40px; width: 100px; height: 100px;
  border-radius: 50%; opacity: .06; transition: transform .4s;
}
.stat-card:hover::before { transform: scale(1.5); }
.stat-card.blue::before { background: #1890ff; }
.stat-card.green::before { background: #10b981; }
.stat-card.orange::before { background: #fa8c16; }
.stat-card.gold::before { background: #d97706; }
.stat-card::after { content:''; position:absolute; top:0; left:0; right:0; height:3px; }
.stat-card.blue::after { background: linear-gradient(90deg, #1890ff, #69c0ff); }
.stat-card.green::after { background: linear-gradient(90deg, #10b981, #6ee7b7); }
.stat-card.orange::after { background: linear-gradient(90deg, #fa8c16, #ffc069); }
.stat-card.gold::after { background: linear-gradient(90deg, #d97706, #fbbf24); }
.stat-icon {
  width: 50px; height: 50px; border-radius: 14px;
  display: flex; align-items: center; justify-content: center;
  font-size: 22px; color: #fff; margin-right: 16px; flex-shrink: 0;
}
.stat-icon.blue { background: linear-gradient(135deg, #1890ff, #60a5fa); box-shadow: 0 4px 12px rgba(24,144,255,.25); }
.stat-icon.green { background: linear-gradient(135deg, #10b981, #34d399); box-shadow: 0 4px 12px rgba(16,185,129,.25); }
.stat-icon.orange { background: linear-gradient(135deg, #fa8c16, #ffa940); box-shadow: 0 4px 12px rgba(250,140,22,.25); }
.stat-icon.gold { background: linear-gradient(135deg, #d97706, #f59e0b); box-shadow: 0 4px 12px rgba(217,119,6,.25); }
.stat-body { flex: 1; min-width: 0; }
.stat-card .num { font-size: 28px; font-weight: 800; color: #1a1a2e; line-height: 1.2; font-variant-numeric: tabular-nums; letter-spacing: -.5px; }
.stat-card .label { font-size: 13px; color: #8c8c8c; margin-top: 4px; }
.stat-card .sub { font-size: 12px; color: #b0b0b0; margin-top: 8px; padding-top: 8px; border-top: 1px dashed #eee; }

/* ===== 待办预警 ===== */
.todo-panel {
  margin-top: 0; background: #fff; border-radius: 14px;
  padding: 0; box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.05);
  overflow: hidden; border: 1px solid rgba(0,0,0,.04);
}
.todo-panel .panel-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 18px 24px; border-bottom: 1px solid #f0f0f0;
}
.todo-panel .panel-head h3 { font-size: 16px; font-weight: 700; color: #1a1a2e; margin: 0; }
.todo-panel .panel-head .badge-count {
  display: inline-block; min-width: 20px; height: 20px; line-height: 20px;
  text-align: center; border-radius: 10px; font-size: 12px; font-weight: 600;
  background: #f5222d; color: #fff; padding: 0 6px;
}
.todo-body { padding: 8px 24px; }
.todo-item {
  padding: 14px 0; border-bottom: 1px solid #f5f5f5;
  display: flex; align-items: center; justify-content: space-between;
  transition: background .15s;
}
.todo-item:last-child { border-bottom: none; }
.todo-item:hover { background: #fafbfc; margin: 0 -24px; padding-left: 24px; padding-right: 24px; }
.todo-dot { width: 8px; height: 8px; border-radius: 50%; margin-right: 12px; flex-shrink: 0; animation: pulse 2s infinite; }
.todo-dot.warn { background: #fa8c16; }
.todo-dot.danger { background: #f5222d; }
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.4} }
.todo-text { font-size: 14px; color: #333; flex: 1; }
.todo-empty { padding: 32px 0; text-align: center; color: #bbb; font-size: 14px; }

/* ===== 双栏统计条：今日业务 + 待办预警 ===== */
.dual-stat-row { display: flex; margin: 0 -10px 20px; }
.dual-stat-section { flex: 1; margin: 0 10px; background: #fff; border-radius: 14px; box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.05); overflow: hidden; border: 1px solid rgba(0,0,0,.04); }
.dual-stat-section.alert { border: 1.5px solid #fee2e2; }
.section-head { padding: 14px 20px; border-bottom: 1px solid #f0f0f0; display: flex; align-items: center; }
.section-head h4 { font-size: 14px; font-weight: 700; color: #1a1a2e; margin: 0; }
.section-head h4 i { margin-right: 6px; font-size: 16px; vertical-align: -1px; }
.section-head.alert-head { border-bottom-color: #fecaca; }
.section-head.alert-head h4 { color: #dc2626; }
.section-body { display: flex; padding: 0; }
.qk-card { flex: 1; text-align: center; padding: 18px 12px; position: relative; }
.qk-card + .qk-card { border-left: 1px solid #f0f0f0; }
.dual-stat-section.alert .qk-card + .qk-card { border-left-color: #fee2e2; }
.qk-card .qk-num { font-size: 26px; font-weight: 800; color: #1a1a2e; font-variant-numeric: tabular-nums; }
.qk-card .qk-label { font-size: 12px; color: #999; margin-top: 4px; }
.qk-card.danger .qk-num { color: #dc2626; }
.qk-card.danger .qk-label { color: #ef4444; font-weight: 600; }
.qk-card .alert-badge { position: absolute; top: 10px; right: 10px; width: 8px; height: 8px; border-radius: 50%; background: #ef4444; animation: alertPulse 1.5s infinite; }
@keyframes alertPulse { 0%,100% { box-shadow: 0 0 0 0 rgba(239,68,68,.5); } 50% { box-shadow: 0 0 0 6px rgba(239,68,68,0); } }

/* ===== 搜索工具栏 ===== */
.toolbar {
  background: linear-gradient(180deg, rgba(255,255,255,.98), rgba(250,251,255,.98));
  padding: 16px 18px; border-radius: 16px;
  margin-bottom: 16px; box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 8px 24px rgba(15,23,42,.05);
  display: flex; align-items: center; border: 1px solid rgba(99,102,241,.06);
  position: relative; overflow: hidden;
}
.toolbar::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
  background: linear-gradient(180deg, #6366F1, #a78bfa);
  opacity: .85;
}
.toolbar-main {
  display: flex; align-items: center; flex: 1; min-width: 0;
}
.toolbar-actions {
  display: inline-flex; align-items: center; gap: 10px; margin-left: auto;
  position: relative; z-index: 1;
}
.toolbar .layui-form { display: flex; align-items: center; flex-wrap: wrap; }
.toolbar .layui-inline { margin: 6px 10px 6px 0; }
.toolbar .layui-form-item { margin-bottom: 0; }
.toolbar .layui-input {
  height: 38px; line-height: 38px; border-radius: 10px;
  border-color: #e5e7eb; font-size: 13px; transition: border-color .2s, box-shadow .2s, transform .2s;
  background: #fff;
}
.toolbar .layui-input:hover { border-color: #c7d2fe; }
.toolbar .layui-input:focus { border-color: #6366F1; box-shadow: 0 0 0 3px rgba(99,102,241,.12); transform: translateY(-1px); }
.toolbar select { border-radius: 6px; }
.toolbar .layui-btn {
  height: 38px; line-height: 38px; border-radius: 10px; padding: 0 20px;
  background: #6366F1; border-color: #6366F1; font-size: 13px;
  box-shadow: 0 8px 18px rgba(99,102,241,.18);
}
.toolbar .layui-btn:hover { background: #4f46e5; border-color: #4f46e5; transform: translateY(-1px); }

/* ===== 表格容器 ===== */
.table-box {
  background: #fff; border-radius: 16px; padding: 0;
  box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 10px 28px rgba(15,23,42,.05);
  overflow: hidden; border: 1px solid rgba(99,102,241,.05);
}
.layui-table-view { border: none; }
.layui-table-header { border-bottom: 1px solid #eef2ff; }
.layui-table thead th {
  background: linear-gradient(180deg, #fcfcff, #f5f7ff);
  color: #4b5563; font-weight: 700; font-size: 13px; border-color: #edf0f5;
}
.layui-table tbody td {
  font-size: 13px; border-color: #f3f4f6; transition: background .15s, transform .15s;
  color: #374151;
}
.layui-table tbody tr:hover td { background: #f7f7ff; }
.layui-table-page { padding: 12px 16px; border-top: 1px solid #f3f4f6; }
.layui-table[lay-even] tr:nth-child(even) { background: #fafbfc; }
.layui-table-tool { border-bottom-color: #eee; }
.layui-table-box { border-radius: 0 0 16px 16px; }
.layui-table-body::-webkit-scrollbar,
.layui-table-main::-webkit-scrollbar { width: 8px; height: 8px; }
.layui-table-body::-webkit-scrollbar-thumb,
.layui-table-main::-webkit-scrollbar-thumb { background: #d8dcf0; border-radius: 999px; }
.layui-table-body::-webkit-scrollbar-track,
.layui-table-main::-webkit-scrollbar-track { background: transparent; }

/* ===== 状态标签 ===== */
.st {
  display: inline-flex; align-items: center;
  padding: 3px 10px; border-radius: 20px; font-size: 12px; font-weight: 500;
  line-height: 1; white-space: nowrap;
}
.st::before { content:''; width: 6px; height: 6px; border-radius: 50%; margin-right: 5px; flex-shrink: 0; }
.st-green { background: #f0faf0; color: #389e0d; border: none; }
.st-green::before { background: #52c41a; }
.st-orange { background: #fff8ed; color: #d46b08; border: none; }
.st-orange::before { background: #fa8c16; }
.st-red { background: #fff0f0; color: #cf1322; border: none; }
.st-red::before { background: #f5222d; }
.st-blue { background: #e8f4ff; color: #096dd9; border: none; }
.st-blue::before { background: #1890ff; }
.st-gray { background: #f5f5f5; color: #8c8c8c; border: none; }
.st-gray::before { background: #bbb; }

/* ===== 按钮优化 ===== */
.layui-btn { border-radius: 4px; font-size: 13px; transition: all .15s; }
.layui-btn-xs { border-radius: 3px; padding: 0 8px; height: 24px; line-height: 24px; }
.layui-btn-sm { border-radius: 6px; }
.layui-btn-normal { background: #1890ff; border-color: #1890ff; }
.layui-btn-normal:hover { background: #40a9ff; }
.layui-btn-warm { background: #fa8c16; border-color: #fa8c16; }
.layui-btn-warm:hover { background: #ffa940; }
.layui-btn-danger { background: #ff4d4f; border-color: #ff4d4f; }
.layui-btn-danger:hover { background: #ff7875; }
.layui-btn-primary { color: #555; }
.layui-btn-primary:hover { color: #6366F1; border-color: #6366F1; }

/* ===== 审核弹窗 ===== */
.audit-info { margin-bottom: 20px; padding: 16px; background: #fafbfc; border-radius: 8px; }
.audit-info p { margin: 8px 0; font-size: 14px; color: #555; display: flex; }
.audit-info p b { color: #1a1a2e; min-width: 80px; flex-shrink: 0; font-weight: 600; }
.audit-img-row { display: flex; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
.audit-img-row img {
  width: 200px; height: 130px; object-fit: cover; border-radius: 8px;
  border: 2px solid #eee; cursor: pointer; transition: all .2s;
}
.audit-img-row img:hover { border-color: #6366F1; box-shadow: 0 4px 16px rgba(0,0,0,.12); transform: scale(1.02); }
.audit-img-row span { display: flex; align-items: center; justify-content: center; width: 200px; height: 130px; background: #f5f5f5; border-radius: 8px; color: #ccc; font-size: 13px; border: 2px dashed #e0e0e0; }

/* ===== 登录页 ===== */
.login-page { min-height: 100vh; display: flex; background: #f0f2f5; }
.login-brand {
  width: 520px;
  background: linear-gradient(160deg, #191d31 0%, #272b52 40%, #6366F1 100%);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 60px; color: #fff; position: relative; overflow: hidden;
}
.login-brand::before {
  content:''; position: absolute; width: 400px; height: 400px;
  border-radius: 50%; background: radial-gradient(circle, rgba(99,102,241,.2), transparent 70%);
  top: -100px; right: -100px; animation: floatSlow 8s ease-in-out infinite;
}
.login-brand::after {
  content:''; position: absolute; width: 300px; height: 300px;
  border-radius: 50%; background: radial-gradient(circle, rgba(167,139,250,.15), transparent 70%);
  bottom: -80px; left: -60px; animation: floatSlow 10s ease-in-out infinite reverse;
}
@keyframes floatSlow { 0%,100% { transform: translate(0,0); } 50% { transform: translate(15px,-20px); } }
.login-brand .brand-deco {
  position: absolute; inset: 0; z-index: 0; opacity: .06;
  background-image:
    radial-gradient(circle at 20% 80%, #fff 1px, transparent 1px),
    radial-gradient(circle at 80% 20%, #fff 1px, transparent 1px),
    radial-gradient(circle at 40% 40%, #fff 1.5px, transparent 1.5px),
    radial-gradient(circle at 70% 60%, #fff 1px, transparent 1px),
    radial-gradient(circle at 10% 30%, #fff 1px, transparent 1px),
    radial-gradient(circle at 60% 90%, #fff 1px, transparent 1px),
    radial-gradient(circle at 90% 50%, #fff 1.5px, transparent 1.5px);
  background-size: 100% 100%;
}
.login-brand .brand-logo {
  width: 72px; height: 72px; border-radius: 20px;
  background: linear-gradient(135deg, rgba(255,255,255,.2), rgba(255,255,255,.05));
  backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,.15);
  display: flex; align-items: center; justify-content: center;
  font-size: 36px; font-weight: 800; margin-bottom: 24px;
  position: relative; z-index: 1;
  box-shadow: 0 8px 32px rgba(0,0,0,.2);
}
.login-brand .brand-name { font-size: 30px; font-weight: 800; margin-bottom: 12px; position: relative; z-index: 1; letter-spacing: 2px; }
.login-brand .brand-desc { font-size: 14px; opacity: .55; line-height: 1.8; text-align: center; max-width: 300px; position: relative; z-index: 1; }
.login-brand .brand-features {
  position: relative; z-index: 1; margin-top: 40px;
  display: flex; gap: 20px;
}
.login-brand .brand-feat-item {
  text-align: center; padding: 12px 16px;
  background: rgba(255,255,255,.06); border-radius: 12px;
  border: 1px solid rgba(255,255,255,.08); backdrop-filter: blur(6px);
  min-width: 90px;
}
.login-brand .brand-feat-item .feat-icon { font-size: 24px; margin-bottom: 6px; }
.login-brand .brand-feat-item .feat-text { font-size: 11px; opacity: .6; }
.login-main {
  flex: 1; display: flex; align-items: center; justify-content: center;
  background-image: radial-gradient(ellipse at 30% 50%, rgba(99,102,241,.03), transparent 60%);
}
.login-box {
  width: 420px; background: #fff; padding: 48px 40px;
  border-radius: 20px; box-shadow: 0 4px 6px rgba(0,0,0,.04), 0 12px 48px rgba(0,0,0,.08);
  animation: fadeSlideIn .5s ease-out;
}
.login-box h2 { font-size: 26px; color: #1a1a2e; font-weight: 800; margin-bottom: 4px; letter-spacing: -.3px; }
.login-box .sub { font-size: 14px; color: #9ca3af; margin-bottom: 36px; }
.login-box .layui-form-item { margin-bottom: 20px; }
.login-box .layui-input {
  height: 44px; line-height: 44px; border-radius: 8px;
  border: 1.5px solid #e0e0e0; font-size: 14px; padding: 0 16px;
  transition: border-color .2s, box-shadow .2s;
}
.login-box .layui-input:focus { border-color: #6366F1; box-shadow: 0 0 0 3px rgba(99,102,241,.12); }
.login-helper { font-size: 12px; line-height: 1.7; color: #9ca3af; margin-top: -4px; }
.login-box .layui-btn {
  height: 46px; line-height: 46px; font-size: 16px; font-weight: 600;
  border-radius: 8px; background: #6366F1; border-color: #6366F1;
  letter-spacing: 2px; transition: all .2s;
}
.login-box .layui-btn:hover { background: #4f46e5; transform: translateY(-1px); box-shadow: 0 6px 20px rgba(99,102,241,.35); }
.login-security-note {
  margin-top: 18px; padding: 14px 16px; border-radius: 12px;
  background: #fafbff; border: 1px solid #eef1ff;
}
.login-security-title { font-size: 12px; color: #6366F1; font-weight: 700; margin-bottom: 6px; }
.login-security-desc { font-size: 12px; line-height: 1.7; color: #8b95a7; }
.login-footer { margin-top: 32px; text-align: center; font-size: 12px; color: #d1d5db; }

/* ===== 详情弹窗 ===== */
.detail-table { width: 100%; border-collapse: collapse; border-radius: 8px; overflow: hidden; }
.detail-table td { padding: 10px 16px; border: 1px solid #f0f0f0; font-size: 13px; vertical-align: top; }
.detail-table td:first-child { width: 100px; color: #8c8c8c; background: #fafbfc; white-space: nowrap; font-weight: 500; }

/* ===== Tabs 优化 ===== */
.layui-tab-brief>.layui-tab-title .layui-this { color: #6366F1; }
.layui-tab-brief>.layui-tab-title .layui-this::after { border-color: #6366F1; height: 3px; border-radius: 2px; }
.layui-tab-content { padding: 0; }

/* ===== Layer 弹窗美化 ===== */
.layui-layer-title { background: #fafbfc !important; border-bottom: 1px solid #eee !important; font-weight: 600 !important; }
.layui-layer-btn a { border-radius: 6px !important; min-width: 80px; }
.layui-layer-btn .layui-layer-btn0 { background: #6366F1 !important; border-color: #6366F1 !important; }
.layui-layer-content { padding: 20px !important; }

/* ===== 选项卡内容 ===== */
.tab-content { padding: 16px 0 0; }

/* ===== 图表网格 ===== */
.chart-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 20px;
  margin-bottom: 20px;
}
.chart-panel {
  background: #fff; border-radius: 14px;
  box-shadow: 0 1px 3px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.05);
  overflow: hidden; border: 1px solid rgba(0,0,0,.04);
  transition: box-shadow .25s;
}
.chart-panel:hover { box-shadow: 0 4px 20px rgba(0,0,0,.08); }
.chart-panel.wide { grid-column: span 2; }
.chart-panel .panel-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 18px 24px; border-bottom: 1px solid #f0f0f0;
}
.chart-panel .panel-head h3 { font-size: 15px; font-weight: 700; color: #1a1a2e; margin: 0; }
.chart-panel > div:last-child { padding: 16px; }

/* ===== 导出按钮 ===== */
.toolbar .export-btn {
  margin-left: auto;
  background: #fff; border: 1px solid #d9d9d9; color: #555;
  border-radius: 6px; height: 36px; line-height: 34px;
  font-size: 13px; padding: 0 16px; cursor: pointer;
  transition: all .2s;
}
.toolbar .export-btn:hover { border-color: #6366F1; color: #6366F1; }
.toolbar .export-btn i { margin-right: 4px; }

/* ===== 操作列：文字链接替代彩虹按钮 ===== */
.tbl-link { cursor:pointer; font-size:12px; padding:0 4px; color:#1890ff; background:none; border:none; display:inline; line-height:28px; }
.tbl-link:hover { text-decoration:underline; opacity:.85; }
.tbl-link-danger { color:#ff4d4f; }
.tbl-link-danger:hover { color:#cf1322; }
.tbl-link-warn { color:#fa8c16; }
.tbl-link-warn:hover { color:#d46b08; }
.tbl-link-success { color:#52c41a; }
.tbl-link-success:hover { color:#389e0d; }
.tbl-sep { color:#e0e0e0; margin:0 1px; user-select:none; font-size:12px; line-height:28px; }

/* ===== 金额右对齐 ===== */
.money-cell { text-align:right; font-variant-numeric:tabular-nums; font-weight:600; white-space:nowrap; font-family:'Menlo','Monaco','Consolas',monospace; font-size:13px; }

/* ===== 日期范围选择器 ===== */
.toolbar .date-range-input { width:250px; }

/* ===== 批量操作栏 ===== */
.batch-bar {
  display:inline-flex; align-items:center; margin-left:14px;
  padding: 6px 10px; border-radius: 999px; background: #f8faff;
  border: 1px solid #e6ebff;
}
.batch-bar .layui-btn { height:32px; line-height:32px; font-size:12px; margin-left:8px; border-radius: 999px; }
.batch-bar .batch-count { font-size:12px; color:#6366F1; margin-left:8px; font-weight: 600; }

/* ===== 导出按钮 / 次级动作 ===== */
.export-btn {
  display: inline-flex; align-items: center; justify-content: center;
  height: 38px; padding: 0 16px; border-radius: 10px;
  background: #fff; border: 1px solid #e5e7eb; color: #4b5563;
  font-size: 13px; cursor: pointer; transition: all .2s;
}
.export-btn:hover {
  color: #6366F1; border-color: #c7d2fe; background: #f8faff;
  transform: translateY(-1px);
}
.export-btn i { margin-right: 6px; }

/* ===== 审计日志 ===== */
.audit-log-row { display: flex; align-items: center; padding: 12px 0; border-bottom: 1px solid #f5f5f5; }
.audit-log-row:last-child { border-bottom: none; }

/* ===== Transitions ===== */
.layui-nav-tree .layui-nav-item a,
.layui-btn,
.stat-card,
.toolbar .layui-input { transition: all .2s ease; }

/* ===== 欢迎横幅 ===== */
.welcome-banner {
  background: linear-gradient(135deg, #6366F1 0%, #818cf8 50%, #a78bfa 100%);
  border-radius: 16px; padding: 28px 32px; margin-bottom: 24px;
  display: flex; align-items: center; justify-content: space-between;
  color: #fff; position: relative; overflow: hidden;
}
.welcome-banner::before {
  content: ''; position: absolute; right: 60px; top: -30px;
  width: 180px; height: 180px; border-radius: 50%;
  background: rgba(255,255,255,.08);
}
.welcome-banner::after {
  content: ''; position: absolute; right: -20px; bottom: -40px;
  width: 120px; height: 120px; border-radius: 50%;
  background: rgba(255,255,255,.05);
}
.welcome-banner .wb-content { position: relative; z-index: 1; }
.welcome-banner .wb-title { font-size: 22px; font-weight: 800; margin-bottom: 6px; }
.welcome-banner .wb-desc { font-size: 13px; opacity: .75; line-height: 1.6; }
.welcome-banner .wb-time { font-size: 12px; opacity: .5; margin-top: 8px; }
.welcome-banner .wb-deco {
  position: relative; z-index: 1; font-size: 64px;
  opacity: .8; margin-right: 20px; filter: drop-shadow(0 4px 8px rgba(0,0,0,.15));
}

/* ===== 空状态 ===== */
.empty-state { text-align: center; padding: 60px 20px; color: #bbb; }
.empty-state .empty-icon { font-size: 48px; margin-bottom: 12px; opacity: .3; }
.empty-state .empty-text { font-size: 14px; }

/* ===== 模块横幅（子页面用，比 welcome-banner 更轻量） ===== */
.module-banner {
  border-radius: 14px; padding: 22px 28px; margin-bottom: 20px;
  display: flex; align-items: center; position: relative; overflow: hidden;
}
.module-banner::before {
  content: ''; position: absolute; right: -30px; top: -30px;
  width: 140px; height: 140px; border-radius: 50%; opacity: .12;
}
.module-banner::after {
  content: ''; position: absolute; right: 60px; bottom: -50px;
  width: 100px; height: 100px; border-radius: 50%; opacity: .07;
}
.module-banner .mb-icon {
  width: 46px; height: 46px; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  font-size: 22px; color: #fff; margin-right: 18px; flex-shrink: 0;
  position: relative; z-index: 1;
}
.module-banner .mb-body { position: relative; z-index: 1; flex: 1; min-width: 0; }
.module-banner .mb-title { font-size: 18px; font-weight: 800; margin-bottom: 3px; }
.module-banner .mb-desc { font-size: 12px; opacity: .7; }
.module-banner .mb-deco {
  position: relative; z-index: 1; font-size: 40px; margin-left: auto;
  opacity: .6; filter: drop-shadow(0 2px 4px rgba(0,0,0,.08));
}

/* 模块色: 订单-蓝 */
.module-banner.mod-orders { background: linear-gradient(135deg, #eff6ff, #dbeafe); color: #1e40af; }
.module-banner.mod-orders::before, .module-banner.mod-orders::after { background: #3b82f6; }
.module-banner.mod-orders .mb-icon { background: linear-gradient(135deg, #3b82f6, #60a5fa); box-shadow: 0 3px 10px rgba(59,130,246,.3); }
.module-banner.mod-orders .mb-desc { color: #3b82f6; }

/* 模块色: 教员-靛 */
.module-banner.mod-teachers { background: linear-gradient(135deg, #eef2ff, #e0e7ff); color: #3730a3; }
.module-banner.mod-teachers::before, .module-banner.mod-teachers::after { background: #6366F1; }
.module-banner.mod-teachers .mb-icon { background: linear-gradient(135deg, #6366F1, #818cf8); box-shadow: 0 3px 10px rgba(99,102,241,.3); }
.module-banner.mod-teachers .mb-desc { color: #6366F1; }

/* 模块色: 家长-青 */
.module-banner.mod-users { background: linear-gradient(135deg, #ecfeff, #cffafe); color: #155e75; }
.module-banner.mod-users::before, .module-banner.mod-users::after { background: #06b6d4; }
.module-banner.mod-users .mb-icon { background: linear-gradient(135deg, #06b6d4, #22d3ee); box-shadow: 0 3px 10px rgba(6,182,212,.3); }
.module-banner.mod-users .mb-desc { color: #0891b2; }

/* 模块色: 工单-橙 */
.module-banner.mod-tickets { background: linear-gradient(135deg, #fff7ed, #ffedd5); color: #9a3412; }
.module-banner.mod-tickets::before, .module-banner.mod-tickets::after { background: #f97316; }
.module-banner.mod-tickets .mb-icon { background: linear-gradient(135deg, #f97316, #fb923c); box-shadow: 0 3px 10px rgba(249,115,22,.3); }
.module-banner.mod-tickets .mb-desc { color: #ea580c; }

/* 模块色: 评价-琥珀 */
.module-banner.mod-reviews { background: linear-gradient(135deg, #fffbeb, #fef3c7); color: #92400e; }
.module-banner.mod-reviews::before, .module-banner.mod-reviews::after { background: #f59e0b; }
.module-banner.mod-reviews .mb-icon { background: linear-gradient(135deg, #f59e0b, #fbbf24); box-shadow: 0 3px 10px rgba(245,158,11,.3); }
.module-banner.mod-reviews .mb-desc { color: #d97706; }

/* 模块色: 公告-紫 */
.module-banner.mod-notifications { background: linear-gradient(135deg, #faf5ff, #f3e8ff); color: #6b21a8; }
.module-banner.mod-notifications::before, .module-banner.mod-notifications::after { background: #a855f7; }
.module-banner.mod-notifications .mb-icon { background: linear-gradient(135deg, #a855f7, #c084fc); box-shadow: 0 3px 10px rgba(168,85,247,.3); }
.module-banner.mod-notifications .mb-desc { color: #9333ea; }

/* 模块色: 财务-绿 */
.module-banner.mod-finance { background: linear-gradient(135deg, #ecfdf5, #d1fae5); color: #065f46; }
.module-banner.mod-finance::before, .module-banner.mod-finance::after { background: #10b981; }
.module-banner.mod-finance .mb-icon { background: linear-gradient(135deg, #10b981, #34d399); box-shadow: 0 3px 10px rgba(16,185,129,.3); }
.module-banner.mod-finance .mb-desc { color: #059669; }

/* 模块色: 系统-石板 */
.module-banner.mod-system { background: linear-gradient(135deg, #f8fafc, #f1f5f9); color: #334155; }
.module-banner.mod-system::before, .module-banner.mod-system::after { background: #64748b; }
.module-banner.mod-system .mb-icon { background: linear-gradient(135deg, #64748b, #94a3b8); box-shadow: 0 3px 10px rgba(100,116,139,.3); }
.module-banner.mod-system .mb-desc { color: #64748b; }

/* 模块色: 审计-灰 */
.module-banner.mod-audit { background: linear-gradient(135deg, #f9fafb, #f3f4f6); color: #374151; }
.module-banner.mod-audit::before, .module-banner.mod-audit::after { background: #6b7280; }
.module-banner.mod-audit .mb-icon { background: linear-gradient(135deg, #6b7280, #9ca3af); box-shadow: 0 3px 10px rgba(107,114,128,.3); }
.module-banner.mod-audit .mb-desc { color: #6b7280; }

/* ===== 表格分页美化 ===== */
.layui-table-page .layui-laypage a,
.layui-table-page .layui-laypage span { border-radius: 6px !important; }
.layui-table-page .layui-laypage .layui-laypage-curr em { background: #6366F1 !important; }
.layui-table-page .layui-laypage span.layui-laypage-count { color: #9ca3af; font-size: 12px; }

/* ===== 响应式：小屏隐藏品牌栏 ===== */
@media (max-width: 900px) {
  .login-brand { display: none; }
  .dual-stat-row { flex-direction: column; }
  .dual-stat-section { margin-bottom: 16px; }
  .header-meta .header-chip { display: none; }
  .header-info { width: calc(100% - 260px); }
  .header-subtitle { display: none; }
  .module-banner .mb-deco { display: none; }
}
