* { margin: 0; padding: 0; box-sizing: border-box; }

body { font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif; }

.el-aside { background: #304156; overflow-y: auto; }
.logo { height: 60px; display: flex; align-items: center; justify-content: center; }
.logo h2 { color: #fff; font-size: 18px; }

.el-header {
    background: #fff;
    border-bottom: 1px solid #e6e6e6;
    display: flex;
    align-items: center;
    padding: 0 20px;
}
.el-header h3 { font-size: 16px; color: #333; }

.el-main { background: #f0f2f5; padding: 20px; }

.page-content { background: #fff; padding: 20px; border-radius: 4px; min-height: calc(100vh - 140px); }

.toolbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
.toolbar-left { display: flex; gap: 10px; align-items: center; }

.status-online { color: #67c23a; font-weight: bold; }
.status-offline { color: #409EFF; font-weight: bold; }

.result-json {
    background: #1e1e1e;
    color: #d4d4d4;
    padding: 16px;
    border-radius: 4px;
    font-family: 'Consolas', 'Courier New', monospace;
    font-size: 13px;
    white-space: pre-wrap;
    word-break: break-all;
    max-height: 500px;
    overflow-y: auto;
    margin-top: 16px;
}

.chart-container { width: 100%; height: 400px; margin-bottom: 20px; }

.filter-bar { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 20px; align-items: center; }
.filter-bar .el-select { width: 160px; }
.filter-bar .el-date-picker { width: 360px; }

.plan-icon { cursor: pointer; color: #e74c3c; font-size: 13px; font-weight: bold; }
.plan-icon:hover { color: #c0392b; text-decoration: underline; }

.pulse-marker { background:transparent !important; border:none !important; }
.pulse-dot { position:absolute; top:6px; left:6px; width:8px; height:8px; border-radius:50%; background:#409EFF; border:2px solid #fff; z-index:3; }
.pulse-ring, .pulse-ring2 { position:absolute; top:0; left:0; width:20px; height:20px; border-radius:50%; border:2px solid #409EFF; animation: pulse-anim 2s ease-out infinite; z-index:1; }
.pulse-ring2 { animation-delay: 1s; }
@keyframes pulse-anim { 0% { transform:scale(0.5); opacity:1; } 100% { transform:scale(2.5); opacity:0; } }

.dash-3d-overlay {
    position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 500;
    background: rgba(0,0,0,0.6); display: flex; align-items: center; justify-content: center;
}

.login-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.login-card {
    width: 400px;
    background: #fff;
    padding: 40px;
    border-radius: 8px;
    box-shadow: 0 2px 12px rgba(0,0,0,0.15);
}
