* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); min-height: 100vh; padding: 10px; } .container { max-width: 1400px; margin: 0 auto; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); border-radius: 16px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); overflow: hidden; } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 25px 20px; text-align: center; } .header h1 { font-size: 24px; margin-bottom: 8px; font-weight: 600; } .header p { opacity: 0.9; font-size: 13px; } .content { padding: 20px; } .token-info { background: linear-gradient(135deg, #e0f7fa 0%, #b2ebf2 100%); border-left: 4px solid #00bcd4; padding: 12px 16px; border-radius: 8px; margin-bottom: 20px; font-size: 13px; color: #006064; } .token-info strong { color: #00838f; } .stats-bar { display: flex; justify-content: space-between; align-items: center; padding: 15px; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); border-radius: 10px; margin-bottom: 20px; flex-wrap: wrap; gap: 10px; } .stats-item { font-size: 14px; color: #2d3748; } .stats-item strong { color: #667eea; font-size: 18px; } .card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 20px; } .vps-card { background: white; border-radius: 12px; padding: 20px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); transition: all 0.3s ease; border: 1px solid #e2e8f0; } .vps-card:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); } .card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; padding-bottom: 12px; border-bottom: 2px solid #f0f0f0; } .vps-id { font-size: 18px; font-weight: 600; color: #2d3748; } .status-badge { display: inline-block; padding: 6px 14px; border-radius: 20px; color: white; font-size: 12px; font-weight: 600; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .card-body { margin-bottom: 15px; } .info-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #f7fafc; font-size: 13px; } .info-row:last-child { border-bottom: none; } .info-label { color: #718096; font-weight: 500; } .info-value { color: #2d3748; font-weight: 600; text-align: right; max-width: 60%; word-break: break-all; } .power-status { display: flex; align-items: center; gap: 8px; padding: 10px; background: #f7fafc; border-radius: 8px; margin-bottom: 15px; } .power-indicator { width: 12px; height: 12px; border-radius: 50%; display: inline-block; } .power-on { background: #48bb78; box-shadow: 0 0 8px #48bb78; } .power-off { background: #e53e3e; box-shadow: 0 0 8px #e53e3e; } .power-unknown { background: #a0aec0; } .power-text { font-size: 14px; font-weight: 600; color: #2d3748; } .card-actions { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; } .btn { padding: 10px 16px; border: none; border-radius: 8px; cursor: pointer; font-size: 13px; font-weight: 600; text-decoration: none; color: white; transition: all 0.3s; text-align: center; display: block; } .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } .btn:active { transform: translateY(0); } .btn-success { background: linear-gradient(135deg, #48bb78 0%, #38a169 100%); } .btn-warning { background: linear-gradient(135deg, #ed8936 0%, #dd6b20 100%); } .btn-danger { background: linear-gradient(135deg, #f56565 0%, #e53e3e 100%); } .btn-info { background: linear-gradient(135deg, #4299e1 0%, #3182ce 100%); } .error-message { background: linear-gradient(135deg, #fed7d7 0%, #feb2b2 100%); border-left: 4px solid #f56565; color: #c53030; padding: 20px; border-radius: 8px; text-align: center; } .success-message { background: linear-gradient(135deg, #c6f6d5 0%, #9ae6b4 100%); border-left: 4px solid #48bb78; color: #22543d; padding: 20px; border-radius: 8px; text-align: center; margin-bottom: 20px; } .loading { text-align: center; padding: 40px; color: #718096; } .loading-spinner { display: inline-block; width: 40px; height: 40px; border: 4px solid #e2e8f0; border-top-color: #667eea; border-radius: 50%; animation: spin 0.8s linear infinite; margin-bottom: 15px; } @keyframes spin { to { transform: rotate(360deg); } } /* 响应式设计 */ @media (max-width: 768px) { body { padding: 5px; } .header { padding: 20px 15px; } .header h1 { font-size: 20px; } .content { padding: 15px; } .card-grid { grid-template-columns: 1fr; gap: 15px; } .vps-card { padding: 15px; } .card-actions { grid-template-columns: 1fr; } .stats-bar { flex-direction: column; align-items: flex-start; } .info-row { flex-direction: column; gap: 4px; } .info-value { max-width: 100%; text-align: left; } } @media (max-width: 480px) { .header h1 { font-size: 18px; } .vps-id { font-size: 16px; } .btn { padding: 8px 12px; font-size: 12px; } }