#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--primary-color:#409eff;--primary-light:#ecf5ff;--primary-dark:#3a8ee6;--success-color:#67c23a;--success-light:#f0f9eb;--warning-color:#e6a23c;--warning-light:#fef3d8;--danger-color:#f56c6c;--danger-light:#fef0f0;--info-color:#909399;--info-light:#f4f4f5;--bg-color:#f5f7fa;--bg-white:#fff;--bg-gray:#f9fafc;--text-color:#303133;--text-secondary:#606266;--text-light:#909399;--text-disabled:#c0c4cc;--border-color:#e4e7ed;--border-light:#ebeef5;--border-dark:#dcdfe6;--shadow-sm:0 2px 4px rgba(0,0,0,.05);--shadow-md:0 4px 12px rgba(0,0,0,.1);--shadow-lg:0 8px 24px rgba(0,0,0,.15);--spacing-xs:4px;--spacing-sm:8px;--spacing-md:16px;--spacing-lg:24px;--spacing-xl:32px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-full:50%;--transition-fast:0.2s ease;--transition-normal:0.3s ease;--transition-slow:0.5s ease}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;line-height:1.6;color:var(--text-color);background-color:var(--bg-color);transition:all var(--transition-normal)}.container{max-width:1200px;margin:0 auto;padding:0 var(--spacing-md)}.container-fluid{width:100%;padding:0 var(--spacing-md)}.card{background:var(--bg-white);border-radius:var(--radius-md);box-shadow:var(--shadow-md);padding:var(--spacing-lg);margin-bottom:var(--spacing-lg);transition:all var(--transition-normal);border:1px solid var(--border-light)}.card:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-md);padding-bottom:var(--spacing-sm);border-bottom:1px solid var(--border-light)}.card-title{font-size:16px;font-weight:600;color:var(--text-color);margin:0}.flex{display:flex}.flex-center{justify-content:center}.flex-between,.flex-center{display:flex;align-items:center}.flex-between{justify-content:space-between}.flex-column{display:flex;flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.mt-4{margin-top:var(--spacing-xs)}.mt-8{margin-top:var(--spacing-sm)}.mt-16{margin-top:var(--spacing-md)}.mt-24{margin-top:var(--spacing-lg)}.mt-32{margin-top:var(--spacing-xl)}.mb-4{margin-bottom:var(--spacing-xs)}.mb-8{margin-bottom:var(--spacing-sm)}.mb-16{margin-bottom:var(--spacing-md)}.mb-24{margin-bottom:var(--spacing-lg)}.mb-32{margin-bottom:var(--spacing-xl)}.ml-4{margin-left:var(--spacing-xs)}.ml-8{margin-left:var(--spacing-sm)}.ml-16{margin-left:var(--spacing-md)}.ml-24{margin-left:var(--spacing-lg)}.mr-4{margin-right:var(--spacing-xs)}.mr-8{margin-right:var(--spacing-sm)}.mr-16{margin-right:var(--spacing-md)}.mr-24{margin-right:var(--spacing-lg)}.p-4{padding:var(--spacing-xs)}.p-8{padding:var(--spacing-sm)}.p-16{padding:var(--spacing-md)}.p-24{padding:var(--spacing-lg)}.p-32{padding:var(--spacing-xl)}.text-center{text-align:center}.text-right{text-align:right}.text-left{text-align:left}.text-muted{color:var(--text-light)}.text-secondary{color:var(--text-secondary)}.text-primary{color:var(--primary-color)}.text-success{color:var(--success-color)}.text-warning{color:var(--warning-color)}.text-danger{color:var(--danger-color)}.text-sm{font-size:12px}.text-base{font-size:14px}.text-lg{font-size:16px}.text-xl{font-size:18px}.text-2xl{font-size:24px}.font-bold{font-weight:600}.font-medium{font-weight:500}.font-normal{font-weight:400}.bg-white{background-color:var(--bg-white)}.bg-gray{background-color:var(--bg-gray)}.bg-primary{background-color:var(--primary-color)}.bg-primary-light{background-color:var(--primary-light)}.bg-success-light{background-color:var(--success-light)}.bg-warning-light{background-color:var(--warning-light)}.bg-danger-light{background-color:var(--danger-light)}.border{border:1px solid var(--border-color)}.border-top{border-top:1px solid var(--border-color)}.border-bottom{border-bottom:1px solid var(--border-color)}.border-left{border-left:1px solid var(--border-color)}.border-right{border-right:1px solid var(--border-color)}.rounded{border-radius:var(--radius-sm)}.rounded-md{border-radius:var(--radius-md)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-full{border-radius:var(--radius-full)}.shadow-sm{box-shadow:var(--shadow-sm)}.shadow-md{box-shadow:var(--shadow-md)}.shadow-lg{box-shadow:var(--shadow-lg)}.btn{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;transition:all var(--transition-fast);cursor:pointer;border:1px solid transparent;gap:8px}.btn-primary{background-color:var(--primary-color);border-color:var(--primary-color);color:#fff}.btn-primary:hover{background-color:var(--primary-dark);border-color:var(--primary-dark)}.btn-outline{background-color:transparent;border-color:var(--border-color);color:var(--text-color)}.btn-outline:hover{border-color:var(--primary-color);color:var(--primary-color)}.btn-sm{padding:4px 12px;font-size:12px}.btn-lg{padding:10px 20px;font-size:16px}.table-toolbar{margin-bottom:var(--spacing-lg);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--spacing-md);padding:var(--spacing-md);box-shadow:var(--shadow-sm)}.stat-card,.table-toolbar{background:var(--bg-white);border-radius:var(--radius-md);border:1px solid var(--border-light)}.stat-card{padding:var(--spacing-lg);box-shadow:var(--shadow-md);text-align:center;transition:all var(--transition-normal)}.stat-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}.stat-card .stat-number{font-size:32px;font-weight:700;color:var(--primary-color);margin:var(--spacing-sm) 0}.stat-card .stat-label{color:var(--text-secondary);font-size:14px;font-weight:500}.stat-card .stat-trend{margin-top:var(--spacing-sm);font-size:12px;font-weight:500}.stat-card .stat-trend.up{color:var(--success-color)}.stat-card .stat-trend.down{color:var(--danger-color)}.login-container{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);display:flex;align-items:center;justify-content:center;padding:var(--spacing-lg)}.login-container .login-form{background:var(--bg-white);padding:var(--spacing-xl);border-radius:var(--radius-lg);box-shadow:0 15px 35px rgba(0,0,0,.1);width:100%;max-width:400px;transition:all var(--transition-normal)}.login-container .login-form:hover{box-shadow:0 20px 40px rgba(0,0,0,.15)}.login-container .login-form .login-title{text-align:center;margin-bottom:var(--spacing-xl);color:var(--text-color);font-size:24px;font-weight:700}.dashboard-container{display:flex;min-height:100vh}.dashboard-container .sidebar{width:250px;background:#304156;color:#fff;box-shadow:var(--shadow-md);transition:all var(--transition-normal);position:relative;z-index:100}.dashboard-container .sidebar .logo{height:60px;display:flex;align-items:center;justify-content:center;background:hsla(0,0%,100%,.1);font-size:18px;font-weight:700;border-bottom:1px solid hsla(0,0%,100%,.1)}.dashboard-container .sidebar .menu{padding:var(--spacing-md) 0}.dashboard-container .sidebar .menu .menu-item{padding:var(--spacing-md) var(--spacing-lg);cursor:pointer;transition:all var(--transition-fast);border-radius:0 var(--radius-md) var(--radius-md) 0;margin:0 var(--spacing-xs);display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm)}.dashboard-container .sidebar .menu .menu-item:hover{background:hsla(0,0%,100%,.1)}.dashboard-container .sidebar .menu .menu-item.active{background:var(--primary-color);margin:0;border-radius:0}.dashboard-container .sidebar .menu .menu-item .menu-item-title{flex:1;font-size:14px;font-weight:500}.dashboard-container .sidebar .menu .menu-item .menu-item-icon{font-size:18px;transition:transform var(--transition-fast)}.dashboard-container .sidebar .menu .menu-item.active .menu-item-icon{transform:scale(1.1)}.dashboard-container .sidebar .menu .sub-menu{background:rgba(0,0,0,.15);overflow:hidden;max-height:0;transition:max-height var(--transition-normal)}.dashboard-container .sidebar .menu .sub-menu.open{max-height:500px}.dashboard-container .sidebar .menu .sub-menu .sub-menu-item{padding:var(--spacing-sm) var(--spacing-lg) var(--spacing-sm) calc(var(--spacing-lg)*2);cursor:pointer;transition:all var(--transition-fast);font-size:13px;border-left:3px solid transparent}.dashboard-container .sidebar .menu .sub-menu .sub-menu-item:hover{background:hsla(0,0%,100%,.1);padding-left:calc(var(--spacing-lg)*2 + 5px)}.dashboard-container .sidebar .menu .sub-menu .sub-menu-item.active{background:rgba(64,158,255,.2);border-left-color:var(--primary-color);color:var(--primary-color);padding-left:calc(var(--spacing-lg)*2 + 5px)}.dashboard-container .main-content{flex:1;background:var(--bg-color);display:flex;flex-direction:column;transition:all var(--transition-normal)}.dashboard-container .main-content .header{height:60px;background:var(--bg-white);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:99;transition:all var(--transition-normal)}.dashboard-container .main-content .header .header-title{font-size:18px;font-weight:700;color:var(--text-color)}.dashboard-container .main-content .header .header-actions{display:flex;align-items:center;gap:var(--spacing-md)}.dashboard-container .main-content .header .header-actions .notification{position:relative;cursor:pointer}.dashboard-container .main-content .header .header-actions .notification .badge{position:absolute;top:-5px;right:-5px;background:var(--danger-color);color:#fff;border-radius:var(--radius-full);width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.dashboard-container .main-content .header .header-actions .user-info{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-full);transition:background-color var(--transition-fast);cursor:pointer}.dashboard-container .main-content .header .header-actions .user-info:hover{background-color:var(--bg-gray)}.dashboard-container .main-content .header .header-actions .user-info .avatar{width:32px;height:32px;border-radius:var(--radius-full);background:linear-gradient(135deg,var(--primary-color) 0,var(--primary-dark) 100%);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;box-shadow:0 2px 4px rgba(64,158,255,.3)}.dashboard-container .main-content .header .header-actions .user-info .user-details{display:flex;flex-direction:column}.dashboard-container .main-content .header .header-actions .user-info .user-details .user-name{font-size:14px;font-weight:500;color:var(--text-color)}.dashboard-container .main-content .header .header-actions .user-info .user-details .user-role{font-size:12px;color:var(--text-light)}.dashboard-container .main-content .content{flex:1;padding:var(--spacing-lg);overflow-y:auto}.dashboard-container .main-content .content::-webkit-scrollbar{width:6px}.dashboard-container .main-content .content::-webkit-scrollbar-track{background:var(--bg-gray);border-radius:var(--radius-sm)}.dashboard-container .main-content .content::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:var(--radius-sm)}.dashboard-container .main-content .content::-webkit-scrollbar-thumb:hover{background:var(--text-light)}@media(max-width:768px){.dashboard-container{flex-direction:column}.dashboard-container .sidebar{width:100%;height:auto}.dashboard-container .sidebar .menu{display:flex;overflow-x:auto;padding:var(--spacing-sm) 0}.dashboard-container .sidebar .menu .menu-item{white-space:nowrap;margin:0;border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md)}.dashboard-container .sidebar .menu .sub-menu{display:none}.dashboard-container .main-content .header{padding:0 var(--spacing-md)}.dashboard-container .main-content .header .header-title{font-size:16px}.dashboard-container .main-content .header .header-actions{gap:var(--spacing-sm)}.dashboard-container .main-content .header .header-actions .user-info .user-details{display:none}.dashboard-container .main-content .content,.login-container{padding:var(--spacing-md)}.login-container .login-form{padding:var(--spacing-lg)}.login-container .login-form .login-title{font-size:20px;margin-bottom:var(--spacing-lg)}.stat-card{padding:var(--spacing-md)}.stat-card .stat-number{font-size:24px}.card{padding:var(--spacing-md)}}