*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;color:#303133;background:#F5F7FA;line-height:1.6}a{text-decoration:none;color:inherit}button{cursor:pointer;font-family:inherit}
.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh;background:linear-gradient(135deg,#1a1a2e 0%,#16213e 50%,#0f3460 100%)}
.login-box{width:420px;background:#fff;border-radius:16px;padding:40px;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.login-logo{text-align:center;margin-bottom:32px}.logo-icon{font-size:48px;margin-bottom:12px}.login-logo h1{font-size:22px;font-weight:700}.login-logo p{font-size:13px;color:#909399;margin-top:4px}
.form-group{margin-bottom:20px}.form-input{width:100%;padding:12px 12px 12px 40px;border:2px solid #DCDFE6;border-radius:8px;font-size:14px;transition:.3s;outline:none}.form-input:focus{border-color:#409EFF;box-shadow:0 0 0 3px rgba(64,158,255,.15)}
.input-with-icon{position:relative}.input-with-icon .icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:16px}
.btn{display:inline-block;padding:8px 20px;border:none;border-radius:6px;font-size:14px;font-weight:500;text-align:center;transition:.3s;white-space:nowrap}
.btn-primary{background:#409EFF;color:#fff}.btn-primary:hover{background:#66b1ff}.btn-success{background:#67C23A;color:#fff}.btn-warning{background:#E6A23C;color:#fff}.btn-danger{background:#F56C6C;color:#fff}.btn-outline{border:1px solid #DCDFE6;background:#fff;color:#606266}.btn-outline:hover{border-color:#409EFF;color:#409EFF}.btn-lg{width:100%;padding:14px;font-size:16px}.btn-sm{padding:5px 14px;font-size:12px}
.app-layout{display:flex;height:100vh;overflow:hidden}
.sidebar{width:220px;background:#1d2939;color:#e4e7ec;display:flex;flex-direction:column;flex-shrink:0;transition:width .3s;z-index:100}
.sidebar-header{height:60px;display:flex;align-items:center;padding:0 18px;border-bottom:1px solid rgba(255,255,255,.08);font-weight:700;font-size:16px}
.sidebar-nav{flex:1;overflow-y:auto;padding:12px 0}.nav-group-title{padding:10px 20px 6px;font-size:11px;color:#64748b;text-transform:uppercase;letter-spacing:1px;font-weight:600}
.nav-item{display:flex;align-items:center;padding:10px 20px;color:#94a3b8;cursor:pointer;transition:.2s;font-size:14px;gap:10px}.nav-item:hover{background:rgba(64,158,255,.1);color:#e4e7ec}.nav-item.active{background:rgba(64,158,255,.15);color:#409EFF;border-right:3px solid #409EFF}
.nav-icon{font-size:17px;width:24px;text-align:center}
.main-area{flex:1;display:flex;flex-direction:column;overflow:hidden;background:#F5F7FA}
.header-bar{height:56px;background:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 20px;border-bottom:1px solid #EBEEF5;flex-shrink:0}
.header-left{display:flex;align-items:center;gap:14px}.toggle-sidebar{background:none;border:none;font-size:20px;cursor:pointer;color:#606266;padding:4px 8px}
.breadcrumb{font-size:13px;color:#909399}
.header-right{display:flex;align-items:center;gap:12px}.user-info{display:flex;align-items:center;gap:8px}
.user-avatar{width:30px;height:30px;border-radius:50%;background:#409EFF;color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}
.content-wrapper{flex:1;overflow-y:auto;padding:20px}
.stats-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px;margin-bottom:20px}
.stat-card{background:#fff;border-radius:10px;padding:18px 20px;position:relative;overflow:hidden;border-left:4px solid transparent}
.stat-card.primary{border-left-color:#409EFF}.stat-card.success{border-left-color:#67C23A}.stat-card.warning{border-left-color:#E6A23C}.stat-card.danger{border-left-color:#F56C6C}.stat-card.info{border-left-color:#909399}
.stat-label{font-size:13px;color:#909399;margin-bottom:8px}.stat-value{font-size:30px;font-weight:700;color:#303133}.stat-desc{font-size:12px;color:#c0c4cc;margin-top:4px}
.data-table-container{background:#fff;border-radius:10px;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.06);margin-bottom:20px}
.table-toolbar{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;border-bottom:1px solid #EBEEF5;font-size:14px}.table-toolbar a{color:#409EFF;font-size:13px}
.data-table{width:100%;border-collapse:collapse}
.data-table th{background:#fafbfc;padding:11px 14px;text-align:left;font-size:13px;font-weight:600;color:#606266;border-bottom:1px solid #EBEEF5;white-space:nowrap}
.data-table td{padding:11px 14px;font-size:13px;border-bottom:1px solid #f0f2f5;color:#303133;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.data-table tr:hover td{background:#f8fafc}.data-table tr:last-child td{border-bottom:none}
.empty-state{text-align:center;color:#909399;padding:40px 20px;font-size:14px}.empty-icon{font-size:48px;margin-bottom:12px}
.quick-actions{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
.tag{display:inline-block;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:500}.tag-primary{background:#ecf5ff;color:#409EFF}.tag-success{background:#f0f9eb;color:#67C23A}.tag-warning{background:#fdf6ec;color:#E6A23C}.tag-info{background:#f4f4f5;color:#909399}.tag-danger{background:#fef0f0;color:#F56C6C}
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:999;display:flex;justify-content:center;align-items:center}
.modal-box{width:640px;background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 25px 80px rgba(0,0,0,.2)}
.modal-header{padding:16px 22px;border-bottom:1px solid #EBEEF5;display:flex;justify-content:space-between;align-items:center}.modal-header h3{font-size:17px;font-weight:600;color:#303133}
.modal-close{background:none;border:none;font-size:22px;cursor:pointer;color:#c0c4cc;line-height:1}
.modal-body{padding:22px;max-height:60vh;overflow-y:auto}
.modal-footer{padding:14px 22px;border-top:1px solid #EBEEF5;display:flex;justify-content:flex-end;gap:10px}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.form-row-full{grid-column:1/-1}
.form-group label{display:block;font-size:13px;font-weight:600;color:#606266;margin-bottom:6px}
textarea.form-input{min-height:80px;resize:vertical}select.form-input{appearance:auto}
.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:9999;padding:10px 24px;border-radius:8px;font-size:14px;font-weight:500;animation:toastIn .3s ease;box-shadow:0 4px 20px rgba(0,0,0,.15)}
.toast-success{background:#f0f9eb;color:#67C23A;border:1px solid #e1f3d8}.toast-error{background:#fef0f0;color:#F56C6C;border:1px solid #fde2e2}.toast-warning{background:#fdf6ec;color:#E6A23C;border:1px solid #faecd8}@keyframes toastIn{from{opacity:0;transform:translateX(-50%) translateY(-20px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
.loading-spinner{width:36px;height:36px;border:3px solid #e4e7eb;border-top-color:#409EFF;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.pagination{display:flex;align-items:center;justify-content:center;gap:6px;padding:16px 0;font-size:13px}.pagination button{padding:5px 12px;border:1px solid #dcdfe6;border-radius:4px;background:#fff;color:#606266;cursor:pointer}.pagination button:hover:not(:disabled){border-color:#409EFF;color:#409EFF}.pagination button:disabled{opacity:.4;cursor:not-allowed}.page-info{color:#909399;margin:0 10px}
@media(max-width:768px){.sidebar{position:fixed;left:0;top:0;height:100%;transform:translateX(-100%)}.stats-grid{grid-template-columns:1fr}.modal-box{width:95vw;margin:10px}.form-row{grid-template-columns:1fr}.data-table-container{overflow-x:auto}}
/* 全局表格增强 */
.data-table, table:not(.sidebar *) {
  width:100%;
  border-collapse:collapse;
  background:#fff;
  border-radius:8px;
  overflow:hidden;
  box-shadow:0 1px 3px rgba(0,0,0,0.06);
  font-size:13px;
}
.data-table th, table:not(.sidebar *) th {
  background:#f8fafc;
  color:#475569;
  font-weight:600;
  padding:12px;
  text-align:left;
  border-bottom:2px solid #e2e8f0;
}
.data-table td, table:not(.sidebar *) td {
  padding:10px 12px;
  border-bottom:1px solid #f1f5f9;
}
.data-table tr:hover, table:not(.sidebar *) tr:hover {
  background:#f8fafc;
}
.data-table td code {
  background:#f1f5f9;
  padding:2px 6px;
  border-radius:4px;
  font-size:12px;
}
/* 按钮增强 */
.btn {
  transition: all 0.2s ease;
  font-weight:500;
}
.btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}
/* 卡片增强 */
.card {
  transition: box-shadow 0.2s ease;
}
.card:hover {
  box-shadow: 0 4px 16px rgba(0,0,0,0.1);
}
