*{margin:0;padding:0;box-sizing:border-box}body{font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;background-color:#f5f7fa}#app{min-height:100vh;display:flex;flex-direction:column}.app-header{background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 2px 12px #0000001a;padding:0;height:60px;line-height:60px}.header-content{display:flex;align-items:center;justify-content:space-between;height:100%;max-width:1200px;margin:0 auto;padding:0 20px}.logo-section{display:flex;align-items:center;gap:12px}.app-title{color:#fff;font-size:20px;font-weight:600;margin:0}.nav-menu{background:transparent;border:none;flex:1;justify-content:center}.nav-menu .el-menu-item{color:#fffc;border-bottom:2px solid transparent;transition:all .3s}.nav-menu .el-menu-item:hover,.nav-menu .el-menu-item.is-active{color:#fff;background:#ffffff1a;border-bottom-color:#fff}.header-actions{display:flex;align-items:center;gap:15px}.health-indicator{display:flex;align-items:center;cursor:pointer}.health-indicator .loading{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.app-main{flex:1;padding:0;background-color:#f5f7fa}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}.app-footer{background:#fff;border-top:1px solid #e4e7ed;text-align:center;height:50px;line-height:50px}.footer-content p{color:#909399;font-size:14px;margin:0}@media(max-width:768px){.header-content{padding:0 10px}.app-title{font-size:16px}.nav-menu{display:none}.header-actions{gap:10px}}.el-card{border-radius:8px;box-shadow:0 2px 12px #0000001a}.el-button,.el-input,.el-select{border-radius:6px}:root{--primary-color: #409EFF;--success-color: #67C23A;--warning-color: #E6A23C;--danger-color: #F56C6C;--info-color: #909399;--text-primary: #303133;--text-regular: #606266;--text-secondary: #909399;--text-placeholder: #C0C4CC;--border-base: #DCDFE6;--border-light: #E4E7ED;--border-lighter: #EBEEF5;--border-extra-light: #F2F6FC;--background-base: #F5F7FA;--background-light: #FAFAFA}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.flex{display:flex}.flex-center{display:flex;align-items:center;justify-content:center}.flex-between{display:flex;align-items:center;justify-content:space-between}.flex-column{flex-direction:column}.flex-1{flex:1}.mb-10{margin-bottom:10px}.mb-20{margin-bottom:20px}.mt-10{margin-top:10px}.mt-20{margin-top:20px}.p-10{padding:10px}.p-20{padding:20px}.fade-in{animation:fadeIn .3s ease-in}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.slide-up{animation:slideUp .3s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.mobile-hidden{display:none!important}}@media(min-width:769px){.desktop-hidden{display:none!important}}.status-online{color:var(--success-color)}.status-offline{color:var(--danger-color)}.status-warning{color:var(--warning-color)}.card-shadow{box-shadow:0 2px 12px #0000001a;transition:box-shadow .3s}.card-shadow:hover{box-shadow:0 4px 20px #00000026}.loading-overlay{position:relative}.loading-overlay:after{content:"";position:absolute;inset:0;background:#fffc;display:flex;align-items:center;justify-content:center;z-index:1000}.el-table .el-table__row:hover{cursor:pointer}.button-group{display:flex;gap:10px;flex-wrap:wrap}.button-group .el-button{margin:0}.stat-card{text-align:center;padding:10px;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);border-radius:8px;transition:transform .3s}.stat-card:hover{transform:translateY(-2px)}.tag-group{display:flex;gap:8px;flex-wrap:wrap}.description-list{display:grid;grid-template-columns:auto 1fr;gap:10px 20px;align-items:center}.description-list .label{font-weight:600;color:var(--text-regular)}.description-list .value{color:var(--text-primary)}
